VertRule commited on
Commit
2dfe2c3
·
verified ·
1 Parent(s): edadcc5

Fix wrapper-blocked navigation: artifact links resolve to static-host origin and open in new tab

Browse files
Files changed (1) hide show
  1. index.html +36 -11
index.html CHANGED
@@ -75,6 +75,21 @@
75
  (function () {
76
  var listEl = document.getElementById("card-list");
77
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  function escapeHtml(s) {
79
  return String(s).replace(/[&<>"']/g, function (c) {
80
  return {
@@ -92,17 +107,23 @@
92
  return d.slice(0, 12) + "&hellip;";
93
  }
94
 
 
 
95
  function renderCard(item) {
96
- var pdfHref = "./" + item.pdf;
97
  var explorerLink = item.explorer
98
- ? '<a class="meta-link" href="./' +
99
- escapeHtml(item.explorer) +
100
- '">Explorer</a>'
 
 
101
  : "";
102
  var dataLink = item.data
103
- ? '<a class="meta-link" href="./' +
104
- escapeHtml(item.data) +
105
- '">Data (JSON)</a>'
 
 
106
  : "";
107
 
108
  var statusClass =
@@ -113,8 +134,10 @@
113
  return (
114
  '<article class="card">' +
115
  '<a class="card-link" href="' +
116
- pdfHref +
117
- '">' +
 
 
118
  '<div class="card-head">' +
119
  "<div>" +
120
  '<h2 class="card-title">' +
@@ -136,8 +159,10 @@
136
  "</a>" +
137
  '<div class="card-meta">' +
138
  '<a class="meta-link" href="' +
139
- pdfHref +
140
- '">PDF</a>' +
 
 
141
  explorerLink +
142
  dataLink +
143
  '<span class="digest" title="' +
 
75
  (function () {
76
  var listEl = document.getElementById("card-list");
77
 
78
+ // When the catalog is viewed inside the Hugging Face wrapper iframe,
79
+ // relative artifact links navigate the wrapper context and are
80
+ // blocked by Chrome's frame-navigation policy. Build artifact hrefs
81
+ // against the static-host origin and open in a new top-level tab so
82
+ // PDFs / explorer / JSON resolve as a normal browser navigation.
83
+ var STATIC_ORIGIN = window.location.hostname.endsWith(
84
+ ".static.hf.space",
85
+ )
86
+ ? window.location.origin
87
+ : "https://vertrule-org-research.static.hf.space";
88
+
89
+ function assetHref(relPath) {
90
+ return STATIC_ORIGIN + "/" + String(relPath).replace(/^\.?\//, "");
91
+ }
92
+
93
  function escapeHtml(s) {
94
  return String(s).replace(/[&<>"']/g, function (c) {
95
  return {
 
107
  return d.slice(0, 12) + "&hellip;";
108
  }
109
 
110
+ var LINK_ATTRS = ' target="_blank" rel="noopener noreferrer"';
111
+
112
  function renderCard(item) {
113
+ var pdfHref = assetHref(item.pdf);
114
  var explorerLink = item.explorer
115
+ ? '<a class="meta-link" href="' +
116
+ escapeHtml(assetHref(item.explorer)) +
117
+ '"' +
118
+ LINK_ATTRS +
119
+ ">Explorer</a>"
120
  : "";
121
  var dataLink = item.data
122
+ ? '<a class="meta-link" href="' +
123
+ escapeHtml(assetHref(item.data)) +
124
+ '"' +
125
+ LINK_ATTRS +
126
+ ">Data (JSON)</a>"
127
  : "";
128
 
129
  var statusClass =
 
134
  return (
135
  '<article class="card">' +
136
  '<a class="card-link" href="' +
137
+ escapeHtml(pdfHref) +
138
+ '"' +
139
+ LINK_ATTRS +
140
+ ">" +
141
  '<div class="card-head">' +
142
  "<div>" +
143
  '<h2 class="card-title">' +
 
159
  "</a>" +
160
  '<div class="card-meta">' +
161
  '<a class="meta-link" href="' +
162
+ escapeHtml(pdfHref) +
163
+ '"' +
164
+ LINK_ATTRS +
165
+ ">PDF</a>" +
166
  explorerLink +
167
  dataLink +
168
  '<span class="digest" title="' +