embeditor-rails 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
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: