embeditor-rails 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -15,8 +15,11 @@ gem 'embeditor'
15
15
 
16
16
  ## Dependencies
17
17
 
18
- Currently, [`underscore.js`](http://underscorejs.org/) is a required dependency.
19
- I hope to remove this dependency eventually.
18
+ The following dependencies must be included manually. I hope to remove these
19
+ eventually.
20
+
21
+ * [jQuery](http://jquery.com/)
22
+ * [underscore.js](http://underscorejs.org/)
20
23
 
21
24
 
22
25
  ## Usage
@@ -134,7 +137,12 @@ endpoint:
134
137
  When initializing the global `Embeditor.Base` object, you may specify
135
138
  configuration for individual adapters.
136
139
 
137
- The `plugin` object is for configuring the adapter.
140
+ The `plugin` object is for configuring the adapter. The properties depends on
141
+ the adapter.
142
+
143
+ The `display` object is for configuring display options. Properties:
144
+ * `placement` - the method to use for placing the embed, such as
145
+ `before`, `after`, or `replace`. Default is `after`.
138
146
 
139
147
  The `query` object is for configuring the query parameters, or in the case of
140
148
  an adapter which doesn't use a query, it's for configuring the embed properties.
@@ -154,6 +162,9 @@ new Embeditor.Base({
154
162
  FireTracker: {
155
163
  query: {
156
164
  maxheight: 350
165
+ },
166
+ display: {
167
+ placement: 'replaceWith'
157
168
  }
158
169
  },
159
170
  CoverItLive: {
@@ -187,6 +198,9 @@ class Embeditor.Adapters.Twitter extends Embeditor.Adapter
187
198
  @QueryDefaults =
188
199
  maxheight: 500
189
200
 
201
+ @DisplayDefaults =
202
+ placement: 'before'
203
+
190
204
  # ...
191
205
  ```
192
206
 
@@ -222,6 +236,11 @@ This eliminates any oEmbed headaches (Access-Control-Allowed-Origin, for
222
236
  example), and also reduces the time it takes for an embed to load.
223
237
 
224
238
 
239
+ ## CKEditor plugin
240
+
241
+ An unofficial CKEditor plugin can be found [HERE](https://github.com/SCPR/SCPRv4/blob/master/vendor/assets/javascripts/ckeditor/plugins/embed-placeholder/plugin.js).
242
+ Copy and paste it into your own repository.
243
+
225
244
 
226
245
  ## Extending
227
246
 
@@ -236,6 +255,8 @@ You can extend your adapter from:
236
255
  * `Embeditor.Adapters.StaticTemplate`, for embeds where the embed code is
237
256
  stored in the `/templates` directory and rendered with JST.
238
257
 
258
+ **NOTE** Any function beginning with an underscore, like `_extractData()`,
259
+ should be considered a private function.
239
260
 
240
261
  ## Known Issues
241
262
 
@@ -6,33 +6,51 @@ class Embeditor.Adapter
6
6
 
7
7
  @QueryDefaults = {}
8
8
 
9
+ @DisplayDefaults =
10
+ placement : 'after'
11
+
12
+
9
13
  constructor: (@element, @options={}) ->
10
- @adapter = Embeditor.Adapters[@className]
11
- @href = @element.attr('href')
12
- @dataOptions = @_extractData()
13
- @queryParams = @_buildParams(@dataOptions, options)
14
+ @adapter = Embeditor.Adapters[@className]
15
+ @href = @element.attr('href')
16
+ @wrapper = $("<div />", class: @options.wrapperClass)
17
+
18
+ displayData = @_extractData('DisplayDefaults')
19
+ @display = @_buildDisplayOptions(displayData)
14
20
 
15
- @wrapper = $("<div />", class: @options.wrapperClass)
21
+ queryData = @_extractData('QueryDefaults')
22
+ @dataOptions = queryData # Deprecated
23
+ @queryParams = @_buildQueryParams(queryData)
16
24
 
17
25
 
26
+ # @Override
18
27
  swap: ->
19
28
  return
20
29
 
21
30
 
22
31
  embed: (html) ->
23
32
  @wrapper.html(html)
24
- @element.after @wrapper
33
+ @element[Embeditor.PlacementFunctions[@display.placement]](@wrapper)
25
34
 
26
35
 
27
- _extractData: ->
28
- dataOptions = {}
36
+
37
+ _extractData: (defaults) ->
38
+ data = {}
29
39
 
30
40
  for key,val of @element.data()
31
41
  # Make sure we care about this attribute
32
- if @adapter.QueryDefaults?[key]
33
- dataOptions[key] = val
42
+ if @adapter[defaults]?[key]
43
+ data[key] = val
44
+
45
+ data
34
46
 
35
- dataOptions
47
+
48
+ _buildDisplayOptions: (data) ->
49
+ @_defaultsWithoutEmptyStrings(data, # What the user wants
50
+ @options[@adapter]?['display'], # What the developer wants
51
+ @options['display'], # What the developer wants globally
52
+ @adapter.DisplayDefaults # What Embeditor wants
53
+ )
36
54
 
37
55
 
38
56
  # We're combining a few things (in order of precedence):
@@ -41,9 +59,23 @@ class Embeditor.Adapter
41
59
  # initialization,
42
60
  # 3. The global options specified at Embeditor initialization,
43
61
  # 4. This adapter's default options (fallback options).
44
- _buildParams: (dataOptions, options) ->
45
- _.defaults(dataOptions,
46
- @adapter.query,
47
- options['query'],
62
+ _buildQueryParams: (data) ->
63
+ @_defaultsWithoutEmptyStrings(data,
64
+ @options[@adapter]?['query'],
65
+ @options['query'],
48
66
  @adapter.QueryDefaults
49
67
  )
68
+
69
+ # Like Underscore.defaults, but it will also fill in empty strings.
70
+ # This should be used when merging objects that including any user
71
+ # input.
72
+ _defaultsWithoutEmptyStrings: (obj) ->
73
+ args = Array.prototype.slice.call(arguments, 1)
74
+
75
+ for source in args
76
+ continue if !source
77
+
78
+ for prop,value of source
79
+ obj[prop] = source[prop] if !obj[prop]
80
+
81
+ obj
@@ -3,6 +3,12 @@
3
3
  class Embeditor.Adapters.Embedly extends Embeditor.Adapter
4
4
  className: "Embedly"
5
5
 
6
+ # Map `data-placement` to Embedly `method` parameter options.
7
+ @MethodMap =
8
+ replace : 'replace'
9
+ before : 'before'
10
+ after : 'after'
11
+
6
12
  # This object should hold any keys that we want to
7
13
  # send to the API. Any key not in this object will
8
14
  # be ignored as a data attribute.
@@ -10,14 +16,14 @@ class Embeditor.Adapters.Embedly extends Embeditor.Adapter
10
16
  maxheight : 450
11
17
 
12
18
  @PluginDefaults =
13
- method : "after"
19
+ method : 'after'
14
20
  className : Embeditor.DefaultOptions.wrapperClass
15
21
  endpoint : 'oembed'
16
22
  # Key must be specified
17
23
 
18
24
 
19
25
  constructor: (@element, @options={}) ->
20
- pluginOpts = options['Embedly']?['plugin'] or {}
26
+ pluginOpts = @options['Embedly']?['plugin']
21
27
  @pluginOptions = _.defaults(pluginOpts, Embedly.PluginDefaults)
22
28
 
23
29
  super
@@ -25,6 +31,7 @@ class Embeditor.Adapters.Embedly extends Embeditor.Adapter
25
31
 
26
32
  swap: ->
27
33
  params = @_buildEmbedlyParams()
34
+ console.log params
28
35
  @element.embedly(params)
29
36
 
30
37
 
@@ -32,6 +39,9 @@ class Embeditor.Adapters.Embedly extends Embeditor.Adapter
32
39
  if @embedlyParams
33
40
  return @embedlyParams
34
41
 
42
+ # Use `data-placement` as the embedly method parameter
35
43
  @embedlyParams = _.extend(
36
- @pluginOptions,
44
+ _.defaults({
45
+ method : Embedly.MethodMap[@display.placement]
46
+ }, @pluginOptions),
37
47
  query : @queryParams)
@@ -0,0 +1,16 @@
1
+ class Embeditor.Adapters.GoogleFusion extends Embeditor.Adapters.StaticTemplate
2
+ className: "GoogleFusion"
3
+
4
+ @Template = Embeditor.Template('google_fusion')
5
+
6
+ @QueryDefaults =
7
+ maxwidth : 620
8
+ maxheight : 550
9
+
10
+ @Matchers = []
11
+
12
+ swap: ->
13
+ @embed GoogleFusion.Template
14
+ maxheight : @queryParams.maxheight
15
+ maxwidth : @queryParams.maxwidth
16
+ url : @href
@@ -9,6 +9,7 @@ window.Embeditor = {
9
9
  'livestream' : 'Embedly'
10
10
  'vine' : 'Embedly'
11
11
  'googlemaps' : 'Embedly'
12
+ 'googlefusion' : 'GoogleFusion'
12
13
  'scribd' : 'Embedly'
13
14
  # 'documentcloud' : 'DocumentCloud'
14
15
  'polldaddy' : 'Polldaddy'
@@ -29,10 +30,19 @@ window.Embeditor = {
29
30
  JST[@TemplatePath + template]
30
31
 
31
32
  DefaultOptions :
32
- defaultAdapter : 'Embedly' # Adapter that gets used when the service isn't recognized
33
- defaultService : 'other' # Service that gets used when the `data-service` attribute is missing
34
- placeholderClass : "embed-placeholder" # The class that the embed placeholders have
35
- wrapperClass : "embed-wrapper" # The class the embed's wrapper should be given
33
+ # Adapter that gets used when the service isn't recognized
34
+ defaultAdapter : 'Embedly'
35
+ # Service that gets used when the `data-service` attribute is missing
36
+ defaultService : 'other'
37
+ # The class that the embed placeholders have
38
+ placeholderClass : "embed-placeholder"
39
+ # The class the embed's wrapper should be given
40
+ wrapperClass : "embed-wrapper"
41
+
42
+ PlacementFunctions :
43
+ before : 'before'
44
+ after : 'after'
45
+ replace : 'replaceWith'
36
46
  }
37
47
 
38
48
 
@@ -0,0 +1 @@
1
+ <iframe width="<%=@maxwidth%>" height="<%=@maxheight%>" scrolling="no" frameborder="no" src="<%=@url%>"></iframe>
@@ -1,5 +1,5 @@
1
1
  module Embeditor
2
2
  module Rails
3
- VERSION = "1.0.1"
3
+ VERSION = "1.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: 1.0.1
4
+ version: 1.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,10 +9,26 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-10-10 00:00:00.000000000 Z
12
+ date: 2013-10-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
- name: rails
15
+ name: actionpack
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 3.2.0
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 3.2.0
30
+ - !ruby/object:Gem::Dependency
31
+ name: coffee-rails
16
32
  requirement: !ruby/object:Gem::Requirement
17
33
  none: false
18
34
  requirements:
@@ -74,6 +90,7 @@ files:
74
90
  - app/assets/javascripts/embeditor/adapters/document_cloud.js.coffee
75
91
  - app/assets/javascripts/embeditor/adapters/embedly.js.coffee
76
92
  - app/assets/javascripts/embeditor/adapters/fire_tracker.js.coffee
93
+ - app/assets/javascripts/embeditor/adapters/google_fusion.js.coffee
77
94
  - app/assets/javascripts/embeditor/adapters/instagram.js.coffee
78
95
  - app/assets/javascripts/embeditor/adapters/oembed.js.coffee
79
96
  - app/assets/javascripts/embeditor/adapters/polldaddy.js.coffee
@@ -85,6 +102,7 @@ files:
85
102
  - app/assets/javascripts/embeditor/embeditor.js.coffee
86
103
  - app/assets/javascripts/embeditor/templates/brightcove.jst.eco
87
104
  - app/assets/javascripts/embeditor/templates/cover_it_live.jst.eco
105
+ - app/assets/javascripts/embeditor/templates/google_fusion.jst.eco
88
106
  - app/assets/javascripts/embeditor/templates/instagram.jst.eco
89
107
  - app/assets/javascripts/embeditor/templates/polldaddy_poll.jst.eco
90
108
  - app/assets/javascripts/embeditor/templates/polldaddy_survey.jst.eco