thredded-markdown_katex 0.1.2 → 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
  SHA1:
3
- metadata.gz: fcfb6aeece4696f4f76012adaf93f88e8e8839da
4
- data.tar.gz: b2ca950bd98eb68f02159ccb869d3aae0594c333
3
+ metadata.gz: 4049c976b9da68b8a080bcf3ddb6356cb4de8168
4
+ data.tar.gz: 7c3d7083093f31e7a56b26175e429c4d41e65a63
5
5
  SHA512:
6
- metadata.gz: f4f5a99451b15b93cee120050dbfae9b1a0abec0ea3b9484480ef0a4127d19bfea962dd9a3e71ce5ce07d5ce11d7eb0a1684aca7708c3ad392ceabb98cf3cd1f
7
- data.tar.gz: ea2a32af10928ae268c1ef9f17831949d68f7637ade2905acd5d789d9dac44a3103c45082a82543443294d0fe1f1a0f79896a15f6328d82664056f52446d8b94
6
+ metadata.gz: 2a07a5b670d90505c618a973270a0a1ae57c5f35ae468dc129dd2d65cc3a00232927e13041aa28e7f13022c8c5ff54dd3edeacf17caa86507beb7948d3492e88
7
+ data.tar.gz: a4e06c91dad0ba06ff9261dc887ba1dee7ca83ed10d0db2a30db3583a84196597d02b44c5e6370d67fc0e3abe93d6344f9fb80ee812c3ab86d271a70420e59b6
@@ -8,7 +8,7 @@ module Thredded
8
8
  public_task :install
9
9
 
10
10
  def install # rubocop:disable Metrics/MethodLength
11
- %w(application.scss _deps.scss).each do |scss_file|
11
+ %w[application.scss _deps.scss].each do |scss_file|
12
12
  scss_path = File.join('app', 'assets', 'stylesheets', scss_file)
13
13
  next unless File.exist? scss_path
14
14
  append_to_file scss_path, "\n" + '@import "_katex";' + "\n"
@@ -4,6 +4,7 @@ require 'thredded/markdown_katex/version'
4
4
  require 'katex'
5
5
  require 'thredded/markdown_katex/railtie' if defined?(Rails)
6
6
  require 'thredded/markdown_katex/mathml_whitelist'
7
+ require 'thredded/markdown_katex/svg_whitelist'
7
8
  require 'thredded/markdown_katex/email_transformer'
8
9
 
9
10
  module Thredded
@@ -47,16 +48,17 @@ module Thredded
47
48
  def configure_whitelist!
48
49
  whitelist_katex_html!
49
50
  whitelist_mathml!
51
+ whitelist_svg!
50
52
  end
51
53
 
52
54
  def whitelist_katex_html!
53
- whitelist_element! 'span', %w(class style aria-hidden)
55
+ whitelist_element! 'span', %w[class style aria-hidden]
54
56
  Thredded::ContentFormatter.whitelist[:css] ||= {}
55
57
  Thredded::ContentFormatter.whitelist[:css][:properties] ||= []
56
- Thredded::ContentFormatter.whitelist[:css][:properties] += %w(
57
- color width height vertical-align margin-left margin-right font-size
58
- top
59
- )
58
+ Thredded::ContentFormatter.whitelist[:css][:properties] += %w[
59
+ background-color border-color color width min-width height min-height
60
+ vertical-align margin-left margin-right font-size top
61
+ ]
60
62
  end
61
63
 
62
64
  def whitelist_mathml!
@@ -70,6 +72,15 @@ module Thredded
70
72
  end
71
73
  end
72
74
 
75
+ def whitelist_svg!
76
+ attrs = SVGWhitelist::SVG_ATTRIBUTES.map(&:downcase)
77
+ SVGWhitelist::SVG_ELEMENTS.each do |tag|
78
+ whitelist_element! tag, attrs
79
+ end
80
+ Thredded::ContentFormatter.whitelist[:css][:properties] +=
81
+ SVGWhitelist::SVG_ALLOWED_STYLE_PROPERTIES
82
+ end
83
+
73
84
  def whitelist_element!(tag, attributes)
