dejan-auto_html 1.1.2 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.rdoc +6 -0
- data/README.rdoc +3 -2
- data/VERSION.yml +2 -2
- data/auto_html.gemspec +8 -2
- data/lib/auto_html/filters/dailymotion.rb +6 -0
- data/lib/auto_html/filters/link.rb +3 -46
- data/lib/auto_html/filters/sanitize.rb +6 -0
- data/test/unit/filters/dailymotion_test.rb +20 -0
- data/test/unit/filters/link_test.rb +19 -4
- data/test/unit/filters/sanitize_test.rb +36 -0
- metadata +8 -2
data/CHANGELOG.rdoc
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 1.2.0, released 2009-09-26
|
2
|
+
|
3
|
+
* link filter now uses Rails' link discovery engine. Closes: http://github.com/dejan/auto_html/issues#issue/2 and http://github.com/dejan/auto_html/issues#issue/3 if Rails 2.3+ is in use.
|
4
|
+
* added dailymotion filter
|
5
|
+
* added sanitize filter
|
6
|
+
|
1
7
|
== 1.1.2, released 2009-09-24
|
2
8
|
|
3
9
|
* link filter fix. Closes: http://github.com/dejan/auto_html/issues#issue/2
|
data/README.rdoc
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
= auto_html
|
2
2
|
|
3
|
-
Rails plugin for
|
3
|
+
Rails plugin for transforming urls to appropriate resource (image, link, YouTube, Vimeo video,...). Check out the {live demo}[http://auto_html.rors.org].
|
4
4
|
|
5
5
|
|
6
6
|
== Synopsis
|
@@ -54,6 +54,7 @@ Plugin is highly customizable, and you can easily create new filters that will t
|
|
54
54
|
== Bundled filters
|
55
55
|
|
56
56
|
For filter list and options they support check: http://github.com/dejan/auto_html/tree/master/lib/auto_html/filters
|
57
|
+
NOTE: auto_html uses Rails' engine for discovering links. There are some bugs with that engine in versions under Rails 2.3.
|
57
58
|
|
58
59
|
|
59
60
|
== Install
|
@@ -63,7 +64,7 @@ For filter list and options they support check: http://github.com/dejan/auto_htm
|
|
63
64
|
To enable the library in your Rails 2.1 (or greater) project, use the gem configuration method in "config/environment.rb"
|
64
65
|
|
65
66
|
Rails::Initializer.run do |config|
|
66
|
-
config.gem 'dejan-auto_html', :version => '~> 1.1.
|
67
|
+
config.gem 'dejan-auto_html', :version => '~> 1.1.2', :lib => 'auto_html', :source => 'http://gems.github.com'
|
67
68
|
end
|
68
69
|
|
69
70
|
=== As a Rails plugin
|
data/VERSION.yml
CHANGED
data/auto_html.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{auto_html}
|
8
|
-
s.version = "1.
|
8
|
+
s.version = "1.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Dejan Simic"]
|
12
|
-
s.date = %q{2009-09-
|
12
|
+
s.date = %q{2009-09-26}
|
13
13
|
s.description = %q{Automatically transforms urls (via domain) and includes the destination resource (Vimeo, YouTube movie, image, ...) in your document}
|
14
14
|
s.email = %q{desimic@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -28,10 +28,12 @@ Gem::Specification.new do |s|
|
|
28
28
|
"lib/auto_html/base.rb",
|
29
29
|
"lib/auto_html/builder.rb",
|
30
30
|
"lib/auto_html/filter.rb",
|
31
|
+
"lib/auto_html/filters/dailymotion.rb",
|
31
32
|
"lib/auto_html/filters/google_video.rb",
|
32
33
|
"lib/auto_html/filters/html_escape.rb",
|
33
34
|
"lib/auto_html/filters/image.rb",
|
34
35
|
"lib/auto_html/filters/link.rb",
|
36
|
+
"lib/auto_html/filters/sanitize.rb",
|
35
37
|
"lib/auto_html/filters/simple_format.rb",
|
36
38
|
"lib/auto_html/filters/vimeo.rb",
|
37
39
|
"lib/auto_html/filters/youtube.rb",
|
@@ -43,10 +45,12 @@ Gem::Specification.new do |s|
|
|
43
45
|
"test/functional/auto_html_for_test.rb",
|
44
46
|
"test/test_helper.rb",
|
45
47
|
"test/unit/auto_html_test.rb",
|
48
|
+
"test/unit/filters/dailymotion_test.rb",
|
46
49
|
"test/unit/filters/google_video_test.rb",
|
47
50
|
"test/unit/filters/html_escape_test.rb",
|
48
51
|
"test/unit/filters/image_test.rb",
|
49
52
|
"test/unit/filters/link_test.rb",
|
53
|
+
"test/unit/filters/sanitize_test.rb",
|
50
54
|
"test/unit/filters/simple_format_test.rb",
|
51
55
|
"test/unit/filters/vimeo_test.rb",
|
52
56
|
"test/unit/filters/youtube_test.rb",
|
@@ -64,10 +68,12 @@ Gem::Specification.new do |s|
|
|
64
68
|
"test/functional/auto_html_for_test.rb",
|
65
69
|
"test/test_helper.rb",
|
66
70
|
"test/unit/auto_html_test.rb",
|
71
|
+
"test/unit/filters/dailymotion_test.rb",
|
67
72
|
"test/unit/filters/google_video_test.rb",
|
68
73
|
"test/unit/filters/html_escape_test.rb",
|
69
74
|
"test/unit/filters/image_test.rb",
|
70
75
|
"test/unit/filters/link_test.rb",
|
76
|
+
"test/unit/filters/sanitize_test.rb",
|
71
77
|
"test/unit/filters/simple_format_test.rb",
|
72
78
|
"test/unit/filters/vimeo_test.rb",
|
73
79
|
"test/unit/filters/youtube_test.rb",
|
@@ -0,0 +1,6 @@
|
|
1
|
+
AutoHtml.add_filter(:dailymotion).with(:width => 480, :height => 360) do |text, options|
|
2
|
+
text.gsub(/http:\/\/www\.dailymotion\.com.*\/video\/(.+)_*/) do
|
3
|
+
video_id = $1
|
4
|
+
%{<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/#{video_id}&related=0" width="#{options[:width]}" height="#{options[:height]}"><param name="movie" value="http://www.dailymotion.com/swf/#{video_id}&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/#{video_id}?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/#{video_id}" width="#{options[:width]}" height="#{options[:height]}"/></a></object>}
|
5
|
+
end
|
6
|
+
end
|
@@ -1,48 +1,5 @@
|
|
1
|
-
|
2
|
-
# ActionView::Helpers::TagHelper and
|
3
|
-
# ActionView::Helpers::TextHelper
|
4
|
-
#
|
5
|
-
AutoHtml.add_filter(:link).with({}) do |text, options|
|
6
|
-
|
7
|
-
def tag_options(options)
|
8
|
-
unless options.blank?
|
9
|
-
attrs = []
|
10
|
-
attrs = options.map { |key, value| %(#{key}="#{value}") }
|
11
|
-
" #{attrs.sort * ' '}" unless attrs.empty?
|
12
|
-
end
|
13
|
-
end
|
1
|
+
require 'action_view'
|
14
2
|
|
15
|
-
|
16
|
-
|
17
|
-
( # leading text
|
18
|
-
<\w+.*?>| # leading HTML tag, or
|
19
|
-
[^=!:'"/]| # leading punctuation, or
|
20
|
-
^ # beginning of line
|
21
|
-
)
|
22
|
-
(
|
23
|
-
(?:https?://)| # protocol spec, or
|
24
|
-
(?:www\.) # www.*
|
25
|
-
)
|
26
|
-
(
|
27
|
-
[-\w]+ # subdomain or domain
|
28
|
-
(?:\.[-\w]+)* # remaining subdomains or domain
|
29
|
-
(?::\d+)? # port
|
30
|
-
(?:/(?:[~\w\+@%=\(\)-]|(?:[,.;:'][^\s$]))*)* # path
|
31
|
-
(?:[\?|\#][\w\+@%&=.;:-]+)? # query string
|
32
|
-
(?:\#[\w\-]*)? # trailing anchor
|
33
|
-
)
|
34
|
-
([[:punct:]]|<|$|) # trailing text
|
35
|
-
}x
|
36
|
-
end
|
37
|
-
|
38
|
-
extra_options = tag_options(options.stringify_keys) || ""
|
39
|
-
text.gsub(auto_link_re) do
|
40
|
-
all, a, b, c, d = $&, $1, $2, $3, $4
|
41
|
-
if a =~ /<a\s/i # don't replace URL's that are already linked
|
42
|
-
all
|
43
|
-
else
|
44
|
-
text = b + c
|
45
|
-
%(#{a}<a href="#{b=="www."?"http://www.":b}#{c}"#{extra_options}>#{text}</a>#{d})
|
46
|
-
end
|
47
|
-
end
|
3
|
+
AutoHtml.add_filter(:link).with({}) do |text, options|
|
4
|
+
ActionView::Base.new.auto_link(text, :all, options)
|
48
5
|
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../unit_test_helper'
|
2
|
+
|
3
|
+
class GoogleVideoTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_transform
|
6
|
+
result = auto_html("http://www.dailymotion.com/en/featured/video/xag4p2_tempsmorttv-episode-01_shortfilms") { dailymotion }
|
7
|
+
assert_equal '<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/xag4p2_tempsmorttv-episode-01_shortfilms&related=0" width="480" height="360"><param name="movie" value="http://www.dailymotion.com/swf/xag4p2_tempsmorttv-episode-01_shortfilms&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/xag4p2_tempsmorttv-episode-01_shortfilms?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/xag4p2_tempsmorttv-episode-01_shortfilms" width="480" height="360"/></a></object>', result
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_transform_with_tweaked_width
|
11
|
+
result = auto_html("http://www.dailymotion.com/related/x9cyf6/video/x9tinl_happy-tree-friends-as-you-wish-part_fun") { dailymotion :width => 500 }
|
12
|
+
assert_equal '<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/x9tinl_happy-tree-friends-as-you-wish-part_fun&related=0" width="500" height="360"><param name="movie" value="http://www.dailymotion.com/swf/x9tinl_happy-tree-friends-as-you-wish-part_fun&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/x9tinl_happy-tree-friends-as-you-wish-part_fun?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/x9tinl_happy-tree-friends-as-you-wish-part_fun" width="500" height="360"/></a></object>', result
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_transform_with_options
|
16
|
+
result = auto_html("http://www.dailymotion.com/video/xakv5i") { dailymotion(:width => 500, :height => 300) }
|
17
|
+
assert_equal '<object type="application/x-shockwave-flash" data="http://www.dailymotion.com/swf/xakv5i&related=0" width="500" height="300"><param name="movie" value="http://www.dailymotion.com/swf/xakv5i&related=0"></param><param name="allowFullScreen" value="true"></param><param name="allowScriptAccess" value="always"></param><a href="http://www.dailymotion.com/video/xakv5i?embed=1"><img src="http://www.dailymotion.com/thumbnail/video/xakv5i" width="500" height="300"/></a></object>', result
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -7,14 +7,29 @@ class LinkTest < Test::Unit::TestCase
|
|
7
7
|
assert_equal '<a href="http://vukajlija.com">http://vukajlija.com</a>', result
|
8
8
|
end
|
9
9
|
|
10
|
+
def test_transform_with_the_slash_at_the_end
|
11
|
+
result = auto_html("http://github.com/") { link }
|
12
|
+
assert_equal '<a href="http://github.com/">http://github.com/</a>', result
|
13
|
+
end
|
14
|
+
|
10
15
|
def test_transform_with_param
|
11
|
-
result = auto_html('http://
|
12
|
-
assert_equal '<a href="http://
|
16
|
+
result = auto_html('http://example.com/abc?query=ruby') { link }
|
17
|
+
assert_equal '<a href="http://example.com/abc?query=ruby">http://example.com/abc?query=ruby</a>', result
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_transform_with_param_and_trailing_dot
|
21
|
+
result = auto_html('http://example.com/abc?query=ruby.') { link }
|
22
|
+
assert_equal '<a href="http://example.com/abc?query=ruby">http://example.com/abc?query=ruby</a>.', result
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_transform_with_anchor_and_trailing_dot
|
26
|
+
result = auto_html('http://example.com/example#id=123.12.') { link }
|
27
|
+
assert_equal '<a href="http://example.com/example#id=123.12">http://example.com/example#id=123.12</a>.', result
|
13
28
|
end
|
14
29
|
|
15
30
|
def test_transform_with_params
|
16
31
|
result = auto_html('http://www.youtube.com/watch?v=s5C5Zk4kobo&feature=related') { link }
|
17
|
-
assert_equal '<a href="http://www.youtube.com/watch?v=s5C5Zk4kobo&feature=related">http://www.youtube.com/watch?v=s5C5Zk4kobo&feature=related</a>', result
|
32
|
+
assert_equal '<a href="http://www.youtube.com/watch?v=s5C5Zk4kobo&feature=related">http://www.youtube.com/watch?v=s5C5Zk4kobo&feature=related</a>', result
|
18
33
|
end
|
19
34
|
|
20
35
|
def test_transform_with_commas
|
@@ -24,7 +39,7 @@ class LinkTest < Test::Unit::TestCase
|
|
24
39
|
|
25
40
|
def test_transform_complex_url
|
26
41
|
result = auto_html("http://www.google.com/#q=nikola+tesla&ct=tesla09&oi=ddle&fp=Xmf0jJ9P_V0") { link }
|
27
|
-
assert_equal '<a href="http://www.google.com/#q=nikola+tesla&ct=tesla09&oi=ddle&fp=Xmf0jJ9P_V0">http://www.google.com/#q=nikola+tesla&ct=tesla09&oi=ddle&fp=Xmf0jJ9P_V0</a>', result
|
42
|
+
assert_equal '<a href="http://www.google.com/#q=nikola+tesla&ct=tesla09&oi=ddle&fp=Xmf0jJ9P_V0">http://www.google.com/#q=nikola+tesla&ct=tesla09&oi=ddle&fp=Xmf0jJ9P_V0</a>', result
|
28
43
|
end
|
29
44
|
|
30
45
|
def test_transform_with_options
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../unit_test_helper'
|
2
|
+
|
3
|
+
class SanitizeTest < Test::Unit::TestCase
|
4
|
+
|
5
|
+
def test_trasform
|
6
|
+
result = auto_html("<script>alert(0)</script>") { sanitize }
|
7
|
+
assert_equal "", result
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_trasform2
|
11
|
+
result = auto_html("<div>test</div>") { sanitize }
|
12
|
+
assert_equal "<div>test</div>", result
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_trasform3
|
16
|
+
result = auto_html("<div>test</div>") { sanitize :tags => %w(div) }
|
17
|
+
assert_equal "<div>test</div>", result
|
18
|
+
end
|
19
|
+
|
20
|
+
def test_trasform4
|
21
|
+
result = auto_html("<div>test</div>") { sanitize :tags => %w(p) }
|
22
|
+
assert_equal "test", result
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_trasform5
|
26
|
+
result = auto_html("<a rel='nofollow'>test</div>") { sanitize :tags => %w(a), :attributes => %w(href)}
|
27
|
+
assert_equal "<a>test", result
|
28
|
+
#
|
29
|
+
# from Rails doc:
|
30
|
+
#
|
31
|
+
# Please note that sanitizing user-provided text does not
|
32
|
+
# guarantee that the resulting markup is valid.
|
33
|
+
#
|
34
|
+
end
|
35
|
+
|
36
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dejan-auto_html
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Dejan Simic
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2009-09-
|
12
|
+
date: 2009-09-26 00:00:00 -07:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|
@@ -34,10 +34,12 @@ files:
|
|
34
34
|
- lib/auto_html/base.rb
|
35
35
|
- lib/auto_html/builder.rb
|
36
36
|
- lib/auto_html/filter.rb
|
37
|
+
- lib/auto_html/filters/dailymotion.rb
|
37
38
|
- lib/auto_html/filters/google_video.rb
|
38
39
|
- lib/auto_html/filters/html_escape.rb
|
39
40
|
- lib/auto_html/filters/image.rb
|
40
41
|
- lib/auto_html/filters/link.rb
|
42
|
+
- lib/auto_html/filters/sanitize.rb
|
41
43
|
- lib/auto_html/filters/simple_format.rb
|
42
44
|
- lib/auto_html/filters/vimeo.rb
|
43
45
|
- lib/auto_html/filters/youtube.rb
|
@@ -49,10 +51,12 @@ files:
|
|
49
51
|
- test/functional/auto_html_for_test.rb
|
50
52
|
- test/test_helper.rb
|
51
53
|
- test/unit/auto_html_test.rb
|
54
|
+
- test/unit/filters/dailymotion_test.rb
|
52
55
|
- test/unit/filters/google_video_test.rb
|
53
56
|
- test/unit/filters/html_escape_test.rb
|
54
57
|
- test/unit/filters/image_test.rb
|
55
58
|
- test/unit/filters/link_test.rb
|
59
|
+
- test/unit/filters/sanitize_test.rb
|
56
60
|
- test/unit/filters/simple_format_test.rb
|
57
61
|
- test/unit/filters/vimeo_test.rb
|
58
62
|
- test/unit/filters/youtube_test.rb
|
@@ -91,10 +95,12 @@ test_files:
|
|
91
95
|
- test/functional/auto_html_for_test.rb
|
92
96
|
- test/test_helper.rb
|
93
97
|
- test/unit/auto_html_test.rb
|
98
|
+
- test/unit/filters/dailymotion_test.rb
|
94
99
|
- test/unit/filters/google_video_test.rb
|
95
100
|
- test/unit/filters/html_escape_test.rb
|
96
101
|
- test/unit/filters/image_test.rb
|
97
102
|
- test/unit/filters/link_test.rb
|
103
|
+
- test/unit/filters/sanitize_test.rb
|
98
104
|
- test/unit/filters/simple_format_test.rb
|
99
105
|
- test/unit/filters/vimeo_test.rb
|
100
106
|
- test/unit/filters/youtube_test.rb
|