sir-trevor-rails 0.3.0 → 0.4.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 (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +58 -62
  3. data/README.md +12 -73
  4. data/app/views/sir-trevor/blocks/_list_block.html.erb +3 -0
  5. data/app/views/sir-trevor/blocks/_quote_block.html.erb +3 -3
  6. data/app/views/sir-trevor/blocks/_text_block.html.erb +2 -2
  7. data/app/views/sir-trevor/blocks/_tweet_block.html.erb +4 -4
  8. data/app/views/sir-trevor/blocks/_video_block.html.erb +5 -5
  9. data/config/initializers/validators.rb +4 -2
  10. data/lib/generators/sir_trevor/block/templates/_block.html.erb +2 -2
  11. data/lib/sir-trevor-rails.rb +7 -3
  12. data/lib/sir-trevor/helpers/form_builder.rb +2 -2
  13. data/lib/sir-trevor/helpers/form_helper.rb +12 -6
  14. data/lib/sir-trevor/helpers/view_helper.rb +41 -40
  15. data/lib/sir-trevor/version.rb +1 -1
  16. data/sir-trevor-rails.gemspec +6 -2
  17. metadata +35 -34
  18. data/Rakefile +0 -10
  19. data/app/assets/images/sir-trevor/icons/block_editor_blockquote.png +0 -0
  20. data/app/assets/images/sir-trevor/icons/block_editor_embed.png +0 -0
  21. data/app/assets/images/sir-trevor/icons/block_editor_image.png +0 -0
  22. data/app/assets/images/sir-trevor/icons/block_editor_list.png +0 -0
  23. data/app/assets/images/sir-trevor/icons/block_editor_text.png +0 -0
  24. data/app/assets/images/sir-trevor/icons/block_editor_tweet.png +0 -0
  25. data/app/assets/images/sir-trevor/icons/block_editor_video.png +0 -0
  26. data/app/assets/images/sir-trevor/icons/close.gif +0 -0
  27. data/app/assets/images/sir-trevor/icons/handle.gif +0 -0
  28. data/app/assets/images/sir-trevor/icons/new_image.png +0 -0
  29. data/app/assets/images/sir-trevor/icons/new_tweet.png +0 -0
  30. data/app/assets/images/sir-trevor/icons/new_video.png +0 -0
  31. data/app/assets/images/sir-trevor/icons/quote.png +0 -0
  32. data/app/assets/images/sir-trevor/placeholders/placeholder.jpg +0 -0
  33. data/app/assets/images/sir-trevor/placeholders/post_placeholder.jpg +0 -0
  34. data/app/assets/images/sir-trevor/placeholders/thumbnail_placeholder.jpg +0 -0
  35. data/app/assets/javascript/sir-trevor.js +0 -2
  36. data/app/assets/javascript/sir-trevor/libs/underscore.js +0 -32
  37. data/app/assets/javascript/sir-trevor/sir-trevor.js +0 -2349
  38. data/app/assets/stylesheets/sir-trevor.css +0 -4
  39. data/app/assets/stylesheets/sir-trevor/icons.css.erb +0 -47
  40. data/app/assets/stylesheets/sir-trevor/sir-trevor.css +0 -439
  41. data/app/views/sir-trevor/blocks/_gallery_block.html.erb +0 -6
  42. data/app/views/sir-trevor/blocks/_ul_block.html.erb +0 -3
  43. data/lib/generators/sir_trevor/block/block_generator.rb +0 -37
  44. data/lib/generators/sir_trevor/block/templates/_block.css.erb +0 -7
  45. data/lib/generators/sir_trevor/block/templates/_block.js +0 -122
  46. data/lib/generators/sir_trevor/block/templates/_block.png +0 -0
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: b058dcb42f6b583ce26ba45ca37c3ff7b2ae2761
4
- data.tar.gz: a8240fe8db02aa3c1eff15f78cd5fdc868b3848b
3
+ metadata.gz: 3d0668026fc08c29b2dcd100108e308f951d3cf2
4
+ data.tar.gz: fd580f1cb8dd62d6b2c5e51892ec2e7a22c51713
5
5
  SHA512:
6
- metadata.gz: 9b8ce310cdd90b0e28e4570484636a786f8a8c6f6314127d77d67d3e200dc21fadb1ae163364f89b9ab64dc3fce84d6c45880ddb080ef30d74d4454e96ab38c6
7
- data.tar.gz: 7aa991e742093fbad9db304acacbf3894cb3380a422664efa150ceb759bc17225cced8a104d721e529c9ede8c40df5817c975e7e79e474cc7a986b9607d6dc23
6
+ metadata.gz: fc6c224901a0f95b6cd9aa56fd5cc401f8b88c4d3ae4237f7aba6faed8efbde517c125b0be48bfd1cc1bf82d8710da03b82eaa6dfc4857a11bbc8cd6b337fde5
7
+ data.tar.gz: 01081da708b0e90c55b29bffd08715fb07af2e4cf9652117e3c26287fe22b7057f188a45be7ab81bc208b347646d2ca44469425d622220806274d0bc90119556
@@ -1,9 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sir-trevor-rails (0.2.2)
4
+ sir-trevor-rails (0.4.0)
5
+ activemodel
5
6
  activesupport (>= 3.0.7)
6
7
  jquery-rails
8
+ multi_json
7
9
  rails (>= 3.0.7)
8
10
  redcarpet (~> 2.0.1)
9
11
  twitter-text (~> 1.4)
@@ -11,84 +13,78 @@ PATH
11
13
  GEM
12
14
  remote: http://rubygems.org/
13
15
  specs:
14
- actionmailer (3.2.13)
15
- actionpack (= 3.2.13)
16
+ actionmailer (4.0.0)
17
+ actionpack (= 4.0.0)
16
18
  mail (~> 2.5.3)
17
- actionpack (3.2.13)
18
- activemodel (= 3.2.13)
19
- activesupport (= 3.2.13)
20
- builder (~> 3.0.0)
19
+ actionpack (4.0.0)
20
+ activesupport (= 4.0.0)
21
+ builder (~> 3.1.0)
21
22
  erubis (~> 2.7.0)
22
- journey (~> 1.0.4)
23
- rack (~> 1.4.5)
24
- rack-cache (~> 1.2)
25
- rack-test (~> 0.6.1)
26
- sprockets (~> 2.2.1)
27
- activemodel (3.2.13)
28
- activesupport (= 3.2.13)
29
- builder (~> 3.0.0)
30
- activerecord (3.2.13)
31
- activemodel (= 3.2.13)
32
- activesupport (= 3.2.13)
33
- arel (~> 3.0.2)
34
- tzinfo (~> 0.3.29)
35
- activeresource (3.2.13)
36
- activemodel (= 3.2.13)
37
- activesupport (= 3.2.13)
38
- activesupport (3.2.13)
39
- i18n (= 0.6.1)
40
- multi_json (~> 1.0)
41
- arel (3.0.2)
42
- builder (3.0.4)
23
+ rack (~> 1.5.2)
24
+ rack-test (~> 0.6.2)
25
+ activemodel (4.0.0)
26
+ activesupport (= 4.0.0)
27
+ builder (~> 3.1.0)
28
+ activerecord (4.0.0)
29
+ activemodel (= 4.0.0)
30
+ activerecord-deprecated_finders (~> 1.0.2)
31
+ activesupport (= 4.0.0)
32
+ arel (~> 4.0.0)
33
+ activerecord-deprecated_finders (1.0.3)
34
+ activesupport (4.0.0)
35
+ i18n (~> 0.6, >= 0.6.4)
36
+ minitest (~> 4.2)
37
+ multi_json (~> 1.3)
38
+ thread_safe (~> 0.1)
39
+ tzinfo (~> 0.3.37)
40
+ arel (4.0.0)
41
+ atomic (1.1.13)
42
+ builder (3.1.4)
43
43
  erubis (2.7.0)
44
- hike (1.2.2)
45
- i18n (0.6.1)
46
- journey (1.0.4)
47
- jquery-rails (2.2.1)
44
+ hike (1.2.3)
45
+ i18n (0.6.5)
46
+ jquery-rails (3.0.4)
48
47
  railties (>= 3.0, < 5.0)
49
48
  thor (>= 0.14, < 2.0)
50
- json (1.7.7)
51
- mail (2.5.3)
52
- i18n (>= 0.4.0)
49
+ mail (2.5.4)
53
50
  mime-types (~> 1.16)
54
51
  treetop (~> 1.4.8)
55
- mime-types (1.23)
56
- multi_json (1.7.2)
52
+ mime-types (1.25)
53
+ minitest (4.7.5)
54
+ multi_json (1.7.9)
57
55
  polyglot (0.3.3)
58
- rack (1.4.5)
59
- rack-cache (1.2)
60
- rack (>= 0.4)
61
- rack-ssl (1.3.3)
62
- rack
56
+ rack (1.5.2)
63
57
  rack-test (0.6.2)
64
58
  rack (>= 1.0)
65
- rails (3.2.13)
66
- actionmailer (= 3.2.13)
67
- actionpack (= 3.2.13)
68
- activerecord (= 3.2.13)
69
- activeresource (= 3.2.13)
70
- activesupport (= 3.2.13)
71
- bundler (~> 1.0)
72
- railties (= 3.2.13)
73
- railties (3.2.13)
74
- actionpack (= 3.2.13)
75
- activesupport (= 3.2.13)
76
- rack-ssl (~> 1.3.2)
59
+ rails (4.0.0)
60
+ actionmailer (= 4.0.0)
61
+ actionpack (= 4.0.0)
62
+ activerecord (= 4.0.0)
63
+ activesupport (= 4.0.0)
64
+ bundler (>= 1.3.0, < 2.0)
65
+ railties (= 4.0.0)
66
+ sprockets-rails (~> 2.0.0)
67
+ railties (4.0.0)
68
+ actionpack (= 4.0.0)
69
+ activesupport (= 4.0.0)
77
70
  rake (>= 0.8.7)
78
- rdoc (~> 3.4)
79
- thor (>= 0.14.6, < 2.0)
80
- rake (10.0.4)
81
- rdoc (3.12.2)
82
- json (~> 1.4)
71
+ thor (>= 0.18.1, < 2.0)
72
+ rake (10.1.0)
83
73
  redcarpet (2.0.1)
84
- sprockets (2.2.2)
74
+ sprockets (2.10.0)
85
75
  hike (~> 1.2)
86
76
  multi_json (~> 1.0)
87
77
  rack (~> 1.0)
88
78
  tilt (~> 1.1, != 1.3.0)
79
+ sprockets-rails (2.0.0)
80
+ actionpack (>= 3.0)
81
+ activesupport (>= 3.0)
82
+ sprockets (~> 2.8)
89
83
  thor (0.18.1)
90
- tilt (1.3.7)
91
- treetop (1.4.12)
84
+ thread_safe (0.1.2)
85
+ atomic
86
+ tilt (1.4.1)
87
+ treetop (1.4.15)
92
88
  polyglot
93
89
  polyglot (>= 0.3.1)
94
90
  twitter-text (1.6.1)
data/README.md CHANGED
@@ -1,73 +1,18 @@
1
1
  # Sir Trevor Rails
2
2
 
3
- A Rails gem for integrating the Sir Trevor JS into your Rails 3.x application.
3
+ A set of Rails Helpers for Sir Trevor JS.
4
4
 
5
5
  # Usage
6
6
 
7
- Add Sir Trevor to your Gemfile
7
+ REWRITE REQUIRED.
8
8
 
9
- ```ruby
10
- gem 'sir-trevor-rails'
11
- ```
12
-
13
- ```bash
14
- bundle install
15
- ```
16
-
17
- Require SirTrevor in your `application_controller.rb`
18
-
19
- ```ruby
20
- require 'sir-trevor-rails'
21
- ```
22
-
23
- Include Sir Trevor in your `application.css` file
24
-
25
- ```css
26
- *= require sir-trevor
27
- ```
28
-
29
- Include Sir Trevor in your `application.js` file
30
-
31
- ```js
32
- //= require sir-trevor
33
- ```
34
-
35
- In your view file for your editable content (must be a 'text' field as we store the JSON here) here we have a field called 'content'
36
-
37
- ```ruby
38
- f.sir_trevor_text_area :content
39
- ```
40
-
41
- And instantiate a new `SirTrevor.Editor` instance in your Javascript.
42
-
43
- ```javascript
44
- $(function(){
45
- var editor = new SirTrevor.Editor({ el: $('.sir-trevor-area') });
46
- });
47
- ```
48
-
49
- Or for multiple instances:
50
-
51
- ```javascript
52
- $(function(){
53
- var instances = $('.sir-trevor-area'),
54
- l = instances.length, instance;
55
-
56
- while (l--) {
57
- instance = $(instances[l]);
58
- new SirTrevor.Editor({ el: instance });
59
- }
60
-
61
- });
62
- ```
63
-
64
- To render your content (in your view file)
65
-
66
- ```ruby
67
- <%= render_sir_trevor(post.content) %>
68
- ```
9
+ # Requirements
69
10
 
70
- There's an example Rails 3.2.7 project with all of this already done in the [Sir Trevor JS repository](https://github.com/madebymany/sir-trevor-js/tree/master/examples/rails/sir-trevor-example).
11
+ - Rails 3.x
12
+ - jQuery
13
+ - (Eventable)[https://github.com/madebymany/eventable]
14
+ - (Underscore)[https://github.com/jashkenas/underscore]
15
+ - (Sir Trevor JS)[https://github.com/madebymany/sir-trevor-js]
71
16
 
72
17
  # Generators
73
18
 
@@ -83,13 +28,13 @@ This will copy all of the SirTrevor block partials into `app/views/sir-trevor/bl
83
28
 
84
29
  # Handling image uploads
85
30
 
86
- We don't provide a default image uploader out of the box, because everyone will have different requirements. Until we provide a full example project, have a look at [this gist](https://gist.github.com/cjbell88/7091537) which allows uploads using CarrierWave and Fog (for S3).
31
+ We don't provide a default image uploader out of the box, because everyone will have different requirements. Until we provide a full example project, have a look at [this gist](https://gist.github.com/cjbell/7091537) which allows uploads using CarrierWave and Fog (for S3).
87
32
 
88
33
  # Helper methods
89
34
 
90
35
  **`render_sir_trevor`**
91
36
 
92
- Parses the blocks JSON content, loops through each piece of block content and render the appropriate partial for the block.
37
+ Parses the blocks JSON content, loops through each piece of block content and render the appropriate partial for the block.
93
38
 
94
39
  **`render_sir_trevor_image`**
95
40
 
@@ -99,19 +44,13 @@ Returns the first available SirTrevor image from the supplied JSON.
99
44
 
100
45
  Returns an image tag from a SirTrevor Image block
101
46
 
102
- **`pluck_sir_trevor_type` (Private)**
47
+ **`pluck_sir_trevor_type`**
103
48
 
104
49
  Get the first instance of a specified SirTrevor block type from the supplied JSON
105
50
 
106
- # Requirements
107
-
108
- - Rails 3.x
109
- - jQuery
110
- - Underscore.js (bundled)
111
-
112
51
  # To do
113
52
 
114
- - Add tests
53
+ - Add tests
115
54
 
116
55
  # Licence
117
56
 
@@ -0,0 +1,3 @@
1
+ <div class="content-block ul-block">
2
+ <%= sir_trevor_markdown block[:text] %>
3
+ </div>
@@ -1,4 +1,4 @@
1
1
  <div class="content-block quote-block">
2
- <%= sir_trevor_markdown block["text"] %>
3
- <%= "<cite class=\"quote\">&ndash; #{block["cite"]}</cite>".html_safe unless block["cite"].nil? %>
4
- </div>
2
+ <%= sir_trevor_markdown block[:text] %>
3
+ <%= content_tag(:cite, sanitize("&ndash; #{block[:cite]}", tags: %w{a}), class: "quote") unless block[:cite].nil? %>
4
+ </div>
@@ -1,3 +1,3 @@
1
1
  <div class="content-block text-block">
2
- <%= sir_trevor_markdown block["text"] %>
3
- </div>
2
+ <%= sir_trevor_markdown block[:text] %>
3
+ </div>
@@ -1,6 +1,6 @@
1
1
  <div class="content-block tweet-block">
2
- <%= link_to image_tag("//twitter.com/api/users/profile_image/#{ block['user']['screen_name'] }?size=bigger", :class => 'img'), "http://twitter.com/#{ block['user']['screen_name'] }" %>
3
- <p><%= auto_link(block['text']).html_safe %></p>
4
- <cite>From <%= link_to "@#{ block['user']['screen_name'] }", "http://twitter.com/#{ block['user']['screen_name'] }" %> on Twitter:</cite>
5
- <time datetime="<%= block['created_at'] %>">(<%= link_to Time.parse(block['created_at']), "http://twitter.com/#{block['user']['screen_name']}/status/#{block['id_str']}" %>)</time>
2
+ <%= link_to image_tag("//twitter.com/api/users/profile_image/#{ block[:user][:screen_name] }?size=bigger", :class => 'img'), "http://twitter.com/#{ block[:user][:screen_name] }" %>
3
+ <p><%= sanitize Twitter::Autolink.auto_link(block[:text], url_entities: (block[:entities].values_at(:urls, :media).flatten.compact.uniq rescue nil)), tags: %w{a}, attributes: %w{href rel target} %></p>
4
+ <cite>From <%= link_to "@#{ block[:user][:screen_name] }", "http://twitter.com/#{ block[:user][:screen_name] }" %> on Twitter:</cite>
5
+ <time datetime="<%= block[:created_at] %>">(<%= link_to Time.parse(block[:created_at]), "http://twitter.com/#{block[:user][:screen_name]}/status/#{block[:id_str]}" %>)</time>
6
6
  </div>
@@ -1,7 +1,7 @@
1
1
  <div class="content-block video-block">
2
- <% if block['source'] == 'vimeo' %>
3
- <iframe src="//player.vimeo.com/video/<%= block['remote_id'] %>?title=1&amp;byline=1&amp;portrait=1&amp;autoplay=0" width="600" height="400" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
4
- <% elsif block['source'] == 'youtube' %>
5
- <iframe width="600" height="400" src="//www.youtube.com/embed/<%= block['remote_id'] %>" frameborder="0" allowfullscreen></iframe>
6
- <% end %>
2
+ <% if block[:source] == 'vimeo' %>
3
+ <iframe src="//player.vimeo.com/video/<%= block[:remote_id] %>?title=1&amp;byline=1&amp;portrait=1&amp;autoplay=0" width="600" height="400" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>
4
+ <% elsif block[:source] == 'youtube' %>
5
+ <iframe width="600" height="400" src="//www.youtube.com/embed/<%= block[:remote_id] %>" frameborder="0" allowfullscreen></iframe>
6
+ <% end %>
7
7
  </div>
@@ -1,10 +1,12 @@
1
+ require 'active_model/validator'
2
+
1
3
  class IsJsonValidator < ActiveModel::EachValidator
2
4
  def validate_each(record, attribute, value)
3
- @json = JSON.parse(value)
5
+ @json = SirTrevor.parse_json(value)
4
6
  record.errors.add(attribute, "is empty") if @json.empty?
5
7
  rescue TypeError => e
6
8
  record.errors.add(attribute, "is not valid JSON: #{e.message}")
7
9
  rescue JSON::JSONError => e
8
10
  record.errors.add(attribute, "is not valid JSON: #{e.message}")
9
11
  end
10
- end
12
+ end
@@ -1,3 +1,3 @@
1
1
  <div class="content-block -block">
2
- <%= block.inspect %>
3
- </div>
2
+ <%= block.inspect %>
3
+ </div>
@@ -2,7 +2,7 @@ require "active_support/dependencies"
2
2
 
3
3
  module SirTrevor
4
4
 
5
- mattr_accessor :app_root
5
+ mattr_accessor :app_root
6
6
 
7
7
  module Helpers
8
8
  autoload :ViewHelper, 'sir-trevor/helpers/view_helper'
@@ -11,9 +11,13 @@ module SirTrevor
11
11
  end
12
12
 
13
13
  def self.setup
14
- yield self
14
+ yield self
15
+ end
16
+
17
+ def self.parse_json(json)
18
+ MultiJson.load(json, symbolize_keys: true)
15
19
  end
16
20
 
17
21
  end
18
22
 
19
- require "sir-trevor/engine"
23
+ require "sir-trevor/engine"
@@ -4,8 +4,8 @@ module SirTrevor
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def sir_trevor_text_area(method, options = {})
7
- @template.send("sir_trevor_text_area", @object_name, method, objectify_options(options))
7
+ @template.send(:sir_trevor_text_area, @object_name, method, objectify_options(options))
8
8
  end
9
9
  end
10
10
  end
11
- end
11
+ end
@@ -11,14 +11,20 @@ module SirTrevor
11
11
 
12
12
  options = { :language => I18n.locale.to_s }.merge(options)
13
13
  input_html = (options.delete(:input_html) || {})
14
- input_html['class'] = "sir-trevor-area visuallyhidden"
14
+ input_html[:class] = "sir-trevor-area visuallyhidden"
15
15
  hash = input_html.stringify_keys
16
16
 
17
- instance_tag = ActionView::Base::InstanceTag.new(object_name, method, self, options.delete(:object))
18
- instance_tag.send(:add_default_name_and_id, hash)
19
-
20
17
  output_buffer = ActiveSupport::SafeBuffer.new
21
- output_buffer << instance_tag.to_text_area_tag(input_html)
18
+ # support both Rails 3 & 4
19
+ if defined? ActionView::Base::InstanceTag
20
+ instance_tag = ActionView::Base::InstanceTag.new(object_name, method, self, options.delete(:object))
21
+ instance_tag.send(:add_default_name_and_id, hash)
22
+ output_buffer << instance_tag.to_text_area_tag(input_html)
23
+ else
24
+ instance_tag = ActionView::Helpers::Tags::TextArea.new(object_name, method, self, input_html)
25
+ instance_tag.send(:add_default_name_and_id, hash)
26
+ output_buffer << instance_tag.render
27
+ end
22
28
 
23
29
  output_buffer
24
30
 
@@ -26,4 +32,4 @@ module SirTrevor
26
32
 
27
33
  end
28
34
  end
29
- end
35
+ end
@@ -3,77 +3,78 @@ module SirTrevor
3
3
  module ViewHelper
4
4
 
5
5
  extend ActiveSupport::Concern
6
- include Twitter::Autolink
7
-
8
- def render_sir_trevor(json, image_type = 'large')
6
+
7
+ def render_sir_trevor(json, image_type = :large)
9
8
  if hash = parse_sir_trevor(json)
10
- hash.map { |object|
9
+ safe_join hash.map { |object|
11
10
  render_sir_trevor_block(object, image_type)
12
- }.compact.join.html_safe
11
+ }.compact
13
12
  else
14
13
  ''
15
14
  end
16
15
  end
17
16
 
18
- def render_sir_trevor_block(object, image_type = 'large')
19
- view_name = "sir-trevor/blocks/#{object['type'].to_s.downcase}_block"
17
+ def render_sir_trevor_block(object, image_type = :large)
18
+ view_name = "sir-trevor/blocks/#{object[:type].to_s.downcase}_block"
20
19
 
21
20
  render(view_name,
22
- :block => object['data'],
23
- :image_type => image_type) if object.has_key?("data")
21
+ :block => object[:data],
22
+ :image_type => image_type) if object.has_key?(:data)
24
23
  end
25
24
 
26
- def render_sir_trevor_image(json, image_type = "large")
27
- image = pluck_sir_trevor_type(json, "image")
28
-
29
- unless image.nil?
30
- render(:partial => "sir-trevor/blocks/image_block", :locals => {:block => image['data'], :image_type => image_type, :protocol => request.protocol}) if image.has_key?("data")
25
+ def render_sir_trevor_image(json, image_type = :large)
26
+ image = pluck_sir_trevor_type(json, :image)
27
+
28
+ unless image.nil?
29
+ render(:partial => "sir-trevor/blocks/image_block",
30
+ :locals => { :block => image[:data], :image_type => image_type,
31
+ :protocol => request.protocol }) if image.has_key?(:data)
31
32
  end
32
33
  end
33
-
34
- def sir_trevor_image_tag(block, image_type)
34
+
35
+ def sir_trevor_image_tag(block, image_type)
35
36
  # Does the image type exist on the block?
36
- if(block['file'].present? && block['file'][image_type].present?)
37
-
38
- image = block['file'][image_type]
39
-
40
- image_url = image['url']
41
- width = image['width'] if image['width'].present?
42
- height = image['height'] if image['height'].present?
43
-
37
+ if(block[:file].present? && block[:file][image_type].present?)
38
+
39
+ image = block[:file][image_type]
40
+
41
+ image_url = image[:url]
42
+ width = image[:width] if image[:width].present?
43
+ height = image[:height] if image[:height].present?
44
+
44
45
  options = {
45
46
  :class => "sir-trevor-image #{image_type}",
46
- :alt => block['description']
47
+ :alt => block[:description]
47
48
  }
48
-
49
+
49
50
  options.merge!({ :width => width }) unless width.nil?
50
51
  options.merge!({ :height => height }) unless height.nil?
51
-
52
+
52
53
  image_tag(image_url, options) unless image_url.nil?
53
54
  end
54
55
  end
55
56
 
56
57
  def sir_trevor_markdown(text)
57
- options = {:hard_wrap => true, :filter_html => true, :autolink => true, :no_intraemphasis => true, :fenced_code => true}
58
- renderer = Redcarpet::Render::HTML.new(options)
59
- markdown = Redcarpet::Markdown.new(CustomMarkdownFormatter)
58
+ renderer = CustomMarkdownFormatter.new(:hard_wrap => true, :filter_html => true,
59
+ :autolink => true, :no_intraemphasis => true,
60
+ :fenced_code => true)
61
+ markdown = Redcarpet::Markdown.new(renderer)
60
62
  markdown.render(text).html_safe
61
63
  end
62
64
 
63
65
  def parse_sir_trevor(json)
64
- hash = JSON.parse(json)
65
-
66
- return false unless hash.has_key?("data")
67
- hash["data"]
66
+ hash = (json.is_a?(String) ? SirTrevor.parse_json(json) : json)
67
+ return false unless hash.has_key?(:data)
68
+ hash[:data]
68
69
  end
69
70
 
70
71
  private
71
72
  # Get's the first instance of a type from the specified JSON
72
- def pluck_sir_trevor_type(json, type)
73
- hash = JSON.parse(json)
74
- if hash.has_key?("data")
75
- item = hash["data"].select { |item| item["type"] == type }
76
- item.first
73
+ def pluck_sir_trevor_type(json, type)
74
+ hash = SirTrevor.parse_json(json)
75
+ if hash.has_key?(:data)
76
+ item = hash[:data].select { |item| item[:type] == type }
77
+ item.first[:text] if item.any?
77
78
  end
78
79
  end
79
80
  end
@@ -84,7 +85,7 @@ class CustomMarkdownFormatter < Redcarpet::Render::HTML
84
85
  def block_code(code, language)
85
86
  "<p>" << code << "</p>"
86
87
  end
87
-
88
+
88
89
  def codespan(code)
89
90
  code
90
91
  end