canvas_link_migrator 1.0.4 → 1.0.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c3b1e71c22b8899f6fe7b5986ee5569fbb9525c0d4cb9e6eb25c9f6ef1804435
4
- data.tar.gz: ba9a4fc3a6ce17be40afab0814818fa7b62603e2aee6d6e5e784110c3fb975c0
3
+ metadata.gz: bb741be0946fbad43cb23efadcbeb87d1338485b475cc2c3e699cfef07599263
4
+ data.tar.gz: f98e804aa56242fe5f08e123166f776b0f8f911b1590f541818ae6b70675395e
5
5
  SHA512:
6
- metadata.gz: 191de3ba56873baa45d3f922f7276edcdc0f84eda77fc6627cb9d55e4058b00ec792785b08ad4ef666dd4c0efe95b9cdde289320293466dc598d9a703c3532a8
7
- data.tar.gz: 4462eb3f2b424ac381ba35a0f9369c2a671d47efdcb7ac9698ebfeeedccaed397e0736f4d321ba366d9620f7734a9aa69621aba128c47a5a317c6559476ae86d
6
+ metadata.gz: 3d88c62ed1c8db1c690599ed7f5640a5b516a701c1ee8cd18765a80f1860db104107c8b2135357d5f205a5d176e95fedd3090a9c0dc9c84641bf2f6163d356f2
7
+ data.tar.gz: 1a9439977136930dfd3b6ea3fdff6d767c772c3ea9107348f4ba51253b1a04710885b141dbb1764cca5c6985213a1131c42bb1bad8676227d9c04a0ef00423fa
@@ -210,7 +210,9 @@ module CanvasLinkMigrator
210
210
  migration_id: $1,
211
211
  rest: $2,
212
212
  in_media_iframe: attr == "src" && ["iframe", "source"].include?(node.name) && node["data-media-id"],
213
- media_attachment: media_attachment)
213
+ media_attachment: media_attachment,
214
+ target_blank: node['target'] == "_blank" && node.name == "a" && attr == "href"
215
+ )
214
216
  elsif url =~ %r{(?:\$CANVAS_OBJECT_REFERENCE\$|\$WIKI_REFERENCE\$)/([^/]*)/([^?]*)(\?.*)?}
215
217
  if KNOWN_REFERENCE_TYPES.include?($1)
216
218
  unresolved(:object, type: $1, migration_id: $2, query: $3)
@@ -108,6 +108,8 @@ module CanvasLinkMigrator
108
108
  when :file
109
109
  rel_path = link[:rel_path]
110
110
  new_url = resolve_relative_file_url(rel_path)
111
+ # leave user urls alone
112
+ new_url ||= rel_path if is_relative_user_url(rel_path)
111
113
  unless new_url
112
114
  new_url = missing_relative_file_url(rel_path)
113
115
  link[:missing_url] = new_url
@@ -116,13 +118,14 @@ module CanvasLinkMigrator
116
118
  when :file_ref
117
119
  file_id = @migration_id_converter.convert_attachment_migration_id(link[:migration_id])
118
120
  if file_id
119
- rest = link[:rest].presence || "/preview"
121
+ rest = link[:rest].presence
122
+ rest ||= "/preview" unless link[:target_blank]
120
123
 
121
124
  # Icon Maker files should not have the course
122
125
  # context prepended to the URL. This prevents
123
126
  # redirects to non cross-origin friendly urls
124
127
  # during a file fetch
125
- if rest.include?("icon_maker_icon=1")
128
+ if rest&.include?("icon_maker_icon=1")
126
129
  link[:new_value] = "/files/#{file_id}#{rest}"
127
130
  elsif link[:in_media_iframe] && link[:media_attachment]
128
131
  link[:new_value] = "/media_attachments_iframe/#{file_id}#{rest}"
@@ -254,5 +257,9 @@ module CanvasLinkMigrator
254
257
  nil
255
258
  end
256
259
  end
260
+
261
+ def is_relative_user_url(rel_path)
262
+ rel_path.start_with?("/users/")
263
+ end
257
264
  end
258
265
  end
@@ -1,3 +1,3 @@
1
1
  module CanvasLinkMigrator
2
- VERSION = "0.0.1"
2
+ VERSION = "1.0.6"
3
3
  end
@@ -86,6 +86,16 @@ describe CanvasLinkMigrator::ImportedHtmlConverter do
86
86
  expect(@converter.convert_exported_html(test_string)).to eq([%{<p>This is an image: <br><img src="#{@path}files/6/preview" alt=":("></p>}, nil])
87
87
  end
88
88
 
89
+ it "leaves relative user attachments alone" do
90
+ test_string = %{<p> This is an image: <img src="/users/1/files/1/preview?verifier=someVerifier" alt="some_image"></p>}
91
+ expect(@converter.convert_exported_html(test_string)).to eq([test_string, nil])
92
+ end
93
+
94
+ it "leaves absolute user attachments alone" do
95
+ test_string = %{<p> This is an image: <img src="http://mycanvas.com/users/1/files/1/preview?verifier=someVerifier" alt="some_image"></p>}
96
+ expect(@converter.convert_exported_html(test_string)).to eq([test_string, nil])
97
+ end
98
+
89
99
  it "finds an attachment by path" do
90
100
  test_string = %{<p>This is an image: <br /><img src="%24IMS_CC_FILEBASE%24/test.png" alt=":(" /></p>}
91
101
 
@@ -29,6 +29,12 @@ describe CanvasLinkMigrator::LinkParser do
29
29
  end
30
30
 
31
31
  describe "convert_link" do
32
+ it "marks target=_blank anchor tags" do
33
+ doc = Nokogiri::HTML5.fragment("<a target=\"_blank\"></a>")
34
+ parsed = parser.parse_url("$CANVAS_COURSE_REFERENCE$/file_ref/whatevs", doc.at_css('a'), "href")
35
+ expect(parsed[:target_blank]).to be true
36
+ end
37
+
32
38
  it "converts inner html of anchor tags when appropriate" do
33
39
  doc = Nokogiri::HTML5.fragment("<a href=\"$WIKI_REFERENCE$/pages/1\">$WIKI_REFERENCE$/pages/1</a>")
34
40
  parser.convert_link(doc.at_css('a'), "href","wiki_page", "migrationid", "")
@@ -51,6 +51,12 @@ describe CanvasLinkMigrator::LinkResolver do
51
51
  expect(link[:new_value]).to eq("/courses/2/files/6/preview")
52
52
  end
53
53
 
54
+ it "does not suffix /preview to target blank links" do
55
+ link = { link_type: :file_ref, target_blank: true, migration_id: "F" }
56
+ resolver.resolve_link!(link)
57
+ expect(link[:new_value]).to eq("/courses/2/files/6")
58
+ end
59
+
54
60
  it "converts attachment urls" do
55
61
  link = { link_type: :object, type: "attachments", migration_id: "E", query: "?foo=bar" }
56
62
  resolver.resolve_link!(link)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: canvas_link_migrator
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.4
4
+ version: 1.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Mysti Lilla
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2024-02-01 00:00:00.000000000 Z
14
+ date: 2024-02-27 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: activesupport
@@ -152,7 +152,8 @@ files:
152
152
  - test.sh
153
153
  homepage:
154
154
  licenses: []
155
- metadata: {}
155
+ metadata:
156
+ source_code_uri: https://github.com/instructure/canvas_link_migrator
156
157
  post_install_message:
157
158
  rdoc_options: []
158
159
  require_paths: