embeditor-rails 0.0.1 → 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.
Files changed (24) hide show
  1. data/README.md +54 -7
  2. data/app/assets/javascripts/embeditor/adapter.js.coffee +21 -11
  3. data/app/assets/javascripts/embeditor/adapters/cover_it_live.js.coffee +16 -15
  4. data/app/assets/javascripts/embeditor/adapters/document_cloud.js.coffee +1 -0
  5. data/app/assets/javascripts/embeditor/adapters/embedly.js.coffee +3 -1
  6. data/app/assets/javascripts/embeditor/adapters/facebook.js.coffee +18 -0
  7. data/app/assets/javascripts/embeditor/adapters/fire_tracker.js.coffee +3 -1
  8. data/app/assets/javascripts/embeditor/adapters/instagram.js.coffee +28 -0
  9. data/app/assets/javascripts/embeditor/adapters/oembed.js.coffee +18 -12
  10. data/app/assets/javascripts/embeditor/adapters/polldaddy.js.coffee +14 -4
  11. data/app/assets/javascripts/embeditor/adapters/rebel_mouse.js.coffee +1 -0
  12. data/app/assets/javascripts/embeditor/adapters/static_template.js.coffee +43 -0
  13. data/app/assets/javascripts/embeditor/adapters/storify.js.coffee +24 -0
  14. data/app/assets/javascripts/embeditor/adapters/twitter.js.coffee +14 -0
  15. data/app/assets/javascripts/embeditor/embeditor.js.coffee +10 -5
  16. data/app/assets/javascripts/embeditor/templates/facebook.jst.eco +2 -0
  17. data/app/assets/javascripts/embeditor/templates/instagram.jst.eco +1 -0
  18. data/app/assets/javascripts/embeditor/templates/polldaddy.jst.eco +4 -0
  19. data/app/assets/javascripts/embeditor/templates/storify.jst.eco +1 -0
  20. data/app/assets/javascripts/embeditor/templates/twitter.jst.eco +2 -0
  21. data/app/assets/javascripts/embeditor/utility.js.coffee +15 -0
  22. data/app/assets/javascripts/embeditor.js +3 -0
  23. data/lib/embeditor-rails/version.rb +1 -1
  24. metadata +16 -3
data/README.md CHANGED
@@ -41,16 +41,26 @@ occur, and call its `swap()` function to perform the swapping:
41
41
  </script>
42
42
  ```
43
43
 
44
- Embeditor works by replacing `A` tags (eg. `<a href="...">Embed</a>`) with the
45
- appropriate embed. There are several adapters included with this engine:
44
+ Embeditor works by replacing `A` tags with a specific class with the
45
+ appropriate embed. The default class is `embed-placeholder`, but that can be
46
+ configured.
46
47
 
47
- * **Embedly** - Covers several services, such as SoundCloud, Spotify,
48
- Facebook, Scribd, among others. Unfortunately, Embedly doesn't work perfectly
49
- all the time.
48
+ There are several adapters included with this engine:
49
+
50
+ * **Embedly** - Covers several services, such as SoundCloud, Spotify, Scribd, Google
51
+ Maps, and others. See
52
+ [the list of Embedly's providers](http://embed.ly/embed/features/providers).
53
+ Embedly doesn't always work perfectly, so Embeditor provides manual adapters
54
+ for some of the providers that Embedly claims to support.
50
55
  * **Cover It Live**
51
- * **Document Cloud**
56
+ * **Polldaddy**
52
57
  * **KPCC's Fire Tracker**
53
- * **Rebel Mouse**
58
+ * **Instagram**
59
+ * **Facebook**
60
+ * **Twitter**
61
+ * **Storify**
62
+ * **Document Cloud** - Not yet supported.
63
+ * **Rebel Mouse** - Not yet supported.
54
64
 
55
65
  None of these are included automatically. To install just the ones you need,
56
66
  add them to your `application.js` :
@@ -80,6 +90,20 @@ You can also selectively require templates:
80
90
 
81
91
  ### Configuration
82
92
 
93
+ #### Embeditor
94
+
95
+ You can configure:
96
+
97
+ * `defaultAdapter` - The adapter that will be used if no adapter is found for
98
+ the provided service.
99
+ * `defaultService` - The service that will be used if no service is provided
100
+ on the placeholder link.
101
+ * `wrapperClass` - The class of the div that will get wrapped around the embed.
102
+ * `placeholderClass` - The class of the `<A>` tags that Embeditor will look for.
103
+
104
+
105
+ #### Embeds
106
+
83
107
  Embeditor offers a system of configuration precedence.
84
108
  The order of precedence is:
85
109
 
@@ -181,8 +205,31 @@ new Embeditor.Base({
181
205
  ```
182
206
 
183
207
 
208
+ ### oEmbed vs. non-oEmbed
209
+
210
+ This library isn't necessarily tied to oEmbed, however it does have support for
211
+ it. Even for services which support oEmbed, there are static templates which
212
+ are able to render the embed properly just based off of the provided URL.
213
+ This eliminates any oEmbed headaches (Access-Control-Allowed-Origin, for
214
+ example), and also reduces the time it takes for an embed to load.
215
+
216
+
217
+
184
218
  ## Extending
185
219
 
186
220
  You can/should add your own adapters! It's easy, I promise. If you add one
187
221
  which you think could be useful to a lot of people, please submit a PR and
188
222
  share the wealth!
223
+
224
+ You can extend your adapter from:
225
+
226
+ * `Embeditor.Adapter`, which is the base adapter.
227
+ * `Embeditor.Adapters.Oembed`, for oEmbed endpoints.
228
+ * `Embeditor.Adapters.StaticTemplate`, for embeds where the embed code is
229
+ stored in the `/templates` directory and rendered with JST.
230
+
231
+
232
+ ## Contributing
233
+
234
+ If you have an adapter that you think would be useful for many, please open
235
+ up a pull request.
@@ -1,24 +1,34 @@
1
- # Your Adapter should define:
2
- # * QueryDefaults - an object of defaults to send as query parameters
1
+ # Your Adapter SHOULD define:
2
+ # * @QueryDefaults - The default parameters if no others are passed in.
3
3
 
4
4
  class Embeditor.Adapter
5
- @TemplatePath = "embeditor/templates/"
5
+ className: "Adapter"
6
6
 
7
- constructor: (@element, options={}) ->
8
- @href = @element.attr('href')
7
+ @QueryDefaults = {}
8
+
9
+ constructor: (@element, @options={}) ->
10
+ @adapter = Embeditor.Adapters[@className]
11
+ @href = @element.attr('href')
12
+ @dataOptions = @_extractData()
13
+ @queryParams = @_buildParams(@dataOptions, options)
9
14
 
10
15
 
11
16
  swap: ->
12
17
  return
13
18
 
14
19
 
20
+ embed: (html) ->
21
+ @wrapper = $("<div />", class: @options.wrapperClass)
22
+ @wrapper.html(html)
23
+ @element.after @wrapper
24
+
25
+
15
26
  _extractData: ->
16
- adapter = @constructor.name
17
27
  dataOptions = {}
18
28
 
19
29
  for key,val of @element.data()
20
30
  # Make sure we care about this attribute
21
- if Embeditor.Adapters[adapter].QueryDefaults?[key]
31
+ if @adapter.QueryDefaults?[key]
22
32
  dataOptions[key] = val
23
33
 
24
34
  dataOptions
@@ -31,8 +41,8 @@ class Embeditor.Adapter
31
41
  # 3. The global options specified at Embeditor initialization,
32
42
  # 4. This adapter's default options (fallback options).
33
43
  _buildParams: (dataOptions, options) ->
34
- adapter = @constructor.name
35
-
36
44
  _.defaults(dataOptions,
37
- options[adapter]?['query'], options['query']
38
- Embeditor.Adapters[adapter].QueryDefaults)
45
+ @adapter.query,
46
+ options['query'],
47
+ @adapter.QueryDefaults
48
+ )
@@ -1,24 +1,25 @@
1
- class Embeditor.Adapters.CoverItLive extends Embeditor.Adapter
2
- @Template = JST[Embeditor.Adapter.TemplatePath + 'cover_it_live']
1
+ class Embeditor.Adapters.CoverItLive extends Embeditor.Adapters.StaticTemplate
2
+ className: "CoverItLive"
3
+
4
+ @Template = Embeditor.Template('cover_it_live')
3
5
 
4
6
  @QueryDefaults =
5
- maxheight : 550
6
7
  maxwidth : 620
8
+ maxheight : 550
7
9
 
