embedrb 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.document +5 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +82 -0
- data/LICENSE +504 -0
- data/LICENSE.txt +20 -0
- data/README.md +96 -0
- data/Rakefile +56 -0
- data/embedrb.gemspec +79 -0
- data/lib/embedrb/audio/embed_audio.rb +25 -0
- data/lib/embedrb/base.rb +34 -0
- data/lib/embedrb/embed.rb +87 -0
- data/lib/embedrb/embed_gmap.rb +61 -0
- data/lib/embedrb/embed_open_graph.rb +78 -0
- data/lib/embedrb/embed_url.rb +29 -0
- data/lib/embedrb/image/embed_flickr.rb +28 -0
- data/lib/embedrb/image/embed_images.rb +27 -0
- data/lib/embedrb/image/embed_instagram.rb +28 -0
- data/lib/embedrb/utils.rb +70 -0
- data/lib/embedrb/version.rb +4 -0
- data/lib/embedrb/video/embed_ted.rb +31 -0
- data/lib/embedrb/video/embed_ustream.rb +26 -0
- data/lib/embedrb/video/embed_video.rb +29 -0
- data/lib/embedrb/video/embed_youtube.rb +31 -0
- data/lib/embedrb.rb +35 -0
- data/test/helper.rb +34 -0
- data/test/test_embedrb.rb +7 -0
- metadata +142 -0
data/README.md
ADDED
@@ -0,0 +1,96 @@
|
|
1
|
+
# embedrb
|
2
|
+
|
3
|
+
embedrb is a ruby port of [EmbedJS](http://riteshkr.com/embed.js/)
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'embedrb'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install embedrb
|
20
|
+
|
21
|
+
|
22
|
+
## Simple Usage
|
23
|
+
|
24
|
+
```ruby
|
25
|
+
input = <<EOF
|
26
|
+
I recomended this youtube video https://www.youtube.com/watch?v=wF_3Rp8oe1M
|
27
|
+
http://www.google.com/
|
28
|
+
the following is geocode
|
29
|
+
@(東京駅)
|
30
|
+
EOF
|
31
|
+
opts = {
|
32
|
+
# :openGraphEndpoint => 'http://opengraph.io/api/1.0/site/',
|
33
|
+
:gmap => true,
|
34
|
+
:gmapOptions => {
|
35
|
+
:googleAuthKey => 'google-access-key'
|
36
|
+
}
|
37
|
+
}
|
38
|
+
embed = EmbedRb::Embed.new(opts, input)
|
39
|
+
print(embed.process)
|
40
|
+
```
|
41
|
+
|
42
|
+
## Supported Service
|
43
|
+
|
44
|
+
- Supprted
|
45
|
+
- LINK
|
46
|
+
- OPENGRAPH
|
47
|
+
- MAP
|
48
|
+
- image
|
49
|
+
- BASICIMAGE
|
50
|
+
- FLICKR
|
51
|
+
- INSTAGRAM
|
52
|
+
- video
|
53
|
+
- BASICVIDEO
|
54
|
+
- TED
|
55
|
+
- YOUTUBE
|
56
|
+
- embed only(no detail description)
|
57
|
+
- USTREAM
|
58
|
+
- not working well
|
59
|
+
- audio
|
60
|
+
- BASICAUDIO
|
61
|
+
- Will Supported
|
62
|
+
- SMILEY
|
63
|
+
- HIGHLIGHTCODE
|
64
|
+
- IDEONE
|
65
|
+
- PLUNKER
|
66
|
+
- JSBIN
|
67
|
+
- CODEPEN
|
68
|
+
- JSFIDDLE
|
69
|
+
- GIST
|
70
|
+
- DAILYMOTION
|
71
|
+
- LIVELEAK
|
72
|
+
- VINE
|
73
|
+
- VIMEO
|
74
|
+
- GITHUB
|
75
|
+
- SOUNDCLOUD
|
76
|
+
- SPOTIFY
|
77
|
+
- SLIDESHARE
|
78
|
+
|
79
|
+
- Not Supported
|
80
|
+
- MARKDOWN
|
81
|
+
- EMOJI
|
82
|
+
|
83
|
+
## Development
|
84
|
+
|
85
|
+
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake spec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
86
|
+
|
87
|
+
To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
|
88
|
+
|
89
|
+
## Contributing
|
90
|
+
|
91
|
+
Bug reports and pull requests are welcome on GitHub at https://github.com/liris/embedrb.
|
92
|
+
|
93
|
+
== Copyright
|
94
|
+
|
95
|
+
Copyright (c) 2016 liris. See LICENSE.txt for
|
96
|
+
further details.
|
data/Rakefile
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'bundler'
|
5
|
+
begin
|
6
|
+
Bundler.setup(:default, :development)
|
7
|
+
rescue Bundler::BundlerError => e
|
8
|
+
$stderr.puts e.message
|
9
|
+
$stderr.puts "Run `bundle install` to install missing gems"
|
10
|
+
exit e.status_code
|
11
|
+
end
|
12
|
+
require 'rake'
|
13
|
+
|
14
|
+
lib = File.expand_path('../lib', __FILE__)
|
15
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
16
|
+
require 'embedrb/version'
|
17
|
+
require 'jeweler'
|
18
|
+
Jeweler::Tasks.new do |gem|
|
19
|
+
# gem is a Gem::Specification... see http://guides.rubygems.org/specification-reference/ for more options
|
20
|
+
gem.name = "embedrb"
|
21
|
+
gem.version = EmbedRb::VERSION
|
22
|
+
gem.homepage = "http://github.com/liris/embedrb"
|
23
|
+
gem.license = "MIT"
|
24
|
+
gem.summary = %Q{a ruby port of Embed.js}
|
25
|
+
gem.description = %Q{a ruby port of Embed.js}
|
26
|
+
gem.email = "liris.pp@gmail.com"
|
27
|
+
gem.authors = ["liris"]
|
28
|
+
# dependencies defined in Gemfile
|
29
|
+
end
|
30
|
+
Jeweler::RubygemsDotOrgTasks.new
|
31
|
+
|
32
|
+
require 'rake/testtask'
|
33
|
+
Rake::TestTask.new(:test) do |test|
|
34
|
+
test.libs << 'lib' << 'test'
|
35
|
+
test.pattern = 'test/**/test_*.rb'
|
36
|
+
test.verbose = true
|
37
|
+
end
|
38
|
+
|
39
|
+
desc "Code coverage detail"
|
40
|
+
task :simplecov do
|
41
|
+
ENV['COVERAGE'] = "true"
|
42
|
+
Rake::Task['test'].execute
|
43
|
+
end
|
44
|
+
|
45
|
+
task :default => :test
|
46
|
+
|
47
|
+
require 'rdoc/task'
|
48
|
+
Rake::RDocTask.new do |rdoc|
|
49
|
+
# version = File.exist?('VERSION') ? File.read('VERSION') : ""
|
50
|
+
version = EmbedRb::VERSION
|
51
|
+
|
52
|
+
rdoc.rdoc_dir = 'rdoc'
|
53
|
+
rdoc.title = "embedrb #{version}"
|
54
|
+
rdoc.rdoc_files.include('README*')
|
55
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
56
|
+
end
|
data/embedrb.gemspec
ADDED
@@ -0,0 +1,79 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE DIRECTLY
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
# stub: embedrb 0.1.0 ruby lib
|
6
|
+
|
7
|
+
Gem::Specification.new do |s|
|
8
|
+
s.name = "embedrb"
|
9
|
+
s.version = "0.1.0"
|
10
|
+
|
11
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
12
|
+
s.require_paths = ["lib"]
|
13
|
+
s.authors = ["liris"]
|
14
|
+
s.date = "2016-02-12"
|
15
|
+
s.description = "a ruby port of Embed.js"
|
16
|
+
s.email = "liris.pp@gmail.com"
|
17
|
+
s.extra_rdoc_files = [
|
18
|
+
"LICENSE",
|
19
|
+
"LICENSE.txt",
|
20
|
+
"README.md"
|
21
|
+
]
|
22
|
+
s.files = [
|
23
|
+
".document",
|
24
|
+
"Gemfile",
|
25
|
+
"Gemfile.lock",
|
26
|
+
"LICENSE",
|
27
|
+
"LICENSE.txt",
|
28
|
+
"README.md",
|
29
|
+
"Rakefile",
|
30
|
+
"embedrb.gemspec",
|
31
|
+
"lib/embedrb.rb",
|
32
|
+
"lib/embedrb/audio/embed_audio.rb",
|
33
|
+
"lib/embedrb/base.rb",
|
34
|
+
"lib/embedrb/embed.rb",
|
35
|
+
"lib/embedrb/embed_gmap.rb",
|
36
|
+
"lib/embedrb/embed_open_graph.rb",
|
37
|
+
"lib/embedrb/embed_url.rb",
|
38
|
+
"lib/embedrb/image/embed_flickr.rb",
|
39
|
+
"lib/embedrb/image/embed_images.rb",
|
40
|
+
"lib/embedrb/image/embed_instagram.rb",
|
41
|
+
"lib/embedrb/utils.rb",
|
42
|
+
"lib/embedrb/version.rb",
|
43
|
+
"lib/embedrb/video/embed_ted.rb",
|
44
|
+
"lib/embedrb/video/embed_ustream.rb",
|
45
|
+
"lib/embedrb/video/embed_video.rb",
|
46
|
+
"lib/embedrb/video/embed_youtube.rb",
|
47
|
+
"test/helper.rb",
|
48
|
+
"test/test_embedrb.rb"
|
49
|
+
]
|
50
|
+
s.homepage = "http://github.com/liris/embedrb"
|
51
|
+
s.licenses = ["MIT"]
|
52
|
+
s.rubygems_version = "2.4.5"
|
53
|
+
s.summary = "a ruby port of Embed.js"
|
54
|
+
|
55
|
+
if s.respond_to? :specification_version then
|
56
|
+
s.specification_version = 4
|
57
|
+
|
58
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
59
|
+
s.add_development_dependency(%q<shoulda>, [">= 0"])
|
60
|
+
s.add_development_dependency(%q<rdoc>, ["~> 3.12"])
|
61
|
+
s.add_development_dependency(%q<bundler>, ["~> 1.0"])
|
62
|
+
s.add_development_dependency(%q<jeweler>, ["~> 2.0.1"])
|
63
|
+
s.add_development_dependency(%q<simplecov>, [">= 0"])
|
64
|
+
else
|
65
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
66
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
67
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
68
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
69
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
70
|
+
end
|
71
|
+
else
|
72
|
+
s.add_dependency(%q<shoulda>, [">= 0"])
|
73
|
+
s.add_dependency(%q<rdoc>, ["~> 3.12"])
|
74
|
+
s.add_dependency(%q<bundler>, ["~> 1.0"])
|
75
|
+
s.add_dependency(%q<jeweler>, ["~> 2.0.1"])
|
76
|
+
s.add_dependency(%q<simplecov>, [">= 0"])
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require_relative '../utils'
|
2
|
+
require_relative '../base.rb'
|
3
|
+
|
4
|
+
module EmbedRb
|
5
|
+
class BasicAudio
|
6
|
+
include EmbedRb::Base
|
7
|
+
|
8
|
+
def initialize(input, output, options, embeds)
|
9
|
+
@input = input
|
10
|
+
@output = output
|
11
|
+
@embeds = embeds
|
12
|
+
@options = options
|
13
|
+
@regex = /((?:https?):\/\/\S*\.(?:wav|mp3|ogg))/mi
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def render(url)
|
18
|
+
return <<EOF
|
19
|
+
<div class="ejs-audio ejs-embed">
|
20
|
+
<audio src="#{url}" controls class="video-js ejs-video-js" />
|
21
|
+
</div>
|
22
|
+
EOF
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/embedrb/base.rb
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
|
2
|
+
module EmbedRb
|
3
|
+
module Base
|
4
|
+
def process()
|
5
|
+
embed
|
6
|
+
@output
|
7
|
+
end
|
8
|
+
|
9
|
+
def embed()
|
10
|
+
@input.scan(@regex) {|match|
|
11
|
+
url = match[0]
|
12
|
+
if !@options[:served].include? url
|
13
|
+
text = url_to_text match
|
14
|
+
if text
|
15
|
+
@options[:served] << url
|
16
|
+
@embeds << {
|
17
|
+
:key => url,
|
18
|
+
:text => text
|
19
|
+
}
|
20
|
+
end
|
21
|
+
end
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def url_to_text(matched)
|
26
|
+
url = matched[0]
|
27
|
+
return render url
|
28
|
+
end
|
29
|
+
|
30
|
+
def shorten(url)
|
31
|
+
url.gsub(/http(s?):\/\/(www\.|m\.|)/, '')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require_relative 'embed_url'
|
2
|
+
require_relative 'embed_gmap'
|
3
|
+
require_relative 'embed_open_graph'
|
4
|
+
require_relative 'image/embed_images.rb'
|
5
|
+
require_relative 'image/embed_flickr.rb'
|
6
|
+
require_relative 'image/embed_instagram.rb'
|
7
|
+
require_relative 'video/embed_video'
|
8
|
+
require_relative 'video/embed_ted'
|
9
|
+
require_relative 'video/embed_ustream'
|
10
|
+
require_relative 'video/embed_youtube'
|
11
|
+
require_relative 'audio/embed_audio'
|
12
|
+
require_relative 'utils'
|
13
|
+
|
14
|
+
PROCESSORS = {
|
15
|
+
:link => EmbedRb::Url,
|
16
|
+
:gmap => EmbedRb::Gmap,
|
17
|
+
:video => EmbedRb::BasicVideo,
|
18
|
+
:youtube => EmbedRb::YouTube,
|
19
|
+
:ted => EmbedRb::Ted,
|
20
|
+
:ustream => EmbedRb::Ustream,
|
21
|
+
:image => EmbedRb::BasicImage,
|
22
|
+
:flickr => EmbedRb::Flickr,
|
23
|
+
:instagram => EmbedRb::Instagram,
|
24
|
+
:audio => EmbedRb::BasicAudio,
|
25
|
+
:openGraphEndpoint => EmbedRb::OpenGraph,
|
26
|
+
}
|
27
|
+
|
28
|
+
DEFAULT_OPTIONS = {
|
29
|
+
:link => true,
|
30
|
+
:linkOptions => {
|
31
|
+
:target => 'self',
|
32
|
+
:exclude => ['pdf'],
|
33
|
+
:rel => '',
|
34
|
+
},
|
35
|
+
|
36
|
+
:openGraphEndpoint => nil, # http://opengraph.io/api/1.0/site/${url_encoded_site_url}
|
37
|
+
:openGraphOptions => {
|
38
|
+
:apiKey => nil,
|
39
|
+
:excluded_regex => nil,
|
40
|
+
},
|
41
|
+
|
42
|
+
:gmap => false,
|
43
|
+
:gmapOptions => {
|
44
|
+
:mode => 'place',
|
45
|
+
:googleAuthKey => nil,
|
46
|
+
},
|
47
|
+
|
48
|
+
:video => true,
|
49
|
+
|
50
|
+
:youtube => true,
|
51
|
+
:youtubeOptions => {
|
52
|
+
},
|
53
|
+
|
54
|
+
:ted => true,
|
55
|
+
:ustream => false,
|
56
|
+
|
57
|
+
:image => true,
|
58
|
+
:flickr => true,
|
59
|
+
:instagram => true,
|
60
|
+
|
61
|
+
:audio => true,
|
62
|
+
|
63
|
+
}
|
64
|
+
|
65
|
+
module EmbedRb
|
66
|
+
class Embed
|
67
|
+
def initialize(options, input)
|
68
|
+
@options = EmbedRb.deep_merge(DEFAULT_OPTIONS, options)
|
69
|
+
@options[:served] = []
|
70
|
+
@input = input
|
71
|
+
end
|
72
|
+
|
73
|
+
def process()
|
74
|
+
input = @input
|
75
|
+
embeds = []
|
76
|
+
output = ''
|
77
|
+
|
78
|
+
PROCESSORS.each {|key, klass|
|
79
|
+
if @options[key]
|
80
|
+
output = klass.new(input, output, @options, embeds).process()
|
81
|
+
end
|
82
|
+
}
|
83
|
+
|
84
|
+
EmbedRb.create_text(output, embeds)
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'json'
|
3
|
+
require_relative 'utils'
|
4
|
+
|
5
|
+
module EmbedRb
|
6
|
+
class Gmap
|
7
|
+
def initialize(input, output, options, embeds)
|
8
|
+
@input = input
|
9
|
+
@output = output
|
10
|
+
@embeds = embeds
|
11
|
+
@options = options
|
12
|
+
@regex = /@\((.+)\)/i
|
13
|
+
end
|
14
|
+
|
15
|
+
def process()
|
16
|
+
if @options[:gmapOptions][:googleAuthKey]
|
17
|
+
@input.scan(@regex) {|match|
|
18
|
+
location = match[0]
|
19
|
+
@embeds << {
|
20
|
+
key: match,
|
21
|
+
text: render(location)
|
22
|
+
}
|
23
|
+
}
|
24
|
+
end
|
25
|
+
|
26
|
+
@output
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
def get_coordinate(location)
|
31
|
+
url = "http://maps.googleapis.com/maps/api/geocode/json?address=#{ERB::Util.url_encode(location)}&sensor=false"
|
32
|
+
data = JSON.parse EmbedRb.get_response(url)
|
33
|
+
geometry = data["results"][0]["geometry"]["location"]
|
34
|
+
[geometry["lat"], geometry["lng"]]
|
35
|
+
end
|
36
|
+
|
37
|
+
def render(location)
|
38
|
+
config = @options[:gmapOptions]
|
39
|
+
dims = EmbedRb.get_dimensions(@options)
|
40
|
+
case config[:mode]
|
41
|
+
when 'streetview'
|
42
|
+
lat, lng = get_coordinate(location)
|
43
|
+
format('streetview', config, dims, "location=#{lat},#{lng}&heading=210&pitch=10&fov=35")
|
44
|
+
when 'view'
|
45
|
+
lat, lng = get_coordinate(location)
|
46
|
+
format('view', config, dims, "center=#{lat},#{lng}&zoom=18&maptype=satellite")
|
47
|
+
else
|
48
|
+
format('place', config, dims, "q=#{ERB::Util.url_encode(location)}")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def format(mode, config, dims, params)
|
53
|
+
url = "https://www.google.com/maps/embed/v1/#{mode}?key=#{config[:googleAuthKey]}&#{params}"
|
54
|
+
template = <<EOF
|
55
|
+
<div class="ejs-embed ejs-map">
|
56
|
+
<iframe width="#{dims[:width]}" height="#{dims[:height]}" src="#{url}" />
|
57
|
+
</div>
|
58
|
+
EOF
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,78 @@
|
|
1
|
+
require 'erb'
|
2
|
+
require 'json'
|
3
|
+
require_relative 'base'
|
4
|
+
require_relative 'utils'
|
5
|
+
|
6
|
+
module EmbedRb
|
7
|
+
class OpenGraph
|
8
|
+
include EmbedRb::Base
|
9
|
+
|
10
|
+
def initialize(input, output, options, embeds)
|
11
|
+
@input = input
|
12
|
+
@output = output
|
13
|
+
@options = options
|
14
|
+
@embeds = embeds
|
15
|
+
@url_regex = EmbedRb.url_regex
|
16
|
+
pattern = ['flickr.com|youtube.com|youtu.be|.mp4|.ogv|.webm|.mp3|.wav|.gif|.pdf|.doc|.ppt|.docx|.jpg|.jpeg|.tiff|.png|.svg|.webp|.ogg']
|
17
|
+
openGraphOptions = options[:openGraphOptions]
|
18
|
+
if openGraphOptions[:excluded_regex]
|
19
|
+
pattern[1] = openGraphOptions[:excluded_regex]
|
20
|
+
end
|
21
|
+
@excluded_regex = Regexp.new(pattern.join("|"), Regexp::IGNORECASE)
|
22
|
+
end
|
23
|
+
|
24
|
+
def process()
|
25
|
+
@input.scan(@url_regex) {|match|
|
26
|
+
url = match[2]
|
27
|
+
short_url = shorten(url)
|
28
|
+
if !exclude?(url) && !@options[:served].include?(short_url)
|
29
|
+
p short_url
|
30
|
+
data = fetch(url)
|
31
|
+
if data
|
32
|
+
@options[:served] << short_url
|
33
|
+
@embeds << {
|
34
|
+
:key => url,
|
35
|
+
:text => render(data)
|
36
|
+
}
|
37
|
+
end
|
38
|
+
end
|
39
|
+
}
|
40
|
+
|
41
|
+
@output
|
42
|
+
end
|
43
|
+
|
44
|
+
private
|
45
|
+
def fetch(url)
|
46
|
+
endpoint = @options[:openGraphEndpoint]
|
47
|
+
api = endpoint + ERB::Util.url_encode(url)
|
48
|
+
begin
|
49
|
+
data = JSON.parse EmbedRb.get_response(api)
|
50
|
+
if data && !data["error"]
|
51
|
+
return data
|
52
|
+
end
|
53
|
+
rescue
|
54
|
+
# error handling
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def render(data)
|
59
|
+
return <<EOF
|
60
|
+
<div class="ejs-embed ejs-ogp">
|
61
|
+
<div class="ejs-ogp-thumb" style="background-image:url(#{data["hybridGraph"]['image']})" />
|
62
|
+
<div class="ejs-ogp-details">
|
63
|
+
<div class="ejs-ogp-title">
|
64
|
+
<a href="#{data['url']}" target="#{@options[:linkOptions][:target]}">
|
65
|
+
#{data["hybridGraph"]['title']}
|
66
|
+
</a>
|
67
|
+
</div>
|
68
|
+
<div class="ejs-ogb-details">#{data["hybridGraph"]['description']}</div>
|
69
|
+
</div>
|
70
|
+
</div>
|
71
|
+
EOF
|
72
|
+
end
|
73
|
+
|
74
|
+
def exclude?(url)
|
75
|
+
url.match(@excluded_regex) ? true : false
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
require_relative 'utils'
|
2
|
+
|
3
|
+
module EmbedRb
|
4
|
+
# input = "hoge http://www.youtubue.com/watch?a=b done\n https://hoge.fug/d"
|
5
|
+
# url = Embed::Url.new(input, {:linkOptions => {:target => '_blank'}})
|
6
|
+
# print(url.process)
|
7
|
+
class Url
|
8
|
+
def initialize(input, output, options, embeds)
|
9
|
+
@input = input
|
10
|
+
@options = options
|
11
|
+
@url_regex = EmbedRb.url_regex
|
12
|
+
end
|
13
|
+
|
14
|
+
def process()
|
15
|
+
config = EmbedRb.option(@options, :linkOptions)
|
16
|
+
@input.gsub(@url_regex) {|match|
|
17
|
+
extention = nil
|
18
|
+
if match.include?(".")
|
19
|
+
extention = match[match.rindex(".")+1, match.length].downcase
|
20
|
+
end
|
21
|
+
if config[:exclude].include? extention
|
22
|
+
match
|
23
|
+
else
|
24
|
+
"<a href=\"#{EmbedRb.to_url(match)}\" rel=\"#{config[:rel]}\" target=\"#{config[:target]}\">#{match}</a>"
|
25
|
+
end
|
26
|
+
}
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../utils'
|
2
|
+
require_relative '../base.rb'
|
3
|
+
|
4
|
+
module EmbedRb
|
5
|
+
class Flickr
|
6
|
+
include EmbedRb::Base
|
7
|
+
|
8
|
+
def initialize(input, output, options, embeds)
|
9
|
+
@input = input
|
10
|
+
@output = output
|
11
|
+
@embeds = embeds
|
12
|
+
@options = options
|
13
|
+
@regex = /(flickr.com\/[a-z]+\/[a-zA-Z0-9@_\-]+\/[\d]+)/mi
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def render(url)
|
18
|
+
dims = EmbedRb.get_dimensions(@options)
|
19
|
+
return <<EOF
|
20
|
+
<div class="ejs-embed">
|
21
|
+
<div class="ne-image-wrapper">
|
22
|
+
<iframe src="#{EmbedRb.to_url(url.split('/?')[0])}/player/" width="#{dims[:width]}" height="#{dims[:height]}" />
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
EOF
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
require_relative '../utils'
|
2
|
+
require_relative '../base.rb'
|
3
|
+
|
4
|
+
module EmbedRb
|
5
|
+
class BasicImage
|
6
|
+
include EmbedRb::Base
|
7
|
+
|
8
|
+
def initialize(input, output, options, embeds)
|
9
|
+
@input = input
|
10
|
+
@output = output
|
11
|
+
@embeds = embeds
|
12
|
+
@options = options
|
13
|
+
@regex = /((?:https?):\/\/\S*\.(?:gif|jpg|jpeg|tiff|png|svg|webp))/mi
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def render(url)
|
18
|
+
return <<EOF
|
19
|
+
<div class="ejs-image ejs-embed">
|
20
|
+
<div class="ne-image-wrapper">
|
21
|
+
<img src="#{url}"/>
|
22
|
+
</div>
|
23
|
+
</div>
|
24
|
+
EOF
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require_relative '../utils'
|
2
|
+
require_relative '../base.rb'
|
3
|
+
|
4
|
+
module EmbedRb
|
5
|
+
class Instagram
|
6
|
+
include EmbedRb::Base
|
7
|
+
|
8
|
+
def initialize(input, output, options, embeds)
|
9
|
+
@input = input
|
10
|
+
@output = output
|
11
|
+
@embeds = embeds
|
12
|
+
@options = options
|
13
|
+
@regex = /(instagram.com\/p\/[a-zA-Z0-9_\/\?\-\=]+)/mi
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
def render(url)
|
18
|
+
dims = EmbedRb.get_dimensions(@options)
|
19
|
+
return <<EOF
|
20
|
+
<div class="ejs-embed ejs-instagram">
|
21
|
+
<div class="ne-image-wrapper">
|
22
|
+
<iframe src="#{EmbedRb.to_url(url.split('/?')[0])}/embed/" width="#{dims[:width]}" height="#{dims[:height]}" />
|
23
|
+
</div>
|
24
|
+
</div>
|
25
|
+
EOF
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|