74
85
  whitelist_el = Thredded::ContentFormatter.whitelist[:elements]
75
86
  whitelist_el << tag unless whitelist_el.include?(tag)
@@ -8,35 +8,35 @@ module Thredded
8
8
  # https://www.w3.org/Math/draft-spec/appendixa.html
9
9
 
10
10
  # Attributes common to all MathML elements
11
- COMMON_ATT = %w(id xref class style href).freeze
11
+ COMMON_ATT = %w[id xref class style href].freeze
12
12
  # Attributes common to presentational elements
13
- COMMON_PRES_ATT = %w(mathcolor mathbackground).freeze
13
+ COMMON_PRES_ATT = %w[mathcolor mathbackground].freeze
14
14
  # Attributes common to token elements
15
- TOKEN_ATT = %w(mathvariant mathsize dir).freeze
15
+ TOKEN_ATT = %w[mathvariant mathsize dir].freeze
16
16
  # Attributes common to elements that can be indented
17
- INDENT_ATT = %w(
17
+ INDENT_ATT = %w[
18
18
  indentalign indentshift indenttarget indentalignfirst indentshiftfirst
19
19
  indentalignlast indentshiftlast
20
- ).freeze
20
+ ].freeze
21
21
  # Attributes common to definition elements
22
- DEF_ENC_ATT = %w(definitionURL encoding).freeze
22
+ DEF_ENC_ATT = %w[definitionURL encoding].freeze
23
23
 
24
24
  # All of these elements have MATHML_COMMON_PRES_ATT.