8
- @Matcher = new RegExp "/altcast_code=([^/]+)/", "gi"
9
-
10
-
11
- constructor: (@element, options={}) ->
12
- @dataOptions = @_extractData()
13
- @queryParams = @_buildParams(@dataOptions, options)
14
-
15
- super
16
-
10
+ @Matchers = [
11
+ new RegExp "/altcast_code=([^/]+)/", "gi"
12
+ ]
17
13
 
18
14
  swap: ->
19
- event_id = CoverItLive.Matcher.exec(@href)[1]
15
+ # If the href doesn't match our known URL schemes
16
+ # for this adapter, then let's not bother trying.
17
+ match = @_parseUrl()
18
+ return false if not match
19
+
20
+ event_id = match[1]
20
21
 
21
- @element.after CoverItLive.Template
22
+ @embed CoverItLive.Template
22
23
  maxheight : @queryParams.maxheight,
23
24
  maxwidth : @queryParams.maxwidth,
24
- event_id : @event_id
25
+ event_id : event_id
@@ -1 +1,2 @@
1
1
  class Embeditor.Adapters.DocumentCloud extends Embeditor.Adapter
2
+ className: "DocumentCloud"
@@ -1,6 +1,8 @@
1
1
  # This doesn't inherit from Adapters.Oembed because the Embedly plugin
2
2
  # handles most of that stuff on its own.
3
3
  class Embeditor.Adapters.Embedly extends Embeditor.Adapter
4
+ className: "Embedly"
5
+
4
6
  # This object should hold any keys that we want to
5
7
  # send to the API. Any key not in this object will
6
8
  # be ignored as a data attribute.
@@ -14,7 +16,7 @@ class Embeditor.Adapters.Embedly extends Embeditor.Adapter
14
16
  # Key must be specified
15
17
 
16
18
 
17
- constructor: (@element, options={}) ->
19
+ constructor: (@element, @options={}) ->
18
20
  pluginOpts = options['Embedly']?['plugin'] or {}
19
21
  @pluginOptions = _.defaults(pluginOpts, Embedly.PluginDefaults)
20
22
 
@@ -0,0 +1,18 @@
1
+ class Embeditor.Adapters.Facebook extends Embeditor.Adapters.StaticTemplate
2
+ className: "Facebook"
3
+
4
+ @Template = Embeditor.Template('facebook')
5
+
6
+ @QueryDefaults =
7
+ maxwidth : 550
8
+ maxheight : 600
9
+
10
+ # For facebook, we just use the full URL, so no matchers are needed.
11
+ @Matchers = []
12
+
13
+
14
+ swap: ->
15
+ @embed Facebook.Template
16
+ maxheight : @queryParams.maxheight,
17
+ maxwidth : @queryParams.maxwidth,
18
+ url : @href
@@ -1,5 +1,7 @@
1
1
  class Embeditor.Adapters.FireTracker extends Embeditor.Adapters.Oembed
2
- @Path = "http://projects.scpr.org/firetracker/oembed"
2
+ className: "FireTracker"
3
+
4
+ @Endpoint = "http://projects.scpr.org/firetracker/oembed"
3
5
 
4
6
  @QueryDefaults =
5
7
  maxwidth : 510
@@ -0,0 +1,28 @@
1
+ # Instagram's oembed endpoint returns "photo" oembed types (instead of "rich"),
2
+ # and only a URL to the photo, not an actual embed code. Therefore, we need to
3
+ # use StaticTemplate to use the iframe embed code.
4
+ class Embeditor.Adapters.Instagram extends Embeditor.Adapters.StaticTemplate
5
+ className: "Instagram"
6
+
7
+ @Template = Embeditor.Template('instagram')
8
+
9
+ @QueryDefaults =
10
+ maxwidth : 612
11
+ maxheight : 710
12
+
13
+ @Matchers = [
14
+ # http://instagram.com/p/e8hJe6CvTW/
15
+ new RegExp "instagram\.com\/p\/([^/]+)", "gi"
16
+ ]
17
+
18
+
19
+ swap: ->
20
+ match = @_parseUrl()
21
+ return false if not match
22
+
23
+ photo_id = match[1]
24
+
25
+ @embed Instagram.Template
26
+ maxheight : @queryParams.maxheight
27
+ maxwidth : @queryParams.maxwidth
28
+ photo_id : photo_id
@@ -1,17 +1,23 @@
1
+ # Oembed adapters MUST define:
2
+ # * @Endpoint - The URL to the oembed endpoint
3
+ #
4
+ # Oembed adapters SHOULD defined:
5
+ # * @QueryDefaults - The fallback query parameters if no others are specified.
1
6
  class Embeditor.Adapters.Oembed extends Embeditor.Adapter
