markdown-rails 2.0.0.alpha1 → 2.0.0.alpha2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 332076319e0211f26f2f3fe8ddb43864df474a0f746baac13bd7ad157224ba98
4
- data.tar.gz: e331da478c55aeb4169457f3e79c13a396e2af439c079ebd36252653f9f413a4
3
+ metadata.gz: ff3573eb380c93787dd4df94e7244809402da5a8bd59482aa2b6606b6294f154
4
+ data.tar.gz: 7de29bab934217a0a8f38ff868d6fe7d0fa87d8c9a3b2de8c93a27d5f61496d8
5
5
  SHA512:
6
- metadata.gz: ba18f8f0ae1b4f7af5b113355aaa3f43a58f366e177118d4506ac6b16d317520044a86ce69a3436da6cb1b7f96e3ef225557996fbb309ac9fb7e16c7f8823734
7
- data.tar.gz: f7d859e209008e71bdc8c6c1ba5ae5f63b1f0f4b71ce43b36b8682af5b96761f49c842cc255fe9cef05d33d71d8820247461078698d62678a4aa8763523b26df
6
+ metadata.gz: b4f738f2f721f7d542f8986d0c63a7f1ac27f266d46091d938afa086b1c08ed967a8e77ebd9a4c8964787d3bddf396ba9eb86e9dd78bf511b937c182f9ce7127
7
+ data.tar.gz: 85496233bed31fabcc2585f9e9ef30f92a295b456058bce2d35228ac4e284bc276804570cedddbbfb399cac8f7594d3f69f40d0f1332e8c35d2afa1f39a67762
data/README.md CHANGED
@@ -1,8 +1,7 @@
1
1
  # markdown-rails
2
2
 
3
3
  > **Note**
4
- > **Everything below will be implemented in 2.0.0.alpha1, which is not yet released.** This was written to get feedback about the Dev UX of this gem as the proof-of-concept is brought over from https://github.com/bradgessler/view-playground.
5
- > You can start using this by adding to `gem "markdown-rails", github: "sitepress/markdown-rails"` to your Gemfile.
4
+ > **Everything below is implemented in 2.0.0.alpha1.** . You can start using this by adding to `gem "markdown-rails", version: "2.0.0.alpha"` to your Gemfile or by looking at it being used in the https://github.com/bradgessler/view-playground repo.
6
5
 