25
25
  PRESENTATION_WHITELIST = {
26
- 'maction' => %w(actiontype selection),
27
- 'menclose' => %w(notation),
28
- 'merror' => %w(),
29
- 'mfenced' => %w(open close separators),
26
+ 'maction' => %w[actiontype selection],
27
+ 'menclose' => %w[notation],
28
+ 'merror' => %w[],
29
+ 'mfenced' => %w[open close separators],
30
30
  'mfrac' =>
31
- %w(bevelled denomalign linethickness numalign),
32
- 'mglyph' => %w(src width height valign alt),
31
+ %w[bevelled denomalign linethickness numalign],
32
+ 'mglyph' => %w[src width height valign alt],
33
33
  'mpadded' =>
34
- %w(height depth width lspace voffset),
35
- 'mphantom' => %w(),
36
- 'mroot' => %w(),
37
- 'mrow' => %w(dir),
38
- 'msqrt' => %w(),
39
- 'mstyle' => INDENT_ATT + %w(
34
+ %w[height depth width lspace voffset],
35
+ 'mphantom' => %w[],
36
+ 'mroot' => %w[],
37
+ 'mrow' => %w[dir],
38
+ 'msqrt' => %w[],
39
+ 'mstyle' => INDENT_ATT + %w[
40
40
  scriptlevel displaystyle scriptsizemultiplier scriptminsize
41
41
  infixlinebreakstyle decimalpoint accent accentunder align
42
42
  alignmentscope bevelled charalign charspacing close columnalign
@@ -50,53 +50,53 @@ module Thredded
50
50
  rowalign rowlines rowspacing rowspan rquote rspace selection
51
51
  separator separators shift side stackalign stretchy
52
52
  subscriptshift superscriptshift symmetric valign width
53
- ),
53
+ ],
54
54
  'mi' => TOKEN_ATT,
55
55
  'mn' => TOKEN_ATT,
56
56
  'mo' => TOKEN_ATT + INDENT_ATT +
57
- %w(form fence separator lspace rspace stretchy symmetric minsize
57
+ %w[form fence separator lspace rspace stretchy symmetric minsize
58
58
  maxsize largeop movablelimits accent linebreak lineleading
59
- linebreakstyle linebreakmultchar),
60
- 'ms' => TOKEN_ATT + %w(lquote rquote),
59
+ linebreakstyle linebreakmultchar],
60
+ 'ms' => TOKEN_ATT + %w[lquote rquote],
61
61
  'mspace' => TOKEN_ATT + INDENT_ATT +
62
- %w(width height depth linebreak),
62
+ %w[width height depth linebreak],
63
63
  'mtext' => TOKEN_ATT,
64
- 'maligngroup' => %w(groupalign),
65
- 'malignmark' => %w(edge),
66
- 'mlabeledtr' => %w(rowalign columnalign groupalign),
67
- 'mtable' => %w(
64
+ 'maligngroup' => %w[groupalign],
65
+ 'malignmark' => %w[edge],
66
+ 'mlabeledtr' => %w[rowalign columnalign groupalign],
67
+ 'mtable' => %w[
68
68
  align rowalign columnalign groupalign alignmentscope columnwidth
69
69
  width rowspacing columnspacing rowlines columnlines frame
70
70
  framespacing equalrows equalcolumns displaystyle side
71
71
  minlabelspacing
72
- ),
73
- 'mtd' => %w(rowspan columnspan rowalign columnalign groupalign),
74
- 'mtr' => %w(rowalign columnalign groupalign),
75
- 'mmultiscripts' => %w(superscriptshift subscriptshift),
76
- 'msub' => %w(subscriptshift),
77
- 'msup' => %w(superscriptshift),
78
- 'msubsup' => %w(superscriptshift subscriptshift),
79
- 'munder' => %w(accentunder align),
80
- 'mover' => %w(accent align),
81
- 'munderover' => %w(accent accentunder align),
82
- 'mlongdiv' => %w(position shift longdivstyle),
83
- 'mscarries' => %w(position location crossout scriptsizemultiplier),
84
- 'mscarry' => %w(location crossout),
85
- 'msgroup' => %w(position shift),
72
+ ],
73
+ 'mtd' => %w[rowspan columnspan rowalign columnalign groupalign],
74
+ 'mtr' => %w[rowalign columnalign groupalign],
75
+ 'mmultiscripts' => %w[superscriptshift subscriptshift],
76
+ 'msub' => %w[subscriptshift],
77
+ 'msup' => %w[superscriptshift],
78
+ 'msubsup' => %w[superscriptshift subscriptshift],
79
+ 'munder' => %w[accentunder align],
80
+ 'mover' => %w[accent align],
81
+ 'munderover' => %w[accent accentunder align],
82
+ 'mlongdiv' => %w[position shift longdivstyle],
83
+ 'mscarries' => %w[position location crossout scriptsizemultiplier],
84
+ 'mscarry' => %w[location crossout],
85
+ 'msgroup' => %w[position shift],
86
86
  'msline' =>
87
- %w(position length leftoverhang rightoverhang mslinethickness),
88
- 'none' => %w(),
89
- 'mprescripts' => %w(),
90
- 'msrow' => %w(position),
91
- 'mstack' => %w(align stackalign charalign charspacing)
87
+ %w[position length leftoverhang rightoverhang mslinethickness],
88
+ 'none' => %w[],
89
+ 'mprescripts' => %w[],
90
+ 'msrow' => %w[position],
91
+ 'mstack' => %w[align stackalign charalign charspacing]
92
92
  }.freeze
93
93
 
94
94
  OTHER_WHITELIST = {
95
- 'math' => %w(xmlns display maxwidth overflow altimg altimg-width
96
- altimg-height altimg-valign alttext cdgroup),
95
+ 'math' => %w[xmlns display maxwidth overflow altimg altimg-width
96
+ altimg-height altimg-valign alttext cdgroup],
97
97
  'semantics' => DEF_ENC_ATT,
98
- 'annotation' => %w(cd name src) + DEF_ENC_ATT,
99
- 'annotation-xml' => %w(cd name src) + DEF_ENC_ATT
98
+ 'annotation' => %w[cd name src] + DEF_ENC_ATT,
99
+ 'annotation-xml' => %w[cd name src] + DEF_ENC_ATT
100
100
  }.freeze
101
101
  end