2
- # Override this. Oembed endpoint.
3
- @Path = null
7
+ className: "Oembed"
4
8
 
5
- constructor: (@element, options={}) ->
6
- @dataOptions = @_extractData()
7
- @queryParams = @_buildParams(@dataOptions, options)
9
+ # Override this. Oembed endpoint.
10
+ @Endpoint = null
8
11
 
9
- super
12
+ swap: ->
13
+ $.ajax
14
+ url : @adapter.Endpoint
15
+ type : 'GET'
16
+ dataType : 'json'
17
+ data : _.extend(@queryParams, {url: @href})
10
18
 
19
+ success: (data, textStatus, jqXHR) =>
20
+ @embed data.html
11
21
 
12
- swap: ->
13
- $.getJSON(
14
- Embeditor.Adapters[@constructor.name].Path,
15
- _.extend({url: @href}, @queryParams),
16
- (data, textStatus, jqXHR) => @element.after(data.html)
17
- )
22
+ error: (jqXHR, textStatus, errorThrown) =>
23
+ console.log('[embeditor oembed] error.', jqXHR)
@@ -1,7 +1,17 @@
1
1
  class Embeditor.Adapters.Polldaddy extends Embeditor.Adapters.Oembed
2
- @Path = "http://polldaddy.com/oembed"
2
+ className: "Polldaddy"
3
+
4
+ @Endpoint = "http://polldaddy.com/oembed/" # Doesn't work w/o trailing slash...
3
5
 
4
6
  @QueryDefaults =
5
- maxwidth : 510
6
- maxheight : 374
7
- format : 'json'
7
+ maxwidth : 620
8
+ maxheight : 550
9
+ format : 'json'
10
+
11
+
12
+ constructor: (@element, @options={}) ->
13
+ super
14
+
15
+ # Work around a polldaddy bug where the oembed endpoint doesn't
16
+ # properly recognize SSL URL's given to it.
17
+ @href = Embeditor.Utility.convertProtocolToHttp(@href)
@@ -1 +1,2 @@
1
1
  class Embeditor.Adapters.RebelMouse extends Embeditor.Adapter
