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 +4 -4
- data/README.md +68 -35
- data/lib/generators/markdown/install/templates/app/markdown/application_markdown.rb +6 -5
- data/lib/generators/markdown/install/templates/config/initializers/markdown.rb +3 -7
- data/lib/markdown/rails/renderers/rails.rb +1 -0
- data/lib/markdown/rails/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ff3573eb380c93787dd4df94e7244809402da5a8bd59482aa2b6606b6294f154
|
4
|
+
data.tar.gz: 7de29bab934217a0a8f38ff868d6fe7d0fa87d8c9a3b2de8c93a27d5f61496d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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
|
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
|
87
|
+
# Restart the server to see changes made to this file.
|
45
88
|
|
46
|
-
#
|
47
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
74
|
-
|
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
|
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
|
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
|
-
|
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
|
-
|
13
|
-
|
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
|