7
6
  This gem allows you to write static Rails views and partials using the [Markdown](http://daringfireball.net/projects/markdown/syntax) syntax. No more editing prose in HTML!
8
7
 
@@ -34,67 +33,106 @@ This adds a `config/initializers/markdown.rb` file where you can register templa
34
33
 
35
34
  Now add views or partials ending in `.md` in your `./app/views/**/**` directories and behold!
36
35
 
36
+ ### Upgrading from 1.x
37
+
38
+ Change your applications Gemfile to read:
39
+
40
+ ```ruby
41
+ gem "markdown-rails", "~> 2.0.0"
42
+ ```
43
+
44
+ Then from the root of your Rails project, run:
45
+
46
+ ```sh
47
+ $ bin/rails g markdown:install
48
+ ```
49
+
50
+ If you have an existing file in `config/initializers/markdown.rb` you'll need to move those settings over. Note that 1.x used `RDiscount` as the default renderer, which was replaced by `Redcarpet` in 2.x.
51
+
37
52
  ## Configuration
38
53
 
39
54
  Applications commonly need various markdown variants within one application. For example,
40
55
 
56
+ ```ruby
57
+ # ./config/initializers/markdown.rb
58
+ # Restart the server to see changes made to this file.
59
+
60
+ # Setup markdown stacks to work with different template handlers in Rails.
61
+ Markdown::Rails.handle :md do
62
+ ApplicationMarkdown.new
63
+ end
64
+
65
+ Markdown::Rails.handle :crazymd do
66
+ MyCrazyMarkdown.new
67
+ end
68
+ ```
69
+
70
+ ### Enable Erb in Markdown
71
+
72
+ Only enable Erb in Markdown if you trust the source of the file. Do not enable it for markdown provided by users or they will be able to execute arbitrary Ruby code.
73
+
74
+ To enable Erb, you can tell Rails to render all view files ending with `.markerb` using the `Markdown::Rails::Handlers::Erb` handler.
75
+
76
+ ```ruby
77
+ # ./config/initializers/markdown.rb
78
+ Markdown::Rails.handle :markerb, with: Markdown::Rails::Handlers::Erb do
79
+ ApplicationMarkdown.new
80
+ end
81
+ ```
82
+
83
+ You *could* change `:markerb` to `:md`, but I don't recommend it for all Markdown files or you'll run into problems if you have content like `<%= Time.current %>` inside of an `erb` codefence. You're better off having two configurations: one that handles Erb and another that doesn't, like this:
41
84
 
42
85
  ```ruby
43
86
  # ./config/initializers/markdown.rb
44
- # Restart your server after making changes to these files.
87
+ # Restart the server to see changes made to this file.
45
88
 
46
- # Renders markdown without Erb, which is safe for user inputs
47
- # unless you have some crazy unsafe blocks in the `ApplicationMarkdown` stack.
48
- MarkdownRails::Handler.register :md do
89
+ # Setup markdown stacks to work with different template handlers in Rails.
90
+ Markdown::Rails.handle :md do
49
91
  ApplicationMarkdown.new
50
92
  end
51
93
 
52
- # Use Erb in markdown templates, which is NOT safe for untrusted inputs
53
- # like blog post from a user. You should only use this for content that
54
- # you trust won't execute arbitrary Ruby code like views and templates in
55
- # your repo.
56
- MarkdownRails::ErbHandler.register :markerb do
94
+ Markdown::Rails.handle :markerb, with: Markdown::Rails::Handlers::Erb do
57
95
  ApplicationMarkdown.new
58
96
  end
59
97
  ```
60
98
 
61
- You might want to customize your Markdown handlers to do things like syntax code highlighting, etc. Here's what that looks like:
99
+ ## Customizing renderers
100
+
101
+ You might want to customize your Markdown handlers to do things like syntax code highlighting, etc.
62
102
 
63
103
  ```ruby
64
104
  # ./app/markdown/application_markdown.rb
105
+ require "rouge"
106
+
65
107
  class ApplicationMarkdown < RailsMarkdown
66
108
  include Redcarpet::Render::SmartyPants
67
109
 
110
+ FORMATTER = Rouge::Formatters::HTMLInline.new("monokai.sublime")
111
+
68
112
  def enable
69
113
  [:fenced_code_blocks]
70
114
  end
71
115
 
72
116
  def block_code(code, language)
73
- render Views::CodeBlock.new(code, syntax: language)
74
- end
75
-
76
- def image(link, title, alt)
77
- url = URI(link)
78
- case url.host
79
- when "www.youtube.com"
80
- render Views::YoutubeEmbed.new(url)
81
- else
82
- super
117
+ lexer = Rouge::Lexer.find(language)
118
+ content_tag :pre, class: language do
119
+ raw FORMATTER.format(lexer.lex(code))
83
120
  end
84
121
  end
85
-
86
- private
87
- def render(component)
88
- component.call
89
- end
90
122
  end
91
123
  ```
92
124
 
125
+ Consider using a componet farmework, like [phlex](https://www.phlex.fun) to generate tags outside of the Rails view context.
126
+
93
127
  ## Examples
94
128
 
129
+ There's a lot of ways to use Markdown in your Rails app.
130
+
131
+ ### The easy way
132
+
95
133
  Your best bet is to use this with a content management site like https://sitepress.cc/ if you're going to be dealing with a lot of markdown content on your website.
96
134
 
97
- ### Static View
135
+ ### Static view
98
136
 
99
137
  In `app/views/home/about.html.md`:
100
138
 
@@ -106,7 +144,7 @@ In `app/views/home/about.html.md`:
106
144
 
107
145
  Keep in mind that unlike static files dropped in `public`, you still need a matching route, such as `get ':action', :controller => :home`, to route `/about` to `home#about`. You could also [use Sitepress](https://sitepress.cc) to automatically manage these routes for you if you're dealing with a lot of pages.
108
146
 
109
- ### Static Partial
147
+ ### Static partial
110
148
 
111
149
  In `app/views/posts/edit.html.erb`:
112
150
 
@@ -125,12 +163,7 @@ In `app/views/posts/_edit_help.html.md`:
125
163
  This text is written in **Markdown**. :-)
126
164
  ```
127
165
 
128
- Note: If you are including Markdown partials from a Haml view, `<pre>` blocks
129
- inside your Markdown may be indented when Haml is not in ["ugly" (production)
130
- mode](http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#ugly-option),
131
- causing leading white-space to appear in development mode. To fix this, set
132
- `Haml::Template.options[:ugly] = true`.
133
-
166
+ Note: If you are including Markdown partials from a Haml view, `<pre>` blocks inside your Markdown may be indented when Haml is not in ["ugly" (production) mode](http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#ugly-option), causing leading white-space to appear in development mode. To fix this, set `Haml::Template.options[:ugly] = true`.
134
167
 
135
168
  ## Security
136
169
 
@@ -40,7 +40,7 @@ class ApplicationMarkdown < Markdown::Rails::Renderers::Rails
40
40
  url = URI(link)
41
41
  case url.host
42
42
  when "www.youtube.com"
43
- youtube_tag url
43
+ youtube_tag url, alt
44
44
  else
45
45
  super
46
46
  end
@@ -48,13 +48,14 @@ class ApplicationMarkdown < Markdown::Rails::Renderers::Rails
48
48
 
49
49
  private
50
50
  # This is provided as an example; there's many more YouTube URLs that this wouldn't catch.
51
- def youtube_tag(url)
51
+ def youtube_tag(url, alt)
52
52
  embed_url = "https://www.youtube-nocookie.com/embed/#{CGI.parse(url.query).fetch("v").first}"
53
- tag :iframe,
53
+ content_tag :iframe,
54
+ src: embed_url,
54
55
  width: 560,
55
56
  height: 325,
56
- src: embed_url,
57
57
  allow: "encrypted-media; picture-in-picture",
58
- allowfullscreen: true
58
+ allowfullscreen: true \
59
+ do alt end
59
60
  end
60
61
  end
@@ -8,10 +8,6 @@ end
8
8
  # Don't use Erb for untrusted markdown content created by users; otherwise they
9
9
  # can execute arbitrary code on your server. This should only be used for input you
10
10
  # trust, like content files from your code repo.
11
- #
12
- # Make sure you know what you're doing before you uncomment the block below to get
13
- # Erb working with Markdown.
14
-
15
- # Markdown::Rails.handle :markerb, with: Markdown::Rails::Handlers::Erb do
16
- # ApplicationMarkdown.new
17
- # end
11
+ Markdown::Rails.handle :markerb, with: Markdown::Rails::Handlers::Erb do
12
+ ApplicationMarkdown.new
13
+ end
@@ -25,6 +25,7 @@ module Markdown
25
25
  :request,
26
26
  :turbo_frame_tag,
27
27
  :controller,
28
+ :raw,
28
29
  to: :helpers
29
30
 
30
31
  def image(link, title, alt)
@@ -1,5 +1,5 @@
1
1
  module Markdown
2
2
  module Rails
3
- VERSION = "2.0.0.alpha1"
3
+ VERSION = "2.0.0.alpha2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: markdown-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0.alpha1
4
+ version: 2.0.0.alpha2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Brad Gessler