102
102
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Thredded
4
+ module MarkdownKatex
5
+ module SVGWhitelist
6
+ # All the non-script SVG elements and attributes.
7
+
8
+ SVG_ELEMENTS = %w[
9
+ a animate animateColor animateMotion animateTransform
10
+ circle clipPath defs desc ellipse feGaussianBlur filter font-face
11
+ font-face-name font-face-src foreignObject
12
+ g glyph hkern linearGradient line marker mask metadata missing-glyph
13
+ mpath path polygon polyline radialGradient rect set stop svg switch
14
+ text textPath title tspan use
15
+ ].freeze
16
+
17
+ SVG_ATTRIBUTES = %w[
18
+ accent-height accumulate additive alphabetic
19
+ arabic-form ascent attributeName attributeType baseProfile bbox begin
20
+ by calcMode cap-height class clip-path clip-rule color
21
+ color-interpolation-filters color-rendering content cx cy d dx
22
+ dy descent display dur end fill fill-opacity fill-rule
23
+ filterRes filterUnits font-family
24
+ font-size font-stretch font-style font-variant font-weight from fx fy g1
25
+ g2 glyph-name gradientUnits hanging height horiz-adv-x horiz-origin-x id
26
+ ideographic k keyPoints keySplines keyTimes lang marker-end
27
+ marker-mid marker-start markerHeight markerUnits markerWidth
28
+ maskContentUnits maskUnits mathematical max method min name offset
29
+ opacity orient origin overline-position overline-thickness panose-1 path
30
+ pathLength patternContentUnits patternTransform patternUnits points
31
+ preserveAspectRatio primitiveUnits r refX refY repeatCount repeatDur
32
+ requiredExtensions requiredFeatures restart rotate rx ry slope spacing
33
+ startOffset stdDeviation stemh
34
+ stemv stop-color stop-opacity strikethrough-position
35
+ strikethrough-thickness stroke stroke-dasharray stroke-dashoffset
36
+ stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity
37
+ stroke-width systemLanguage target text-anchor to transform type u1
38
+ u2 underline-position underline-thickness unicode unicode-range
39
+ units-per-em values version viewBox visibility width widths x
40
+ x-height x1 x2 xlink:actuate xlink:arcrole xlink:href xlink:role
41
+ xlink:show xlink:title xlink:type xml:base xml:lang xml:space xmlns
42
+ xmlns:xlink y y1 y2 zoomAndPan
43
+ ].freeze
44
+
45
+ SVG_ALLOWED_STYLE_PROPERTIES = %w[
46
+ fill fill-opacity fill-rule stroke
47
+ stroke-width stroke-linecap stroke-linejoin stroke-opacity
48
+ ].freeze
49
+
50
+ # TODO: The whitelists below are not applied yet.
51
+
52
+ SVG_ATTR_VAL_ALLOWS_REF = %w[
53
+ clip-path color-profile cursor fill
54
+ filter marker marker-start marker-mid marker-end mask stroke
55
+ ].freeze
56
+
57
+ SVG_ALLOW_LOCAL_HREF = %w[
58
+ altGlyph animate animateColor animateMotion
59
+ animateTransform cursor feImage filter linearGradient pattern
60
+ radialGradient textpath tref set use
61
+ ].freeze
62
+ end
63
+ end
64
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Thredded
4
4
  module MarkdownKatex
5
- VERSION = '0.1.2'
5
+ VERSION = '0.2.0'
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: thredded-markdown_katex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gleb Mazovetskiy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-03-26 00:00:00.000000000 Z
11
+ date: 2017-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: katex
@@ -124,6 +124,7 @@ files:
124
124
  - lib/thredded/markdown_katex/kramdown/katex_converter.rb
125
125
  - lib/thredded/markdown_katex/mathml_whitelist.rb
126
126
  - lib/thredded/markdown_katex/railtie.rb
127
+ - lib/thredded/markdown_katex/svg_whitelist.rb
127
128
  - lib/thredded/markdown_katex/version.rb
128
129
  homepage: https://github.com/thredded/thredded-markdown_katex
129
130
  licenses:
@@ -145,7 +146,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
145
146
  version: '0'
146
147
  requirements: []
147
148
  rubyforge_project:
148
- rubygems_version: 2.6.11
149
+ rubygems_version: 2.6.12
149
150
  signing_key:
150
151
  specification_version: 4
151
152
  summary: Adds TeX math support to Thredded markup via KaTeX.