marksmith 0.1.3 → 0.2.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 138a40e01855d847e9b295185fcf85edc6801e80c9bd94b1d8a55de7efb0b0f7
4
- data.tar.gz: d29d99ff35c10fbc9e7deaadc84d7b27fdadb494732364cfda3003c69d397b81
3
+ metadata.gz: bd1c156bdd01e593e1ed5a364b646b028e736a7e0d67763110cce1e08ccb4d08
4
+ data.tar.gz: 12cdfb76d754cd011892b76790784cc122f5500213ab5f18318e353fdd531013
5
5
  SHA512:
6
- metadata.gz: 5be1932c6cc7b5054cab6875a38c615977682b4e50f048c1f04ec29df9c46cec911c846e4eb7f2f9413702841b1a801145ea0a91431efd9c7b11c511725c4b09
7
- data.tar.gz: 1dd261670a842ca375bc584cf1028b078e4c93d147ee8f0893952704993a741efea93341ea89a6b6b1106e742b1724056684b45a0c0fdd4cf42a9b8ddd1b2eaf
6
+ metadata.gz: c5908c41dc5a0b241a3db237ad8c6bf08e8868cb57517ff621bafb47564fd328ab7cb24b225c638b252d24e0c44852ea285af5aa95709b0fc0ab9e12aaf4ffe1
7
+ data.tar.gz: 5437ee09dccfd514e25d2fcd4874acb7cf126fe5ae26d4839ae6061daedcbdeabdb259a6dba550fdfa87b9d44d3a3f769046d17a50539a2d545390ac958ce57b
data/README.md CHANGED
@@ -154,8 +154,8 @@ end
154
154
 
155
155
  ## Built-in preview renderer
156
156
 
157
- The renderer is powered by [`Redcarpet`](https://github.com/vmg/redcarpet).
158
- It supports basic styles for headings, `strong`, `italic` and others.
157
+ The renderer is powered by [`Commonmarker`](https://github.com/gjtorikian/commonmarker) by default but it can be changed to [`Redcarpet`](https://github.com/vmg/redcarpet) in the configuration or add your own logic by customizing the `Marksmith::Renderer` model.
158
+ It supports basic styles like headings, `strong`, `italic` and others.
159
159
 
160
160
  In your `show.html.erb` view or the place where you want to render the compiled markup use the `marksmithed` helper and it will run the content through the renderer.
161
161
 
@@ -172,31 +172,31 @@ In your `show.html.erb` view or the place where you want to render the compiled
172
172
  > sanitize(body, tags: %w(table th tr td span) + ActionView::Helpers::SanitizeHelper.sanitizer_vendor.safe_list_sanitizer.allowed_tags.to_a)
173
173
  > ```
174
174
 
175
- ### Customize the renderer
175
+ ## Customize the renderer
176
176
 
177
- You can customize the renderer by overriding the `Marksmith::Renderer` model.
177
+ Marksmith comes with a default renderer that uses `Commonmarker` by default but it can be changed to `Redcarpet` in the configuration.
178
178
 
179
179
  ```ruby
180
- # app/models/marksmith/renderer.rb
181
- require "redcarpet"
180
+ # config/initializers/marksmith.rb
181
+ Marksmith.configure do |config|
182
+ config.parser = "redcarpet"
183
+ end
184
+ ```
185
+
186
+ ### Add your own renderer
182
187
 
188
+ You can completely customize the renderer by overriding the `Marksmith::Renderer` model.
189
+
190
+ ```ruby
191
+ # app/models/marksmith/renderer.rb
183
192
  module Marksmith
184
193
  class Renderer
185
- def renderer
186
- ::Redcarpet::Markdown.new(
187
- ::Redcarpet::Render::HTML,
188
- tables: true,
189
- lax_spacing: true,
190
- fenced_code_blocks: true,
191
- space_after_headers: true,
192
- hard_wrap: true,
193
- autolink: true,
194
- strikethrough: true,
195
- underline: true,
196
- highlight: true,
197
- quote: true,
198
- with_toc_data: true
199
- )
194
+ def initialize(body:)
195
+ @body = body
196
+ end
197
+
198
+ def render
199
+ # Your custom renderer logic here
200
200
  end
201
201
  end
202
202
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Marksmith 0.1.3
2
+ Marksmith 0.2.0
3
3
  */
4
4
  var ListContinuationController = (function () {
5
5
  'use strict';
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Marksmith 0.1.3
2
+ Marksmith 0.2.0
3
3
  */
4
4
  var ListContinuationController = (function (stimulus) {
5
5
  'use strict';
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Marksmith 0.1.3
2
+ Marksmith 0.2.0
3
3
  */
4
4
  var MarksmithController = (function () {
5
5
  'use strict';
@@ -1,5 +1,5 @@
1
1
  /*!
2
- Marksmith 0.1.3
2
+ Marksmith 0.2.0
3
3
  */
4
4
  var MarksmithController = (function (stimulus) {
5
5
  'use strict';
@@ -1,3 +1,3 @@
1
1
  <%= field_wrapper **field_wrapper_args, full_width: true do %>
2
- <%= render partial: "marksmith/shared/rendered_body", locals: { body: Marksmith::Renderer.new.renderer.render(@field.value) } %>
2
+ <%= render partial: "marksmith/shared/rendered_body", locals: { body: Marksmith::Renderer.new(body: @field.value).render } %>
3
3
  <% end %>
@@ -1,7 +1,7 @@
1
1
  module Marksmith
2
2
  class MarkdownPreviewsController < ApplicationController
3
3
  def create
4
- @body = Marksmith::Renderer.new.renderer.render(params[:body])
4
+ @body = Marksmith::Renderer.new(body: params[:body]).render
5
5
  end
6
6
  end
7
7
  end
@@ -1,8 +1,24 @@
1
- require "redcarpet"
2
-
3
1
  module Marksmith
4
2
  class Renderer
5
- def renderer
3
+ def initialize(body:)
4
+ @body = body
5
+ end
6
+
7
+ def render
8
+ if Marksmith.configuration.parser == "commonmarker"
9
+ render_commonmarker
10
+ else
11
+ render_redcarpet
12
+ end
13
+ end
14
+
15
+ def render_commonmarker
16
+ # commonmarker expects an utf-8 encoded string
17
+ body = @body.to_s.dup.force_encoding('utf-8')
18
+ Commonmarker.to_html(body)
19
+ end
20
+
21
+ def render_redcarpet
6
22
  ::Redcarpet::Markdown.new(
7
23
  ::Redcarpet::Render::HTML,
8
24
  tables: true,
@@ -16,7 +32,7 @@ module Marksmith
16
32
  highlight: true,
17
33
  quote: true,
18
34
  with_toc_data: true
19
- )
35
+ ).render(@body)
20
36
  end
21
37
  end
22
38
  end
@@ -4,6 +4,7 @@ module Marksmith
4
4
 
5
5
  config_accessor(:automatically_mount_engine) { true }
6
6
  config_accessor(:mount_path) { "/marksmith" }
7
+ config_accessor(:parser) { "commonmarker" }
7
8
  end
8
9
 
9
10
  def self.configuration
@@ -1,7 +1,7 @@
1
1
  module Marksmith
2
2
  module Helper
3
3
  def marksmithed(body)
4
- Marksmith::Renderer.new.renderer.render(body)
4
+ Marksmith::Renderer.new(body:).render
5
5
  end
6
6
 
7
7
  def marksmith_tag(name, **kwargs, &block)
@@ -1,3 +1,3 @@
1
1
  module Marksmith
2
- VERSION = "0.1.3"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: marksmith
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Marin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-02-14 00:00:00.000000000 Z
11
+ date: 2025-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -24,20 +24,6 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
- - !ruby/object:Gem::Dependency
28
- name: redcarpet
29
- requirement: !ruby/object:Gem::Requirement
30
- requirements:
31
- - - ">="
32
- - !ruby/object:Gem::Version
33
- version: '0'
34
- type: :runtime
35
- prerelease: false
36
- version_requirements: !ruby/object:Gem::Requirement
37
- requirements:
38
- - - ">="
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
27
  description: Marksmith is a GitHub-style markdown editor for Ruby on Rails applications.
42
28
  email:
43
29
  - adrian@adrianthedev.com