html-pipeline 3.0.3 → 3.2.1
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 +4 -4
- data/.github/workflows/publish.yml +7 -2
- data/CHANGELOG.md +104 -52
- data/Gemfile +1 -3
- data/README.md +26 -13
- data/UPGRADING.md +0 -2
- data/html-pipeline.gemspec +1 -1
- data/lib/html_pipeline/convert_filter/markdown_filter.rb +4 -4
- data/lib/html_pipeline/convert_filter.rb +1 -1
- data/lib/html_pipeline/filter.rb +1 -1
- data/lib/html_pipeline/node_filter/syntax_highlight_filter.rb +1 -1
- data/lib/html_pipeline/node_filter.rb +2 -0
- data/lib/html_pipeline/text_filter/image_filter.rb +2 -2
- data/lib/html_pipeline/text_filter/plain_text_input_filter.rb +2 -2
- data/lib/html_pipeline/text_filter.rb +8 -8
- data/lib/html_pipeline/version.rb +1 -1
- data/lib/html_pipeline.rb +17 -11
- metadata +5 -5
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 7d505d0765630595363061d97d8f189a2712fc56b89371542a225d35421af386
|
|
4
|
+
data.tar.gz: 9d10f5ad3c9d39fe65d6e3b22cd59070997e5774353806affde0a957a52f5812
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 63b53387dfbb3bc7a9be29f0e6de9930daa773254dc885d0561b59a8d8ff50317ddabe62c364253b6da7142b3c4d169f72ce43f217ec50d18aee450513e88f13
|
|
7
|
+
data.tar.gz: 948027919009faea3009e0e222491aeae865db4875602a40bbf5a458f8b712f633b6e66d386e95acadbb129bcba33f63afdddbc89b73758cc1b544855eb5b227
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
name: Release
|
|
1
|
+
name: Tag and Release
|
|
2
2
|
|
|
3
3
|
on:
|
|
4
4
|
workflow_dispatch:
|
|
@@ -7,13 +7,18 @@ on:
|
|
|
7
7
|
- main
|
|
8
8
|
paths:
|
|
9
9
|
- "lib/html_pipeline/version.rb"
|
|
10
|
+
pull_request_target:
|
|
11
|
+
types:
|
|
12
|
+
- closed
|
|
10
13
|
|
|
11
14
|
jobs:
|
|
12
15
|
ruby:
|
|
13
16
|
uses: yettoapp/actions/.github/workflows/ruby_gem_release.yml@main
|
|
14
17
|
secrets:
|
|
15
18
|
rubygems_api_key: ${{ secrets.RUBYGEMS_API_BOT_KEY }}
|
|
16
|
-
gh_token: ${{ secrets.
|
|
19
|
+
gh_token: ${{ secrets.GITHUB_TOKEN }}
|
|
17
20
|
with:
|
|
18
21
|
gem_name: html-pipeline
|
|
19
22
|
version_filepath: lib/html_pipeline/version.rb
|
|
23
|
+
prepare: ${{ github.event_name == 'push' }}
|
|
24
|
+
release: ${{ github.event_name == 'workflow_dispatch' || ((github.event.pull_request.merged == true) && (contains(github.event.pull_request.labels.*.name, 'release'))) }}
|
data/CHANGELOG.md
CHANGED
|
@@ -1,51 +1,107 @@
|
|
|
1
|
+
# [v3.2.1] - 16-07-2024
|
|
2
|
+
## What's Changed
|
|
3
|
+
* Update commonmarker requirement from ~> 1.0.0.pre7 to ~> 1.1.2 in the bundler-dependencies group by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/404
|
|
4
|
+
* Remove superfluous sanitization by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/408
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.2.0...v3.2.1
|
|
8
|
+
## [v3.2.0] - 30-04-2024
|
|
9
|
+
## What's Changed
|
|
10
|
+
* Pass context along to every part of the pipeline by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/403
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.1...v3.2.0
|
|
14
|
+
## [v3.1.1] - 09-04-2024
|
|
15
|
+
## What's Changed
|
|
16
|
+
* Correct missing method implementation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/401
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.1.0...v3.1.1
|
|
20
|
+
## [v3.1.0] - 28-02-2024
|
|
21
|
+
## What's Changed
|
|
22
|
+
* UPGRADING: not removed by @dentarg in https://github.com/gjtorikian/html-pipeline/pull/397
|
|
23
|
+
* [BREAKING] now requires instantiation by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/398
|
|
24
|
+
|
|
25
|
+
## New Contributors
|
|
26
|
+
* @dentarg made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/397
|
|
27
|
+
|
|
28
|
+
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.3...v3.1.0
|
|
29
|
+
## [v3.0.3] - 02-02-2024
|
|
30
|
+
|
|
31
|
+
## What's Changed
|
|
32
|
+
|
|
33
|
+
- Fix typo in README by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/394
|
|
34
|
+
- Prevent exception by @ppworks in https://github.com/gjtorikian/html-pipeline/pull/395
|
|
35
|
+
- Cut 3.0.3 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/396
|
|
36
|
+
|
|
37
|
+
## New Contributors
|
|
38
|
+
|
|
39
|
+
- @ppworks made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/394
|
|
40
|
+
|
|
41
|
+
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.2...v3.0.3
|
|
42
|
+
|
|
1
43
|
## [v3.0.2] - 08-01-2024
|
|
44
|
+
|
|
2
45
|
## What's Changed
|
|
3
|
-
|
|
4
|
-
|
|
46
|
+
|
|
47
|
+
- README.md: Fix example code by @grekko in https://github.com/gjtorikian/html-pipeline/pull/390
|
|
48
|
+
- Allow pipeline to run without node filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/392
|
|
5
49
|
|
|
6
50
|
## New Contributors
|
|
7
|
-
|
|
51
|
+
|
|
52
|
+
- @grekko made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/390
|
|
8
53
|
|
|
9
54
|
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.1...v3.0.2
|
|
55
|
+
|
|
10
56
|
## [v3.0.1] - 28-12-2023
|
|
57
|
+
|
|
11
58
|
## What's Changed
|
|
12
|
-
|
|
59
|
+
|
|
60
|
+
- Handle odd numbers of NodeFilters to be configured by @stevehill1981 in https://github.com/gjtorikian/html-pipeline/pull/389
|
|
13
61
|
|
|
14
62
|
## New Contributors
|
|
15
|
-
|
|
63
|
+
|
|
64
|
+
- @stevehill1981 made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/389
|
|
16
65
|
|
|
17
66
|
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v3.0.0...v3.0.1
|
|
67
|
+
|
|
18
68
|
## [v3.0.0] - 24-12-2023
|
|
69
|
+
|
|
19
70
|
## What's Changed
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
71
|
+
|
|
72
|
+
- Switch to GitHub Actions by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/346
|
|
73
|
+
- add truffleruby-head by @gogainda in https://github.com/gjtorikian/html-pipeline/pull/348
|
|
74
|
+
- Add Rubocop by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/349
|
|
75
|
+
- Support multiple dependencies per filter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/351
|
|
76
|
+
- Split filters up by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/360
|
|
77
|
+
- Migrate from Nokogiri to Selma by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/368
|
|
78
|
+
- You shall pass by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/369
|
|
79
|
+
- Update Selma signatures by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/370
|
|
80
|
+
- Close sanitization-related issues by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/371
|
|
81
|
+
- Drop SyntaxHighlightFilter by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/372
|
|
82
|
+
- V3 Release by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/347
|
|
83
|
+
- Use emoji from commonmarker by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/373
|
|
84
|
+
- req convert_filter if filter present by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/375
|
|
85
|
+
- Update selma requirement from ~> 0.0.1 to >= 0.0.1, < 0.2.0 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/377
|
|
86
|
+
- Add the AssetProxyFilter by @digitalmoksha in https://github.com/gjtorikian/html-pipeline/pull/379
|
|
87
|
+
- Update rouge requirement from ~> 3.1 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/381
|
|
88
|
+
- Update gemoji requirement from ~> 3.0 to ~> 4.1 by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/382
|
|
89
|
+
- Have Zeitwerk not automatically load filters by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/383
|
|
90
|
+
- Bump the github-actions group with 1 update by @dependabot in https://github.com/gjtorikian/html-pipeline/pull/384
|
|
91
|
+
- :gem: 3.0.0 by @gjtorikian in https://github.com/gjtorikian/html-pipeline/pull/386
|
|
40
92
|
|
|
41
93
|
## New Contributors
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
94
|
+
|
|
95
|
+
- @gogainda made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/348
|
|
96
|
+
- @dependabot made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/377
|
|
97
|
+
- @digitalmoksha made their first contribution in https://github.com/gjtorikian/html-pipeline/pull/379
|
|
45
98
|
|
|
46
99
|
**Full Changelog**: https://github.com/gjtorikian/html-pipeline/compare/v2.14.3...v3.0.0
|
|
100
|
+
|
|
47
101
|
## [v3.0.0.pre6] - 16-08-2023
|
|
102
|
+
|
|
48
103
|
null
|
|
104
|
+
|
|
49
105
|
# Changelog
|
|
50
106
|
|
|
51
107
|
## [v3.0.0.pre5](https://github.com/gjtorikian/html-pipeline/tree/v3.0.0.pre5) (2023-06-05)
|
|
@@ -76,7 +132,7 @@ null
|
|
|
76
132
|
|
|
77
133
|
**Merged pull requests:**
|
|
78
134
|
|
|
79
|
-
- req
|
|
135
|
+
- req convert_filter if `text/node`filter present [\#375](https://github.com/gjtorikian/html-pipeline/pull/375) ([gjtorikian](https://github.com/gjtorikian))
|
|
80
136
|
|
|
81
137
|
## [v3.0.0.pre2](https://github.com/gjtorikian/html-pipeline/tree/v3.0.0.pre2) (2023-01-26)
|
|
82
138
|
|
|
@@ -137,7 +193,7 @@ null
|
|
|
137
193
|
|
|
138
194
|
**Merged pull requests:**
|
|
139
195
|
|
|
140
|
-
- Replace EscapeUtils.
|
|
196
|
+
- Replace EscapeUtils.escape_html with CGI.escape_html [\#365](https://github.com/gjtorikian/html-pipeline/pull/365) ([ramhoj](https://github.com/ramhoj))
|
|
141
197
|
|
|
142
198
|
## [v2.14.2](https://github.com/gjtorikian/html-pipeline/tree/v2.14.2) (2022-06-12)
|
|
143
199
|
|
|
@@ -309,7 +365,7 @@ null
|
|
|
309
365
|
|
|
310
366
|
**Closed issues:**
|
|
311
367
|
|
|
312
|
-
- New feature request for hashtags \# filter
|
|
368
|
+
- New feature request for hashtags \# filter [\#301](https://github.com/gjtorikian/html-pipeline/issues/301)
|
|
313
369
|
- Whitelist srcset for responsive images [\#233](https://github.com/gjtorikian/html-pipeline/issues/233)
|
|
314
370
|
|
|
315
371
|
**Merged pull requests:**
|
|
@@ -412,7 +468,7 @@ null
|
|
|
412
468
|
|
|
413
469
|
- Set instrumentation name [\#275](https://github.com/gjtorikian/html-pipeline/pull/275) ([gjtorikian](https://github.com/gjtorikian))
|
|
414
470
|
- Switch to CommonMark [\#274](https://github.com/gjtorikian/html-pipeline/pull/274) ([kivikakk](https://github.com/kivikakk))
|
|
415
|
-
-
|
|
471
|
+
- add korgi to 3rd party extensions \[ci skip\] [\#271](https://github.com/gjtorikian/html-pipeline/pull/271) ([jodeci](https://github.com/jodeci))
|
|
416
472
|
|
|
417
473
|
## [v2.5.0](https://github.com/gjtorikian/html-pipeline/tree/v2.5.0) (2017-01-13)
|
|
418
474
|
|
|
@@ -421,7 +477,7 @@ null
|
|
|
421
477
|
**Closed issues:**
|
|
422
478
|
|
|
423
479
|
- Add `<wbr>` to whitelist [\#265](https://github.com/gjtorikian/html-pipeline/issues/265)
|
|
424
|
-
- Missing context keys for HTML::Pipeline::EmojiFilter: :
|
|
480
|
+
- Missing context keys for HTML::Pipeline::EmojiFilter: :asset_root [\#262](https://github.com/gjtorikian/html-pipeline/issues/262)
|
|
425
481
|
- Emoji \<img\> tags does not pass W3C validationg [\#234](https://github.com/gjtorikian/html-pipeline/issues/234)
|
|
426
482
|
- Incompatible character encodings: ASCII-8BIT and UTF-8 in EmailReplyFilter [\#229](https://github.com/gjtorikian/html-pipeline/issues/229)
|
|
427
483
|
|
|
@@ -504,8 +560,8 @@ null
|
|
|
504
560
|
**Merged pull requests:**
|
|
505
561
|
|
|
506
562
|
- Release 2.2.2 [\#231](https://github.com/gjtorikian/html-pipeline/pull/231) ([jch](https://github.com/jch))
|
|
507
|
-
- Fix for calling
|
|
508
|
-
- Add html-pipeline-
|
|
563
|
+
- Fix for calling mention_link_filter with only one argument [\#230](https://github.com/gjtorikian/html-pipeline/pull/230) ([benbalter](https://github.com/benbalter))
|
|
564
|
+
- Add html-pipeline-linkify_github to 3rd Party Extensions \[ci skip\] [\#228](https://github.com/gjtorikian/html-pipeline/pull/228) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
509
565
|
|
|
510
566
|
## [v2.2.1](https://github.com/gjtorikian/html-pipeline/tree/v2.2.1) (2015-10-01)
|
|
511
567
|
|
|
@@ -561,7 +617,7 @@ null
|
|
|
561
617
|
- Question - Can this work with Rouge? [\#166](https://github.com/gjtorikian/html-pipeline/issues/166)
|
|
562
618
|
- Question about github markdown filter \(low priority!\) [\#165](https://github.com/gjtorikian/html-pipeline/issues/165)
|
|
563
619
|
- Do not mention or emojify in a codeblock [\#163](https://github.com/gjtorikian/html-pipeline/issues/163)
|
|
564
|
-
- MentionFilter
|
|
620
|
+
- MentionFilter base_url config question [\#161](https://github.com/gjtorikian/html-pipeline/issues/161)
|
|
565
621
|
- Feature Request: Add "details" tag to whitelist [\#138](https://github.com/gjtorikian/html-pipeline/issues/138)
|
|
566
622
|
|
|
567
623
|
**Merged pull requests:**
|
|
@@ -573,10 +629,10 @@ null
|
|
|
573
629
|
- \[ci skip\] Fix CHANGELOG.md rendering. [\#177](https://github.com/gjtorikian/html-pipeline/pull/177) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
574
630
|
- Restrict nokogiri to specific versions [\#176](https://github.com/gjtorikian/html-pipeline/pull/176) ([simeonwillbanks](https://github.com/simeonwillbanks))
|
|
575
631
|
- Use svg build badge. \[ci skip\] [\#175](https://github.com/gjtorikian/html-pipeline/pull/175) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
576
|
-
- Add 3rd party gem: html-pipeline-
|
|
577
|
-
- MentionFilter\#
|
|
632
|
+
- Add 3rd party gem: html-pipeline-rouge_filter. [\#174](https://github.com/gjtorikian/html-pipeline/pull/174) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
633
|
+
- MentionFilter\#link_to_mentioned_user: Replace String introspection with Regexp match [\#172](https://github.com/gjtorikian/html-pipeline/pull/172) ([simeonwillbanks](https://github.com/simeonwillbanks))
|
|
578
634
|
- Whitelist summary and details element. [\#171](https://github.com/gjtorikian/html-pipeline/pull/171) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
579
|
-
- Implement new context option:
|
|
635
|
+
- Implement new context option: ignored_ancestor_tags to accept more ignored tags. [\#170](https://github.com/gjtorikian/html-pipeline/pull/170) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
580
636
|
- Support ~login for MentionFilter. [\#167](https://github.com/gjtorikian/html-pipeline/pull/167) ([JuanitoFatas](https://github.com/JuanitoFatas))
|
|
581
637
|
- Add GitHub flavor Markdown Task List extension [\#162](https://github.com/gjtorikian/html-pipeline/pull/162) ([simeonwillbanks](https://github.com/simeonwillbanks))
|
|
582
638
|
- Drop support for gemoji ~\> 1.0 [\#159](https://github.com/gjtorikian/html-pipeline/pull/159) ([jch](https://github.com/jch))
|
|
@@ -593,14 +649,14 @@ null
|
|
|
593
649
|
|
|
594
650
|
**Closed issues:**
|
|
595
651
|
|
|
596
|
-
- @
|
|
652
|
+
- @mention_filter should not replace mentions in style blocks. [\#143](https://github.com/gjtorikian/html-pipeline/issues/143)
|
|
597
653
|
- EmojiFilter doesn't work on strings that don't contain HTML [\#133](https://github.com/gjtorikian/html-pipeline/issues/133)
|
|
598
654
|
|
|
599
655
|
**Merged pull requests:**
|
|
600
656
|
|
|
601
657
|
- Search for text nodes on DocumentFragments without root tags [\#146](https://github.com/gjtorikian/html-pipeline/pull/146) ([Razer6](https://github.com/Razer6))
|
|
602
658
|
- Don't filter @mentions in \<style\> tags [\#145](https://github.com/gjtorikian/html-pipeline/pull/145) ([jch](https://github.com/jch))
|
|
603
|
-
- Prefer
|
|
659
|
+
- Prefer http_url in HttpsFilter [\#142](https://github.com/gjtorikian/html-pipeline/pull/142) ([bkeepers](https://github.com/bkeepers))
|
|
604
660
|
- Don't check twice if there is a ':' in content \(EmojiFilter\) [\#141](https://github.com/gjtorikian/html-pipeline/pull/141) ([Razer6](https://github.com/Razer6))
|
|
605
661
|
|
|
606
662
|
## [v1.10.0](https://github.com/gjtorikian/html-pipeline/tree/v1.10.0) (2014-09-05)
|
|
@@ -632,7 +688,7 @@ null
|
|
|
632
688
|
**Merged pull requests:**
|
|
633
689
|
|
|
634
690
|
- Generalize https filter take 2 [\#131](https://github.com/gjtorikian/html-pipeline/pull/131) ([simeonwillbanks](https://github.com/simeonwillbanks))
|
|
635
|
-
- Remove
|
|
691
|
+
- Remove RUBY_VERSION conditionals from gemspec [\#130](https://github.com/gjtorikian/html-pipeline/pull/130) ([mislav](https://github.com/mislav))
|
|
636
692
|
- Add compatibility with gemoji v2 [\#129](https://github.com/gjtorikian/html-pipeline/pull/129) ([mislav](https://github.com/mislav))
|
|
637
693
|
|
|
638
694
|
## [v1.8.0](https://github.com/gjtorikian/html-pipeline/tree/v1.8.0) (2014-04-04)
|
|
@@ -659,7 +715,7 @@ null
|
|
|
659
715
|
**Closed issues:**
|
|
660
716
|
|
|
661
717
|
- cut a 1.6.0 release [\#116](https://github.com/gjtorikian/html-pipeline/issues/116)
|
|
662
|
-
- AutolinkFilter
|
|
718
|
+
- AutolinkFilter link_attr doesn't seem to work [\#114](https://github.com/gjtorikian/html-pipeline/issues/114)
|
|
663
719
|
- Spaces inserted into code [\#109](https://github.com/gjtorikian/html-pipeline/issues/109)
|
|
664
720
|
|
|
665
721
|
**Merged pull requests:**
|
|
@@ -747,9 +803,9 @@ null
|
|
|
747
803
|
|
|
748
804
|
**Merged pull requests:**
|
|
749
805
|
|
|
750
|
-
- Add
|
|
806
|
+
- Add link_attr option to Autolink filter [\#89](https://github.com/gjtorikian/html-pipeline/pull/89) ([excid3](https://github.com/excid3))
|
|
751
807
|
- Update readme with link to asciidoc filter [\#87](https://github.com/gjtorikian/html-pipeline/pull/87) ([jch](https://github.com/jch))
|
|
752
|
-
- use
|
|
808
|
+
- use xml_mini extracted from activesupport [\#85](https://github.com/gjtorikian/html-pipeline/pull/85) ([mojavelinux](https://github.com/mojavelinux))
|
|
753
809
|
- Filters Manage Dependencies [\#80](https://github.com/gjtorikian/html-pipeline/pull/80) ([simeonwillbanks](https://github.com/simeonwillbanks))
|
|
754
810
|
|
|
755
811
|
## [v0.3.1](https://github.com/gjtorikian/html-pipeline/tree/v0.3.1) (2013-09-16)
|
|
@@ -817,7 +873,7 @@ null
|
|
|
817
873
|
- Improve to describe gem 'github-linguist' [\#69](https://github.com/gjtorikian/html-pipeline/pull/69) ([tricknotes](https://github.com/tricknotes))
|
|
818
874
|
- Bump version to 0.1.0. Follow semver. [\#68](https://github.com/gjtorikian/html-pipeline/pull/68) ([jch](https://github.com/jch))
|
|
819
875
|
- Scope gem versions for Travis CI [\#67](https://github.com/gjtorikian/html-pipeline/pull/67) ([jch](https://github.com/jch))
|
|
820
|
-
- Allow passing
|
|
876
|
+
- Allow passing skip_tags in autolink filter context [\#65](https://github.com/gjtorikian/html-pipeline/pull/65) ([pengwynn](https://github.com/pengwynn))
|
|
821
877
|
- Support non-English characters in anchor names [\#64](https://github.com/gjtorikian/html-pipeline/pull/64) ([jakedouglas](https://github.com/jakedouglas))
|
|
822
878
|
- Fix the `AutolinkFilter` constant name. [\#57](https://github.com/gjtorikian/html-pipeline/pull/57) ([envygeeks](https://github.com/envygeeks))
|
|
823
879
|
- resolves \#54 allow table section elements \(thead, tfoot, tbody\) [\#55](https://github.com/gjtorikian/html-pipeline/pull/55) ([mojavelinux](https://github.com/mojavelinux))
|
|
@@ -870,7 +926,7 @@ null
|
|
|
870
926
|
**Merged pull requests:**
|
|
871
927
|
|
|
872
928
|
- Add an html-pipeline executable to the gem [\#44](https://github.com/gjtorikian/html-pipeline/pull/44) ([indirect](https://github.com/indirect))
|
|
873
|
-
- add result\[:
|
|
929
|
+
- add result\[:mentioned_usernames\] for MentionFilter [\#42](https://github.com/gjtorikian/html-pipeline/pull/42) ([fahchen](https://github.com/fahchen))
|
|
874
930
|
|
|
875
931
|
## [v0.0.8.1](https://github.com/gjtorikian/html-pipeline/tree/v0.0.8.1) (2013-03-03)
|
|
876
932
|
|
|
@@ -886,7 +942,7 @@ null
|
|
|
886
942
|
|
|
887
943
|
**Merged pull requests:**
|
|
888
944
|
|
|
889
|
-
- Bump
|
|
945
|
+
- Bump escape_utils [\#41](https://github.com/gjtorikian/html-pipeline/pull/41) ([brianmario](https://github.com/brianmario))
|
|
890
946
|
- Don't monkeypatch Nokogiri in 1.9 [\#40](https://github.com/gjtorikian/html-pipeline/pull/40) ([defunkt](https://github.com/defunkt))
|
|
891
947
|
|
|
892
948
|
## [v0.0.8](https://github.com/gjtorikian/html-pipeline/tree/v0.0.8) (2013-02-07)
|
|
@@ -978,7 +1034,3 @@ null
|
|
|
978
1034
|
- Ensure required context values are present [\#9](https://github.com/gjtorikian/html-pipeline/pull/9) ([juliamae](https://github.com/juliamae))
|
|
979
1035
|
- emoji filter requires the emoji gem [\#8](https://github.com/gjtorikian/html-pipeline/pull/8) ([atmos](https://github.com/atmos))
|
|
980
1036
|
- De-Github and opensource [\#6](https://github.com/gjtorikian/html-pipeline/pull/6) ([jch](https://github.com/jch))
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
\* *This Changelog was automatically generated by [github_changelog_generator](https://github.com/github-changelog-generator/github-changelog-generator)*
|
data/Gemfile
CHANGED
|
@@ -10,8 +10,6 @@ gem "awesome_print"
|
|
|
10
10
|
gem "rubocop"
|
|
11
11
|
gem "rubocop-standard"
|
|
12
12
|
|
|
13
|
-
gem "github_changelog_generator", "~> 1.16"
|
|
14
|
-
|
|
15
13
|
gem "sorbet-runtime"
|
|
16
14
|
|
|
17
15
|
group :development, :test do
|
|
@@ -27,7 +25,7 @@ group :development do
|
|
|
27
25
|
end
|
|
28
26
|
|
|
29
27
|
group :test do
|
|
30
|
-
gem "commonmarker", "~> 1.
|
|
28
|
+
gem "commonmarker", "~> 1.1.2", require: false
|
|
31
29
|
gem "gemoji", "~> 4.1", require: false
|
|
32
30
|
gem "gemojione", "~> 4.3", require: false
|
|
33
31
|
|
data/README.md
CHANGED
|
@@ -1,8 +1,5 @@
|
|
|
1
1
|
# HTML-Pipeline
|
|
2
2
|
|
|
3
|
-
> **Note**
|
|
4
|
-
> This README refers to the behavior in the new 3.0.0.pre gem.
|
|
5
|
-
|
|
6
3
|
HTML processing filters and utilities. This module is a small
|
|
7
4
|
framework for defining CSS-based content filters and applying them to user
|
|
8
5
|
provided content.
|
|
@@ -60,9 +57,15 @@ results tothe next filter. A pipeline has several kinds of filters available to
|
|
|
60
57
|
|
|
61
58
|
You can assemble each sequence into a single pipeline, or choose to call each filter individually.
|
|
62
59
|
|
|
63
|
-
As an example, suppose we want to transform Commonmark source text into Markdown HTML
|
|
60
|
+
As an example, suppose we want to transform Commonmark source text into Markdown HTML:
|
|
64
61
|
|
|
65
|
-
|
|
62
|
+
```
|
|
63
|
+
Hey there, @gjtorikian
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
With the content, we also want to:
|
|
67
|
+
|
|
68
|
+
- change every instance of `Hey` to `Hello`
|
|
66
69
|
- strip undesired HTML
|
|
67
70
|
- linkify @mention
|
|
68
71
|
|
|
@@ -73,7 +76,7 @@ require 'html_pipeline'
|
|
|
73
76
|
|
|
74
77
|
class HelloJohnnyFilter < HTMLPipelineFilter
|
|
75
78
|
def call
|
|
76
|
-
text.gsub("
|
|
79
|
+
text.gsub("Hey", "Hello")
|
|
77
80
|
end
|
|
78
81
|
end
|
|
79
82
|
|
|
@@ -104,11 +107,21 @@ used to pass around arguments and metadata between filters in a pipeline. For
|
|
|
104
107
|
example, if you want to disable footnotes in the `MarkdownFilter`, you can pass an option in the context hash:
|
|
105
108
|
|
|
106
109
|
```ruby
|
|
107
|
-
context =
|
|
110
|
+
context = { markdown: { extensions: { footnotes: false } } }
|
|
108
111
|
filter = HTMLPipeline::ConvertFilter::MarkdownFilter.new(context: context)
|
|
109
112
|
filter.call("Hi **world**!")
|
|
110
113
|
```
|
|
111
114
|
|
|
115
|
+
Alternatively, you can construct a pipeline, and pass in a context during the call:
|
|
116
|
+
|
|
117
|
+
```ruby
|
|
118
|
+
pipeline = HTMLPipeline.new(
|
|
119
|
+
convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
|
|
120
|
+
node_filters: [HTMLPipeline::NodeFilter::MentionFilter.new]
|
|
121
|
+
)
|
|
122
|
+
pipeline.call(user_supplied_text, context: { markdown: { extensions: { footnotes: false } } })
|
|
123
|
+
```
|
|
124
|
+
|
|
112
125
|
Please refer to the documentation for each filter to understand what configuration options are available.
|
|
113
126
|
|
|
114
127
|
### More Examples
|
|
@@ -158,9 +171,9 @@ The `ConvertFilter` takes text and turns it into HTML. `@text`, `@config`, and `
|
|
|
158
171
|
|
|
159
172
|
### Sanitization
|
|
160
173
|
|
|
161
|
-
Because the web can be a scary place, HTML is automatically sanitized after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
|
|
174
|
+
Because the web can be a scary place, **HTML is automatically sanitized** after the `ConvertFilter` runs and before the `NodeFilter`s are processed. This is to prevent malicious or unexpected input from entering the pipeline.
|
|
162
175
|
|
|
163
|
-
The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings.
|
|
176
|
+
The sanitization process takes a hash configuration of settings. See the [Selma](https://www.github.com/gjtorikian/selma) documentation for more information on how to configure these settings. Note that users must correctly configure the sanitization configuration if they expect to use it correctly in conjunction with handlers which manipulate HTML.
|
|
164
177
|
|
|
165
178
|
A default sanitization config is provided by this library (`HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG`). A sample custom sanitization allowlist might look like this:
|
|
166
179
|
|
|
@@ -171,7 +184,7 @@ ALLOWLIST = {
|
|
|
171
184
|
|
|
172
185
|
pipeline = HTMLPipeline.new \
|
|
173
186
|
text_filters: [
|
|
174
|
-
HTMLPipeline::
|
|
187
|
+
HTMLPipeline::TextFilter::ImageFilter.new,
|
|
175
188
|
],
|
|
176
189
|
convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
|
|
177
190
|
sanitization_config: ALLOWLIST
|
|
@@ -199,7 +212,7 @@ the config:
|
|
|
199
212
|
```ruby
|
|
200
213
|
pipeline = HTMLPipeline.new \
|
|
201
214
|
text_filters: [
|
|
202
|
-
HTMLPipeline::
|
|
215
|
+
HTMLPipeline::TextFilter::ImageFilter.new,
|
|
203
216
|
],
|
|
204
217
|
convert_filter: HTMLPipeline::ConvertFilter::MarkdownFilter.new,
|
|
205
218
|
sanitization_config: nil
|
|
@@ -211,7 +224,7 @@ For more examples of customizing the sanitization process to include the tags yo
|
|
|
211
224
|
|
|
212
225
|
`NodeFilters`s can operate either on HTML elements or text nodes using CSS selectors. Each `NodeFilter` must define a method named `selector` which provides an instance of `Selma::Selector`. If elements are being manipulated, `handle_element` must be defined, taking one argument, `element`; if text nodes are being manipulated, `handle_text_chunk` must be defined, taking one argument, `text_chunk`. `@config`, and `@result` are available to use, and any changes made to these ivars are passed on to the next filter.
|
|
213
226
|
|
|
214
|
-
`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a custom state for `result` to
|
|
227
|
+
`NodeFilter` also has an optional method, `after_initialize`, which is run after the filter initializes. This can be useful in setting up a fresh custom state for `result` to start from each time the pipeline is called.
|
|
215
228
|
|
|
216
229
|
Here's an example `NodeFilter` that adds a base url to images that are root relative:
|
|
217
230
|
|
|
@@ -375,7 +388,7 @@ you to add additional elements. You can either modify the constant's value, or
|
|
|
375
388
|
re-define your own config and pass that in, such as:
|
|
376
389
|
|
|
377
390
|
```ruby
|
|
378
|
-
config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.
|
|
391
|
+
config = HTMLPipeline::SanitizationFilter::DEFAULT_CONFIG.deep_dup
|
|
379
392
|
config[:elements] << "iframe" # sure, whatever you want
|
|
380
393
|
```
|
|
381
394
|
|
data/UPGRADING.md
CHANGED
|
@@ -14,10 +14,8 @@ The following filters were removed:
|
|
|
14
14
|
|
|
15
15
|
- `AutolinkFilter`: this is handled by [Commonmarker](https://www.github.com/gjtorikian/commonmarker) and can be disabled/enabled through the `MarkdownFilter`'s `context` hash
|
|
16
16
|
- `SanitizationFilter`: this is handled by [Selma](https://www.github.com/gjtorikian/selma); configuration can be done through the `sanitization_config` hash
|
|
17
|
-
|
|
18
17
|
- `EmailReplyFilter`
|
|
19
18
|
- `CamoFilter`
|
|
20
|
-
- `TextFilter`
|
|
21
19
|
|
|
22
20
|
### Changed API
|
|
23
21
|
|
data/html-pipeline.gemspec
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
HTMLPipeline.require_dependency("commonmarker", "MarkdownFilter")
|
|
4
4
|
|
|
5
5
|
class HTMLPipeline
|
|
6
|
-
class ConvertFilter
|
|
6
|
+
class ConvertFilter < Filter
|
|
7
7
|
# HTML Filter that converts Markdown text into HTML.
|
|
8
8
|
#
|
|
9
9
|
# Context options:
|
|
@@ -12,12 +12,12 @@ class HTMLPipeline
|
|
|
12
12
|
# :markdown[:extensions] => Commonmarker extensions options
|
|
13
13
|
class MarkdownFilter < ConvertFilter
|
|
14
14
|
def initialize(context: {}, result: {})
|
|
15
|
-
super
|
|
15
|
+
super
|
|
16
16
|
end
|
|
17
17
|
|
|
18
18
|
# Convert Commonmark to HTML using the best available implementation.
|
|
19
|
-
def call(text)
|
|
20
|
-
options =
|
|
19
|
+
def call(text, context: @context)
|
|
20
|
+
options = context.fetch(:markdown, {})
|
|
21
21
|
plugins = options.fetch(:plugins, {})
|
|
22
22
|
Commonmarker.to_html(text, options: options, plugins: plugins).rstrip!
|
|
23
23
|
end
|
data/lib/html_pipeline/filter.rb
CHANGED
|
@@ -27,7 +27,7 @@ class HTMLPipeline
|
|
|
27
27
|
# Public: Returns a simple Hash used to pass extra information into filters
|
|
28
28
|
# and also to allow filters to make extracted information available to the
|
|
29
29
|
# caller.
|
|
30
|
-
|
|
30
|
+
attr_accessor :context
|
|
31
31
|
|
|
32
32
|
# Public: Returns a Hash used to allow filters to pass back information
|
|
33
33
|
# to callers of the various Pipelines. This can be used for
|
|
@@ -15,7 +15,7 @@ class HTMLPipeline
|
|
|
15
15
|
# This filter does not write any additional information to the context hash.
|
|
16
16
|
class SyntaxHighlightFilter < NodeFilter
|
|
17
17
|
def initialize(context: {}, result: {})
|
|
18
|
-
super
|
|
18
|
+
super
|
|
19
19
|
# TODO: test the optionality of this
|
|
20
20
|
@formatter = context[:formatter] || Rouge::Formatters::HTML.new
|
|
21
21
|
end
|
|
@@ -9,8 +9,8 @@ class HTMLPipeline
|
|
|
9
9
|
# <img src="http://example.com/test.jpg" alt=""/>.
|
|
10
10
|
|
|
11
11
|
class ImageFilter < TextFilter
|
|
12
|
-
def call
|
|
13
|
-
|
|
12
|
+
def call(text, context: {}, result: {})
|
|
13
|
+
text.gsub(%r{(https|http)?://.+\.(jpg|jpeg|bmp|gif|png)(\?\S+)?}i) do |match|
|
|
14
14
|
%(<img src="#{match}" alt=""/>)
|
|
15
15
|
end
|
|
16
16
|
end
|
|
@@ -5,8 +5,8 @@ class HTMLPipeline
|
|
|
5
5
|
# Simple filter for plain text input. HTML escapes the text input and wraps it
|
|
6
6
|
# in a div.
|
|
7
7
|
class PlainTextInputFilter < TextFilter
|
|
8
|
-
def call
|
|
9
|
-
"<div>#{CGI.escapeHTML(
|
|
8
|
+
def call(text, context: {}, result: {})
|
|
9
|
+
"<div>#{CGI.escapeHTML(text)}</div>"
|
|
10
10
|
end
|
|
11
11
|
end
|
|
12
12
|
end
|
|
@@ -4,17 +4,17 @@ class HTMLPipeline
|
|
|
4
4
|
class TextFilter < Filter
|
|
5
5
|
attr_reader :text
|
|
6
6
|
|
|
7
|
-
def initialize(
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
# Ensure that this is always a string
|
|
11
|
-
@text = text.respond_to?(:to_str) ? text.to_str : text.to_s
|
|
12
|
-
super(context: context, result: result)
|
|
7
|
+
def initialize(context: {}, result: {})
|
|
8
|
+
super
|
|
13
9
|
end
|
|
14
10
|
|
|
15
11
|
class << self
|
|
16
|
-
def call(
|
|
17
|
-
|
|
12
|
+
def call(text, context: {}, result: {})
|
|
13
|
+
raise TypeError, "text must be a String" unless text.is_a?(String)
|
|
14
|
+
|
|
15
|
+
# Ensure that this is always a string
|
|
16
|
+
text = text.respond_to?(:to_str) ? text.to_str : text.to_s
|
|
17
|
+
new(context: context, result: result).call(text)
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
end
|
data/lib/html_pipeline.rb
CHANGED
|
@@ -153,14 +153,14 @@ class HTMLPipeline
|
|
|
153
153
|
|
|
154
154
|
if @text_filters.any?
|
|
155
155
|
payload = default_payload({
|
|
156
|
-
text_filters: @text_filters.map
|
|
156
|
+
text_filters: @text_filters.map { |f| f.class.name },
|
|
157
157
|
context: context,
|
|
158
158
|
result: result,
|
|
159
159
|
})
|
|
160
160
|
instrument("call_text_filters.html_pipeline", payload) do
|
|
161
161
|
result[:output] =
|
|
162
162
|
@text_filters.inject(text) do |doc, filter|
|
|
163
|
-
perform_filter(filter, doc, context: context, result: result)
|
|
163
|
+
perform_filter(filter, doc, context: (filter.context || {}).merge(context), result: result)
|
|
164
164
|
end
|
|
165
165
|
end
|
|
166
166
|
end
|
|
@@ -171,14 +171,24 @@ class HTMLPipeline
|
|
|
171
171
|
text
|
|
172
172
|
else
|
|
173
173
|
instrument("call_convert_filter.html_pipeline", payload) do
|
|
174
|
-
html = @convert_filter.call(text)
|
|
174
|
+
html = @convert_filter.call(text, context: (@convert_filter.context || {}).merge(context))
|
|
175
175
|
end
|
|
176
176
|
end
|
|
177
177
|
|
|
178
|
-
|
|
178
|
+
rewriter_options = {
|
|
179
|
+
memory: {
|
|
180
|
+
max_allowed_memory_usage: 5242880, # arbitrary limit of 5MB
|
|
181
|
+
},
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
if @node_filters.empty?
|
|
185
|
+
instrument("sanitization.html_pipeline", payload) do
|
|
186
|
+
result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
|
|
187
|
+
end unless @convert_filter.nil? # no html, so no sanitization
|
|
188
|
+
else
|
|
179
189
|
instrument("call_node_filters.html_pipeline", payload) do
|
|
180
|
-
|
|
181
|
-
|
|
190
|
+
@node_filters.each { |filter| filter.context = (filter.context || {}).merge(context) }
|
|
191
|
+
result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters, options: rewriter_options).rewrite(html)
|
|
182
192
|
payload = default_payload({
|
|
183
193
|
node_filters: @node_filters.map { |f| f.class.name },
|
|
184
194
|
context: context,
|
|
@@ -187,10 +197,6 @@ class HTMLPipeline
|
|
|
187
197
|
end
|
|
188
198
|
end
|
|
189
199
|
|
|
190
|
-
instrument("html_pipeline.sanitization", payload) do
|
|
191
|
-
result[:output] = Selma::Rewriter.new(sanitizer: @sanitization_config, handlers: @node_filters).rewrite(html)
|
|
192
|
-
end
|
|
193
|
-
|
|
194
200
|
result = result.merge(@node_filters.collect(&:result).reduce({}, :merge))
|
|
195
201
|
@node_filters.each(&:reset!)
|
|
196
202
|
|
|
@@ -204,7 +210,7 @@ class HTMLPipeline
|
|
|
204
210
|
# Returns the result of the filter.
|
|
205
211
|
def perform_filter(filter, doc, context: {}, result: {})
|
|
206
212
|
payload = default_payload({
|
|
207
|
-
filter: filter.name,
|
|
213
|
+
filter: filter.class.name,
|
|
208
214
|
context: context,
|
|
209
215
|
result: result,
|
|
210
216
|
})
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: html-pipeline
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 3.
|
|
4
|
+
version: 3.2.1
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Garen J. Torikian
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2024-
|
|
11
|
+
date: 2024-07-31 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: selma
|
|
@@ -16,14 +16,14 @@ dependencies:
|
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version: '0.
|
|
19
|
+
version: '0.4'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version: '0.
|
|
26
|
+
version: '0.4'
|
|
27
27
|
force_ruby_platform: false
|
|
28
28
|
- !ruby/object:Gem::Dependency
|
|
29
29
|
name: zeitwerk
|
|
@@ -111,7 +111,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
111
111
|
- !ruby/object:Gem::Version
|
|
112
112
|
version: 3.3.22
|
|
113
113
|
requirements: []
|
|
114
|
-
rubygems_version: 3.
|
|
114
|
+
rubygems_version: 3.4.6
|
|
115
115
|
signing_key:
|
|
116
116
|
specification_version: 4
|
|
117
117
|
summary: Helpers for processing content through a chain of filters
|