2
+ className: "RebelMouse"
@@ -0,0 +1,43 @@
1
+ # StaticTemplate is for when you just want to hard-code the embed code
2
+ # into the /templates directory. This is either to avoid an expensive
3
+ # call to an oEmbed endpoint, or if there simply isn't another way to
4
+ # programatically retrieve the embed code.
5
+ #
6
+ # Your StaticTemplate adapter MUST define:
7
+ # * @Tempalte - The name of the template to use (in the templates directory)
8
+ #
9
+ # Your StaticTemplate adapter SHOULD define:
10
+ # * @QueryDefaults - The default query paramters if no others are passed in.
11
+ #
12
+ # Your StaticTemplate adapter MAY define:
13
+ # * @Matchers - An array of regular expressions which will be used to extract
14
+ # important information from the URL (such as an ID).
15
+ # If your adapter doesn't need a Matcher, then you don't have to
16
+ # define this property. This property is used by _parseUrl(),
17
+ # which doesn't get called automatically.
18
+ #
19
+ class Embeditor.Adapters.StaticTemplate extends Embeditor.Adapter
20
+ className: "StaticTemplate"
21
+
22
+ # The template to use.
23
+ @Template = null
24
+
25
+ # Query parameter defaults
26
+ @QueryDefaults = {}
27
+
28
+ # The matchers to extract the info out of the URL.
29
+ @Matchers = []
30
+
31
+
32
+ swap: ->
33
+ # Extract the info and render the template
34
+ return
35
+
36
+
37
+ _parseUrl: ->
38
+ match = null
39
+
40
+ _.find @adapter.Matchers, (m) =>
41
+ match = m.exec(@href)
42
+
43
+ match
@@ -0,0 +1,24 @@
1
+ class Embeditor.Adapters.Storify extends Embeditor.Adapters.StaticTemplate
2
+ className: "Storify"
3
+
4
+ @Template = Embeditor.Template('storify')
5
+
6
+ @QueryDefaults =
7
+ maxwidth : 550
8
+ maxheight : 750
9
+
10
+ # For storify, we just use the full URL, so no matchers are needed.
11
+ @Matchers = []
12
+
13
+
14
+ swap: ->
15
+ # Storify's embed code doesn't provide a protocol (http/s), so let's
16
+ # strip it out. We also want to make sure that there is no trailing
17
+ # slash so that we can concatenate other things to the URL.
18
+ url = Embeditor.Utility.stripProtocol(
19
+ Embeditor.Utility.stripTrailingSlash(@href))
20
+
21
+ # Storify embed is responsive, so we don't need to provide a width.
22
+ @embed Storify.Template
23
+ maxheight : @queryParams.maxheight
24
+ url : url
@@ -0,0 +1,14 @@
1
+ class Embeditor.Adapters.Twitter extends Embeditor.Adapters.StaticTemplate
2
+ className: "Twitter"
3
+
4
+ @Template = Embeditor.Template('twitter')
5
+
6
+ # Twitter doesn't give a damn about you or your dimensions.
7
+ @QueryDefaults = {}
8
+
9
+ # For twitter, we just use the full URL, so no matchers are needed.
10
+ @Matchers = []
11
+
12
+
13
+ swap: ->
14
+ @embed Twitter.Template(url : @href)
@@ -7,21 +7,26 @@ window.Embeditor = {
7
7
  # 'brightcove' : 'Embedly'
8
8
  'ustream' : 'Embedly'
9
9
  'vine' : 'Embedly'
10
- # 'googlemaps' : 'Embedly'
10
+ 'googlemaps' : 'Embedly'
11
11
  'scribd' : 'Embedly'
12
12
  # 'documentcloud' : 'DocumentCloud'
13
13
  'polldaddy' : 'Polldaddy'
14
- 'facebook' : 'Embedly'
15
- # 'storify' : 'Embedly'
14
+ 'facebook' : 'Facebook'
15
+ 'storify' : 'Storify'
16
16
  'coveritlive' : 'CoverItLive'
17
17
  # 'rebelmouse' : 'RebelMouse'
18
18
  'firetracker' : 'FireTracker'
19
- # 'twitter' : 'Embedly'
20
- 'instagram' : 'Embedly'
19
+ 'twitter' : 'Twitter'
20
+ 'instagram' : 'Instagram'
21
21
  'soundcloud' : 'Embedly'
22
22
  'spotify' : 'Embedly'
23
23
  'other' : 'Embedly'
24
24
 
25
+ TemplatePath : 'embeditor/templates/'
26
+
27
+ Template : (template) ->
28
+ JST[@TemplatePath + template]
29
+
25
30
  DefaultOptions :
26
31
  defaultAdapter : 'Embedly' # Adapter that gets used when the service isn't recognized
27
32
  defaultService : 'other' # Service that gets used when the `data-service` attribute is missing
@@ -0,0 +1,2 @@
1
+ <div id="fb-root"></div> <script>(function(d, s, id) { var js, fjs = d.getElementsByTagName(s)[0]; if (d.getElementById(id)) return; js = d.createElement(s); js.id = id; js.src = "//connect.facebook.net/en_US/all.js#xfbml=1"; fjs.parentNode.insertBefore(js, fjs); }(document, 'script', 'facebook-jssdk'));</script>
2
+ <div class="fb-post" data-href="<%=@url%>" data-width="<%=@maxwidth%>"></div>
@@ -0,0 +1 @@
1
+ <iframe src="//instagram.com/p/<%=@photo_id%>/embed/" width="<%=@maxwidth%>" height="<%=@maxheight%>" frameborder="0" scrolling="no" allowtransparency="true"></iframe>
@@ -0,0 +1,4 @@
1
+ <div class="pd-embed" data-settings="{&quot;type&quot;:&quot;iframe&quot;,&quot;auto&quot;:true,&quot;domain&quot;:&quot;<%=@domain%>\/s\/&quot;,&quot;id&quot;:&quot;<%=@poll_id%>&quot;}"></div>
2
+ <script type="text/javascript">
3
+ (function(d,c,j){if(!document.getElementById(j)){var pd=d.createElement(c),s;pd.id=j;pd.src=('https:'==document.location.protocol)?'https://polldaddy.com/survey.js':'http://i0.poll.fm/survey.js';s=document.getElementsByTagName(c)[0];s.parentNode.insertBefore(pd,s);}}(document,'script','pd-embed'));
4
+ </script>
@@ -0,0 +1 @@
1
+ <div class="storify"><iframe src="<%=@url%>/embed" width="100%" height=<%=@maxheight%>frameborder=no allowtransparency=true></iframe><script src="<%=@url%>.js"></script></div>
@@ -0,0 +1,2 @@
1
+ <blockquote class="twitter-tweet"><a href="<%=@url%>"></a></blockquote>
2
+ <script async src="//platform.twitter.com/widgets.js" charset="utf-8"></script>
@@ -0,0 +1,15 @@
1
+ class Embeditor.Utility
2
+ @stripProtocol: (str) ->
3
+ str.replace(/^https?:/, "")
4
+
5
+
6
+ @stripTrailingSlash: (str) ->
7
+ str.replace(/\/$/, "")
8
+
9
+
10
+ @convertProtocolToHttp: (str) ->
11
+ str.replace(/^https:/, 'http:')
12
+
13
+
14
+ @convertProtocolToHttps: (str) ->
15
+ str.replace(/^http:/, 'https:')
@@ -1,2 +1,5 @@
1
1
  //= require embeditor/embeditor
2
+ //= require embeditor/utility
2
3
  //= require embeditor/adapter
4
+ //= require embeditor/adapters/oembed
5
+ //= require embeditor/adapters/static_template
@@ -1,5 +1,5 @@
1
1
  module Embeditor
2
2
  module Rails
3
- VERSION = "0.0.1"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: embeditor-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-02 00:00:00.000000000 Z
12
+ date: 2013-10-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -72,14 +72,25 @@ files:
72
72
  - app/assets/javascripts/embeditor/adapters/cover_it_live.js.coffee
73
73
  - app/assets/javascripts/embeditor/adapters/document_cloud.js.coffee
74
74
  - app/assets/javascripts/embeditor/adapters/embedly.js.coffee
75
+ - app/assets/javascripts/embeditor/adapters/facebook.js.coffee
75
76
  - app/assets/javascripts/embeditor/adapters/fire_tracker.js.coffee
77
+ - app/assets/javascripts/embeditor/adapters/instagram.js.coffee
76
78
  - app/assets/javascripts/embeditor/adapters/oembed.js.coffee
77
79
  - app/assets/javascripts/embeditor/adapters/polldaddy.js.coffee
78
80
  - app/assets/javascripts/embeditor/adapters/rebel_mouse.js.coffee
81
+ - app/assets/javascripts/embeditor/adapters/static_template.js.coffee
82
+ - app/assets/javascripts/embeditor/adapters/storify.js.coffee
83
+ - app/assets/javascripts/embeditor/adapters/twitter.js.coffee
79
84
  - app/assets/javascripts/embeditor/adapters.js
80
85
  - app/assets/javascripts/embeditor/embeditor.js.coffee
81
86
  - app/assets/javascripts/embeditor/templates/cover_it_live.jst.eco
87
+ - app/assets/javascripts/embeditor/templates/facebook.jst.eco
88
+ - app/assets/javascripts/embeditor/templates/instagram.jst.eco
89
+ - app/assets/javascripts/embeditor/templates/polldaddy.jst.eco
90
+ - app/assets/javascripts/embeditor/templates/storify.jst.eco
91
+ - app/assets/javascripts/embeditor/templates/twitter.jst.eco
82
92
  - app/assets/javascripts/embeditor/templates.js
93
+ - app/assets/javascripts/embeditor/utility.js.coffee
83
94
  - app/assets/javascripts/embeditor.js
84
95
  - lib/embeditor-rails/version.rb
85
96
  - lib/embeditor-rails.rb
@@ -87,7 +98,8 @@ files:
87
98
  - Rakefile
88
99
  - README.md
89
100
  homepage: https://github.com/SCPR/embeditor-rails
90
- licenses: []
101
+ licenses:
102
+ - MIT
91
103
  post_install_message:
92
104
  rdoc_options: []
93
105
  require_paths:
@@ -111,3 +123,4 @@ signing_key:
111
123
  specification_version: 3
112
124
  summary: Embeditor plugin for Rails.
113
125
  test_files: []
126
+ has_rdoc: