tmin 0.0.9 → 0.1.0
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/Gemfile.lock +1 -1
- data/firefly.sqlite3 +0 -0
- data/lib/tmin/server.rb +39 -1
- data/lib/tmin/version.rb +1 -1
- data/public/images/ec_background.gif +0 -0
- data/tmin-0.0.9.gem +0 -0
- data/views/admin.haml +92 -0
- data/views/ec.haml +35 -0
- data/views/index.haml +1 -91
- data/views/redirect.haml +6 -0
- metadata +10 -4
data/Gemfile.lock
CHANGED
data/firefly.sqlite3
ADDED
Binary file
|
data/lib/tmin/server.rb
CHANGED
@@ -158,22 +158,49 @@ module Firefly
|
|
158
158
|
@authenticated = has_valid_api_cookie?
|
159
159
|
@config = config
|
160
160
|
@highlight = nil
|
161
|
-
@title = "tminus.it
|
161
|
+
@title = "tminus.it"
|
162
162
|
|
163
163
|
set :session_secret, @config[:session_secret]
|
164
164
|
end
|
165
165
|
|
166
166
|
get '/' do
|
167
|
+
if @authenticated
|
167
168
|
@highlight = Firefly::Url.first(:code => params[:highlight])
|
168
169
|
@error = params[:highlight] == "error"
|
169
170
|
|
170
171
|
sort_column = params[:s] || 'created_at'
|
171
172
|
sort_order = params[:d] || 'desc'
|
173
|
+
|
172
174
|
|
173
175
|
@urls = Firefly::Url.all(:limit => config[:recent_urls], :order => [ sort_column.to_sym.send(sort_order.to_sym) ] )
|
174
176
|
|
177
|
+
|
178
|
+
haml :admin
|
179
|
+
else
|
175
180
|
haml :index
|
176
181
|
end
|
182
|
+
end
|
183
|
+
|
184
|
+
|
185
|
+
get '/admin' do
|
186
|
+
|
187
|
+
if @unthenticated
|
188
|
+
redirect "/", 301
|
189
|
+
else
|
190
|
+
@highlight = Firefly::Url.first(:code => params[:highlight])
|
191
|
+
@error = params[:highlight] == "error"
|
192
|
+
|
193
|
+
sort_column = params[:s] || 'created_at'
|
194
|
+
sort_order = params[:d] || 'desc'
|
195
|
+
|
196
|
+
|
197
|
+
@urls = Firefly::Url.all(:limit => config[:recent_urls], :order => [ sort_column.to_sym.send(sort_order.to_sym) ] )
|
198
|
+
|
199
|
+
|
200
|
+
haml :admin
|
201
|
+
end
|
202
|
+
end
|
203
|
+
|
177
204
|
|
178
205
|
post '/api/set' do
|
179
206
|
store_api_key(params[:api_key])
|
@@ -269,15 +296,26 @@ module Firefly
|
|
269
296
|
get '/:code' do
|
270
297
|
@url = Firefly::Url.first(:code => params[:code])
|
271
298
|
|
299
|
+
|
300
|
+
|
272
301
|
if @url.nil?
|
273
302
|
status 404
|
274
303
|
"Sorry, that code is unknown."
|
304
|
+
|
305
|
+
else
|
306
|
+
if @url.code == 'ec'
|
307
|
+
@short_url = "http://#{config[:hostname]}/#{@url.code}"
|
308
|
+
@url.register_click!
|
309
|
+
haml :ec
|
275
310
|
else
|
276
311
|
@short_url = "http://#{config[:hostname]}/#{@url.code}"
|
277
312
|
@url.register_click!
|
278
313
|
haml :redirect
|
279
314
|
end
|
280
315
|
end
|
316
|
+
end
|
317
|
+
|
318
|
+
|
281
319
|
|
282
320
|
def initialize config = {}, &blk
|
283
321
|
super
|
data/lib/tmin/version.rb
CHANGED
Binary file
|
data/tmin-0.0.9.gem
ADDED
Binary file
|
data/views/admin.haml
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
- if @authenticated
|
2
|
+
.sidebox
|
3
|
+
%h2 Bookmarklet
|
4
|
+
|
5
|
+
%p
|
6
|
+
Drag the following link to your bookmarks. Click it to shorten the URL to the page you're currently viewing.
|
7
|
+
%p
|
8
|
+
%a{ :href => "javascript:var%20d=document,w=window,enc=encodeURIComponent,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),s2=((s.toString()=='')?s:('%22'+enc(s)+'%22')),key=enc('#{@config[:api_key]}'),f='http://#{@config[:hostname]}/api/add',l=d.location,p='?visual=1&api_key='+key+'&url='+enc(l.href),u=f+p;try{if(!/^(.*\.)?tumblrzzz[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a%20=function(){if(!w.open(u))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();}void(0)" } Shorten with #{@config[:hostname]}
|
9
|
+
|
10
|
+
%h1 How about shortening a URL?
|
11
|
+
|
12
|
+
.the_form
|
13
|
+
%form{ :action => '/api/add', :method => 'post' }
|
14
|
+
%input{ :type => "hidden", :name => "visual", :value => "1" }
|
15
|
+
%p
|
16
|
+
%input.big_url{ :type => 'text', :placeholder => "Paste your long URL here...", :name => 'url', :id => 'url', :size => 40, :autocomplete => "off", :spellcheck => 'false' }
|
17
|
+
%span{ :style => "font-size: 1.8em;" }= '>'
|
18
|
+
%input.big_url{ :type => 'text', :placeholder => "Optional short code", :name => 'short', :id => 'short', :size => 20, :autocomplete => "off", :spellcheck => 'false' }
|
19
|
+
%p
|
20
|
+
%input.big_url{ :type => 'submit', :name => 'submit', :id => 'submit', :value => "Make it short!" }
|
21
|
+
|
22
|
+
- if @highlight
|
23
|
+
%h2 Your short URL
|
24
|
+
|
25
|
+
%table
|
26
|
+
%tr
|
27
|
+
%td.label Short URL
|
28
|
+
%td.label Full URL
|
29
|
+
%td.label Clicks
|
30
|
+
%td.label Shortened at
|
31
|
+
%td.label
|
32
|
+
%tr.highlighted
|
33
|
+
%td.value
|
34
|
+
%input{ :type => "text", :value => short_url(@highlight), :class => 'short_url', :size => 21 }
|
35
|
+
%td.value.fill <a href="#{@highlight.url}">#{truncate @highlight.url, 130}</a>
|
36
|
+
%td.value.center= @highlight.clicks
|
37
|
+
%td.value= @highlight.created_at.strftime("%Y-%m-%d %H:%M")
|
38
|
+
%td.value
|
39
|
+
%a{ :href => "http://twitter.com/home?status=#{tweet(short_url(@highlight))}" }
|
40
|
+
%img.twitter{ :src => "/images/twitter.png", :width => "16", :height => "16" }
|
41
|
+
|
42
|
+
%h2 Recently shortened
|
43
|
+
|
44
|
+
%table
|
45
|
+
%tr
|
46
|
+
%td.label(nowrap='nowrap') Short URL <a href="/?s=code&d=asc">▲</a> <a href="/?s=code&d=desc">▼</a>
|
47
|
+
%td.label(nowrap='nowrap') Full URL <a href="/?s=url&d=asc">▲</a> <a href="/?s=url&d=desc">▼</a>
|
48
|
+
%td.label(nowrap='nowrap') Clicks <a href="/?s=clicks&d=asc">▲</a> <a href="/?s=clicks&d=desc">▼</a>
|
49
|
+
%td.label(nowrap='nowrap') Shortened At <a href="/?s=created_at&d=asc">▲</a> <a href="/?s=created_at&d=desc">▼</a>
|
50
|
+
%td.label
|
51
|
+
- @urls.each do |url|
|
52
|
+
%tr{ :class => is_highlighted?(url) ? 'highlighted' : '' }
|
53
|
+
%td.value
|
54
|
+
%input{ :type => "text", :value => short_url(url), :class => 'short_url', :size => 31 }
|
55
|
+
%td.value.fill <a href="#{url.url}">#{truncate url.url, 95}</a>
|
56
|
+
%td.value.center= url.clicks
|
57
|
+
%td.value= url.created_at.strftime("%Y-%m-%d %H:%M")
|
58
|
+
%td.value
|
59
|
+
%a{ :href => "http://twitter.com/home?status=#{tweet(short_url(url))}" }
|
60
|
+
%img.twitter{ :src => "/images/twitter.png", :width => "16", :height => "16" }
|
61
|
+
|
62
|
+
|
63
|
+
:javascript
|
64
|
+
$(document).ready(function() {
|
65
|
+
$('input.short_url').each(function(index) {
|
66
|
+
$(this).mouseup(function() { $(this).select(); });
|
67
|
+
});
|
68
|
+
|
69
|
+
if (window.location.search == "") {
|
70
|
+
var pathname = window.location.pathname + '?s=created_at&d=desc';
|
71
|
+
} else {
|
72
|
+
var pathname = window.location.pathname + window.location.search;
|
73
|
+
}
|
74
|
+
|
75
|
+
$('#main table tr td.label a').each(function(index) {
|
76
|
+
if ($(this).attr('href') == pathname) {
|
77
|
+
$(this).addClass('highlight');
|
78
|
+
}
|
79
|
+
});
|
80
|
+
});
|
81
|
+
- else
|
82
|
+
%h1 Please enter your API key
|
83
|
+
|
84
|
+
%p
|
85
|
+
Please enter your API key below to make sure only you can shorten URLs here.
|
86
|
+
|
87
|
+
%form{ :action => '/api/set', :method => 'post' }
|
88
|
+
%p
|
89
|
+
%label{ :for => 'api_key' } API Key
|
90
|
+
%input{ :type => 'password', :name => 'api_key', :id => 'api_key' }
|
91
|
+
%p
|
92
|
+
%input{ :type => 'submit', :name => 'submit', :id => 'submit', :value => "Let me in" }
|
data/views/ec.haml
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
%a#applink1{:href => "#{@url.url}"}
|
2
|
+
%img#thumb{:src => "/images/ec_background.gif", :alt => "My Pic"}
|
3
|
+
%p Download tminus now
|
4
|
+
|
5
|
+
|
6
|
+
:javascript
|
7
|
+
var ref = document.referrer;
|
8
|
+
if(ref && ref.toLowerCase().indexOf("twitter.com")!==-1){
|
9
|
+
window.location.href="/";
|
10
|
+
}
|
11
|
+
var appstorefail = "itms://itunes.apple.com/us/app/tminus-make-share-countdown/id507726329?mt=8";
|
12
|
+
function applink(fail){
|
13
|
+
return function(){
|
14
|
+
var clickedAt = +new Date;
|
15
|
+
// During tests on 3g/3gs this timeout fires immediately if less than 500ms.
|
16
|
+
setTimeout(function(){
|
17
|
+
// To avoid failing on return to MobileSafari, ensure freshness!
|
18
|
+
if (+new Date - clickedAt < 2000){
|
19
|
+
window.location = fail;
|
20
|
+
}
|
21
|
+
}, 500);
|
22
|
+
};
|
23
|
+
}
|
24
|
+
document.getElementById("applink1").onclick = applink(appstorefail);
|
25
|
+
var button = document.getElementById("applink1")
|
26
|
+
simulateClick("applink1");
|
27
|
+
function simulateClick(elId) {
|
28
|
+
var evt;
|
29
|
+
var el = document.getElementById(elId);
|
30
|
+
if (document.createEvent) {
|
31
|
+
evt = document.createEvent("MouseEvents");
|
32
|
+
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
|
33
|
+
}
|
34
|
+
(evt) ? el.dispatchEvent(evt) : (el.click && el.click());
|
35
|
+
}
|
data/views/index.haml
CHANGED
@@ -1,91 +1 @@
|
|
1
|
-
|
2
|
-
.sidebox
|
3
|
-
%h2 Bookmarklet
|
4
|
-
|
5
|
-
%p
|
6
|
-
Drag the following link to your bookmarks. Click it to shorten the URL to the page you're currently viewing.
|
7
|
-
%p
|
8
|
-
%a{ :href => "javascript:var%20d=document,w=window,enc=encodeURIComponent,e=w.getSelection,k=d.getSelection,x=d.selection,s=(e?e():(k)?k():(x?x.createRange().text:0)),s2=((s.toString()=='')?s:('%22'+enc(s)+'%22')),key=enc('#{@config[:api_key]}'),f='http://#{@config[:hostname]}/api/add',l=d.location,p='?visual=1&api_key='+key+'&url='+enc(l.href),u=f+p;try{if(!/^(.*\.)?tumblrzzz[^.]*$/.test(l.host))throw(0);tstbklt();}catch(z){a%20=function(){if(!w.open(u))l.href=u;};if(/Firefox/.test(navigator.userAgent))setTimeout(a,0);else%20a();}void(0)" } Shorten with #{@config[:hostname]}
|
9
|
-
|
10
|
-
%h1 How about shortening a URL?
|
11
|
-
|
12
|
-
.the_form
|
13
|
-
%form{ :action => '/api/add', :method => 'post' }
|
14
|
-
%input{ :type => "hidden", :name => "visual", :value => "1" }
|
15
|
-
%p
|
16
|
-
%input.big_url{ :type => 'text', :placeholder => "Paste your long URL here...", :name => 'url', :id => 'url', :size => 40, :autocomplete => "off", :spellcheck => 'false' }
|
17
|
-
%span{ :style => "font-size: 1.8em;" }= '>'
|
18
|
-
%input.big_url{ :type => 'text', :placeholder => "Optional short code", :name => 'short', :id => 'short', :size => 20, :autocomplete => "off", :spellcheck => 'false' }
|
19
|
-
%p
|
20
|
-
%input.big_url{ :type => 'submit', :name => 'submit', :id => 'submit', :value => "Make it short!" }
|
21
|
-
|
22
|
-
- if @highlight
|
23
|
-
%h2 Your short URL
|
24
|
-
|
25
|
-
%table
|
26
|
-
%tr
|
27
|
-
%td.label Short URL
|
28
|
-
%td.label Full URL
|
29
|
-
%td.label Clicks
|
30
|
-
%td.label Shortened at
|
31
|
-
%td.label
|
32
|
-
%tr.highlighted
|
33
|
-
%td.value
|
34
|
-
%input{ :type => "text", :value => short_url(@highlight), :class => 'short_url', :size => 21 }
|
35
|
-
%td.value.fill <a href="#{@highlight.url}">#{truncate @highlight.url, 130}</a>
|
36
|
-
%td.value.center= @highlight.clicks
|
37
|
-
%td.value= @highlight.created_at.strftime("%Y-%m-%d %H:%M")
|
38
|
-
%td.value
|
39
|
-
%a{ :href => "http://twitter.com/home?status=#{tweet(short_url(@highlight))}" }
|
40
|
-
%img.twitter{ :src => "/images/twitter.png", :width => "16", :height => "16" }
|
41
|
-
|
42
|
-
%h2 Recently shortened
|
43
|
-
|
44
|
-
%table
|
45
|
-
%tr
|
46
|
-
%td.label(nowrap='nowrap') Short URL <a href="/?s=code&d=asc">▲</a> <a href="/?s=code&d=desc">▼</a>
|
47
|
-
%td.label(nowrap='nowrap') Full URL <a href="/?s=url&d=asc">▲</a> <a href="/?s=url&d=desc">▼</a>
|
48
|
-
%td.label(nowrap='nowrap') Clicks <a href="/?s=clicks&d=asc">▲</a> <a href="/?s=clicks&d=desc">▼</a>
|
49
|
-
%td.label(nowrap='nowrap') Shortened At <a href="/?s=created_at&d=asc">▲</a> <a href="/?s=created_at&d=desc">▼</a>
|
50
|
-
%td.label
|
51
|
-
- @urls.each do |url|
|
52
|
-
%tr{ :class => is_highlighted?(url) ? 'highlighted' : '' }
|
53
|
-
%td.value
|
54
|
-
%input{ :type => "text", :value => short_url(url), :class => 'short_url', :size => 31 }
|
55
|
-
%td.value.fill <a href="#{url.url}">#{truncate url.url, 130}</a>
|
56
|
-
%td.value.center= url.clicks
|
57
|
-
%td.value= url.created_at.strftime("%Y-%m-%d %H:%M")
|
58
|
-
%td.value
|
59
|
-
%a{ :href => "http://twitter.com/home?status=#{tweet(short_url(url))}" }
|
60
|
-
%img.twitter{ :src => "/images/twitter.png", :width => "16", :height => "16" }
|
61
|
-
|
62
|
-
:javascript
|
63
|
-
$(document).ready(function() {
|
64
|
-
$('input.short_url').each(function(index) {
|
65
|
-
$(this).mouseup(function() { $(this).select(); });
|
66
|
-
});
|
67
|
-
|
68
|
-
if (window.location.search == "") {
|
69
|
-
var pathname = window.location.pathname + '?s=created_at&d=desc';
|
70
|
-
} else {
|
71
|
-
var pathname = window.location.pathname + window.location.search;
|
72
|
-
}
|
73
|
-
|
74
|
-
$('#main table tr td.label a').each(function(index) {
|
75
|
-
if ($(this).attr('href') == pathname) {
|
76
|
-
$(this).addClass('highlight');
|
77
|
-
}
|
78
|
-
});
|
79
|
-
});
|
80
|
-
- else
|
81
|
-
%h1 Please enter your API key
|
82
|
-
|
83
|
-
%p
|
84
|
-
Please enter your API key below to make sure only you can shorten URLs here.
|
85
|
-
|
86
|
-
%form{ :action => '/api/set', :method => 'post' }
|
87
|
-
%p
|
88
|
-
%label{ :for => 'api_key' } API Key
|
89
|
-
%input{ :type => 'password', :name => 'api_key', :id => 'api_key' }
|
90
|
-
%p
|
91
|
-
%input{ :type => 'submit', :name => 'submit', :id => 'submit', :value => "Let me in" }
|
1
|
+
%h3 Nothing to see here!
|
data/views/redirect.haml
CHANGED
@@ -1,6 +1,12 @@
|
|
1
1
|
<a id="applink1" href="#{@url.url}">Opening the awesome event now!</a>
|
2
2
|
|
3
|
+
|
4
|
+
|
3
5
|
:javascript
|
6
|
+
var ref = document.referrer;
|
7
|
+
if(ref && ref.toLowerCase().indexOf("twitter.com")!==-1){
|
8
|
+
window.location.href="/";
|
9
|
+
}
|
4
10
|
var appstorefail = "itms://itunes.apple.com/us/app/tminus-make-share-countdown/id507726329?mt=8";
|
5
11
|
function applink(fail){
|
6
12
|
return function(){
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: tmin
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 27
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
+
- 1
|
8
9
|
- 0
|
9
|
-
|
10
|
-
version: 0.0.9
|
10
|
+
version: 0.1.0
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- drobs
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-03-
|
18
|
+
date: 2012-03-22 00:00:00 -05:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -228,6 +228,7 @@ files:
|
|
228
228
|
- README.rdoc
|
229
229
|
- Rakefile
|
230
230
|
- config.ru.example
|
231
|
+
- firefly.sqlite3
|
231
232
|
- lib/tmin.rb
|
232
233
|
- lib/tmin/base62.rb
|
233
234
|
- lib/tmin/code_factory.rb
|
@@ -236,6 +237,7 @@ files:
|
|
236
237
|
- lib/tmin/url.rb
|
237
238
|
- lib/tmin/version.rb
|
238
239
|
- public/favicon.ico
|
240
|
+
- public/images/ec_background.gif
|
239
241
|
- public/images/twitter.png
|
240
242
|
- public/jquery-1.4.2.min.js
|
241
243
|
- public/reset.css
|
@@ -261,7 +263,11 @@ files:
|
|
261
263
|
- tmin-0.0.6.gem
|
262
264
|
- tmin-0.0.7.gem
|
263
265
|
- tmin-0.0.8.gem
|
266
|
+
- tmin-0.0.9.gem
|
267
|
+
- tmin-0.1.0.gem
|
264
268
|
- tmin.gemspec
|
269
|
+
- views/admin.haml
|
270
|
+
- views/ec.haml
|
265
271
|
- views/error.haml
|
266
272
|
- views/index.haml
|
267
273
|
- views/info.haml
|