qti 2.7.1 → 2.8.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: 01dd841b1a9215aeaddf4e9211f7e2327544067afa5fb2e24a58186f7c035115
4
- data.tar.gz: b4d688f36fb284da0ba8168463b667eb59bf612b2750ef50650230dcc129e2bb
3
+ metadata.gz: e121df522dfdc1e21c2944bfa04334fdb4226c8a288356ff4ad1ef84e7354a86
4
+ data.tar.gz: 01cea5632a13762bc2929b4f61cafbc47893c38fda88c1d14a5d51a5eb1b73aa
5
5
  SHA512:
6
- metadata.gz: 301bfa283539d68e2feca734a9aa97046c2604c5eedc8f656e217cdbd90949d3ddf88dcdda39ecbb1c19dde68d0b51c5f582aa9b33c3f79995109e921126dbe2
7
- data.tar.gz: 880e9ce56fe47276d833ab1b19d1f6b30646cf5a641ddce0f7e6468bb9922b05ccfd5ff140b413f7e8698c532798ade8fa50262a37e93231cfef5af5b3417ae8
6
+ metadata.gz: 43eb6eee2a5e6073750023429875e267565ab4ff2a23a6bcf292231ccf95f5a09da886208d12ad1fc4db7c339616801e908b0c0a4e3aee0c72f4e651065eaec3
7
+ data.tar.gz: cfea73f7c7d3a86f41de834205c634a5f0789ea57519eb180491a8411c55e292c4648673ca76d5aa1b04653ee7e704de50a422b3399780f3f428301a897d2968
data/lib/qti/sanitizer.rb CHANGED
@@ -37,6 +37,18 @@ module Qti
37
37
 
38
38
  private
39
39
 
40
+ def convert_canvas_math_images(env)
41
+ node = env[:node]
42
+ node_name = env[:node_name]
43
+ latex = node['data-equation-content']
44
+
45
+ return if env[:is_whitelisted] || !env[:node].element?
46
+ return unless node_name == 'img'
47
+ return unless latex
48
+
49
+ node.replace("\\(#{latex}\\)")
50
+ end
51
+
40
52
  def object_tag_transformer
41
53
  lambda do |env|
42
54
  return unless env[:node_name] == 'object'
@@ -73,6 +85,7 @@ module Qti
73
85
  transformers << src_transformers
74
86
  transformers << object_tag_transformer if import_objects
75
87
  transformers << remap_unknown_tags_transformer
88
+ transformers << method(:convert_canvas_math_images) if Qti.configuration.extract_latex_from_image_tags
76
89
  Sanitize::Config::RELAXED.merge transformers: transformers
77
90
  end
78
91
 
data/lib/qti/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Qti
2
- VERSION = '2.7.1'.freeze
2
+ VERSION = '2.8.0'.freeze
3
3
  end
data/lib/qti.rb CHANGED
@@ -4,6 +4,7 @@ require 'active_support/core_ext/string'
4
4
  require 'active_support/core_ext/hash/except'
5
5
  require 'active_support/core_ext/module/delegation'
6
6
  require 'dry-struct'
7
+ require 'ostruct'
7
8
  require 'find'
8
9
  require 'forwardable'
9
10
  require 'mathml2latex'
@@ -68,6 +69,14 @@ module Qti
68
69
  @import.create_question_group(question_group_ref)
69
70
  end
70
71
  end
72
+
73
+ def self.configuration
74
+ @configuration ||= OpenStruct.new
75
+ end
76
+
77
+ def self.configure
78
+ yield(configuration)
79
+ end
71
80
  end
72
81
 
73
82
  # The load order of all of these is important.
@@ -5,7 +5,7 @@
5
5
  <item title="Grading - specific - 3 pt score" ident="QUE_1003">
6
6
  <presentation>
7
7
  <material>
8
- <mattext texttype="text/html"><![CDATA[If I get a 3, I must have done something wrong. <img align="bottom" alt="image.png" src="org0/images/image.png" border="0"/>]]></mattext>
8
+ <mattext texttype="text/html"><![CDATA[If I get a 3, I must have done something wrong. <img data-equation-content="sample equation" script="alert('bad')" align="bottom" alt="image.png" src="org0/images/image.png" border="0"/> <img script="alert('bad')" align="bottom" alt="image.png" src="org0/images/image.png" border="0"/>]]></mattext>
9
9
  </material>
10
10
  <response_lid ident="QUE_1004_RL" rcardinality="Single" rtiming="No">
11
11
  <render_choice shuffle="Yes">
@@ -29,6 +29,18 @@ describe Qti::V1::Models::AssessmentItem do
29
29
  it 'has sanitized item_body' do
30
30
  expect(loaded_class.item_body).to include '<img'
31
31
  expect(loaded_class.item_body).to include 'If I get a 3, I must have done something wrong.'
32
+ expect(loaded_class.item_body).not_to include 'script="alert(\'bad\')"'
33
+ end
34
+
35
+ it 'transforms canvas math content when conversion is enabled' do
36
+ expect(loaded_class.item_body).to include '\(sample equation\)'
37
+ end
38
+
39
+ it 'does not transform math content when conversion is Disabled' do
40
+ Qti.configure do |config|
41
+ config.extract_latex_from_image_tags = false
42
+ end
43
+ expect(loaded_class.item_body).not_to include '"sample equation"'
32
44
  end
33
45
 
34
46
  describe '#points_possible' do
data/spec/spec_helper.rb CHANGED
@@ -16,6 +16,10 @@ end
16
16
  $LOAD_PATH.unshift File.expand_path('../lib', __dir__)
17
17
  require 'qti'
18
18
 
19
+ Qti.configure do |config|
20
+ config.extract_latex_from_image_tags = true
21
+ end
22
+
19
23
  Dir['./spec/support/**/*.rb'].sort.each { |f| require f }
20
24
 
21
25
  RSpec.configure do |config|
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: qti
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.7.1
4
+ version: 2.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Hannah Bottalla
8
8
  - Robinson Rodríguez
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2021-12-01 00:00:00.000000000 Z
12
+ date: 2022-01-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: actionview
@@ -275,7 +275,7 @@ dependencies:
275
275
  - - "~>"
276
276
  - !ruby/object:Gem::Version
277
277
  version: '1.4'
278
- description:
278
+ description:
279
279
  email:
280
280
  - hannah@instructure.com
281
281
  - rrodriguez-bd@instructure.com
@@ -684,7 +684,7 @@ homepage: https://github.com/instructure/qti
684
684
  licenses:
685
685
  - MIT
686
686
  metadata: {}
687
- post_install_message:
687
+ post_install_message:
688
688
  rdoc_options: []
689
689
  require_paths:
690
690
  - lib
@@ -699,8 +699,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
699
699
  - !ruby/object:Gem::Version
700
700
  version: '0'
701
701
  requirements: []
702
- rubygems_version: 3.1.4
703
- signing_key:
702
+ rubygems_version: 3.0.3
703
+ signing_key:
704
704
  specification_version: 4
705
705
  summary: QTI 1.2 and 2.1 import and export models
706
706
  test_files: