Commit 02175fb3 authored by Romain Courteaud's avatar Romain Courteaud

Use the base tag to build the dependency url

parent c570d910
......@@ -1495,10 +1495,12 @@
title: "",
interface_list: [],
required_css_list: [],
required_js_list: []
required_js_list: [],
base_url: url
},
i,
element;
element,
base_found = false;
if (!url || !isAbsoluteOrDataURL.test(url)) {
throw new Error("The url should be absolute: " + url);
......@@ -1515,19 +1517,30 @@
// element.href returns absolute URL in firefox but "" in chrome;
if (element.rel === "stylesheet") {
settings.required_css_list.push(
renderJS.getAbsoluteURL(element.getAttribute("href"), url)
renderJS.getAbsoluteURL(element.getAttribute("href"),
settings.base_url)
);
} else if (element.nodeName === "SCRIPT" &&
(element.type === "text/javascript" ||
!element.type)) {
settings.required_js_list.push(
renderJS.getAbsoluteURL(element.getAttribute("src"), url)
renderJS.getAbsoluteURL(element.getAttribute("src"),
settings.base_url)
);
} else if (element.rel ===
"http://www.renderjs.org/rel/interface") {
settings.interface_list.push(
renderJS.getAbsoluteURL(element.getAttribute("href"), url)
renderJS.getAbsoluteURL(element.getAttribute("href"),
settings.base_url)
);
} else if ((element.nodeName === "BASE") && !base_found) {
settings.base_url = renderJS.getAbsoluteURL(
element.getAttribute("href"),
settings.base_url
);
// Only use the first base element found
// https://developer.mozilla.org/en-US/docs/Web/HTML/Element/base#Usage_notes
base_found = true;
}
}
}
......
......@@ -86,6 +86,7 @@
// Check that parseGadgetHTMLDocument returns the default value
// if the string is not a valid xml
deepEqual(parseGadgetHTML("", "http://example.org"), {
base_url: "http://example.org",
title: "",
interface_list: [],
required_css_list: [],
......@@ -118,6 +119,7 @@
document.implementation.createHTMLDocument(""),
"http://example.org"
), {
base_url: "http://example.org",
title: "",
interface_list: [],
required_css_list: [],
......@@ -162,6 +164,31 @@
// equal(settings.title, '', 'Title not found');
// });
test('Extract base url', function () {
// Check that parseGadgetHTMLDocument correctly extract the title
var settings,
html = "<html>" +
"<head>" +
"<base href='./bar/bar2/'></base>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org");
equal(settings.base_url, 'http://example.org/bar/bar2/', 'Base extracted');
});
test('Extract only one base url', function () {
// Check that parseGadgetHTMLDocument correctly extract the first title
var settings,
html = "<html>" +
"<head>" +
"<base href='./bar/bar2/'></base>" +
"<base href='./bar3/bar4/'></base>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org");
equal(settings.base_url, 'http://example.org/bar/bar2/', 'Base extracted');
});
// XXX innerHTML is not extracted anymore
// test('Extract body', function () {
// // Check that parseGadgetHTML correctly extract the body
......@@ -215,6 +242,38 @@
"CSS extracted");
});
test('Extract CSS after base tag', function () {
// Check that parseGadgetHTMLDocument correctly extract the CSS
var settings,
html = "<html>" +
"<head>" +
"<base href='./bar/bar2/'></base>" +
"<link rel='stylesheet' href='../lib/qunit/qunit.css' " +
"type='text/css'/>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org/foo/");
deepEqual(settings.required_css_list,
['http://example.org/foo/bar/lib/qunit/qunit.css'],
"CSS extracted");
});
test('Extract CSS before base tag', function () {
// Check that parseGadgetHTMLDocument correctly extract the CSS
var settings,
html = "<html>" +
"<head>" +
"<link rel='stylesheet' href='../lib/qunit/qunit.css' " +
"<base href='./bar/bar2/'></base>" +
"type='text/css'/>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org/foo/");
deepEqual(settings.required_css_list,
['http://example.org/lib/qunit/qunit.css'],
"CSS extracted");
});
test('Extract CSS order', function () {
// Check that parseGadgetHTMLDocument correctly keep CSS order
var settings,
......@@ -261,6 +320,38 @@
"interface extracted");
});
test('Extract interface after base tag', function () {
// Check that parseGadgetHTMLDocument correctly extract the interface
var settings,
html = "<html>" +
"<head>" +
"<base href='./bar/bar2/'></base>" +
"<link rel='http://www.renderjs.org/rel/interface'" +
" href='./interface/renderable'/>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org/foo/");
deepEqual(settings.interface_list,
['http://example.org/foo/bar/bar2/interface/renderable'],
"interface extracted");
});
test('Extract interface before base tag', function () {
// Check that parseGadgetHTMLDocument correctly extract the interface
var settings,
html = "<html>" +
"<head>" +
"<link rel='http://www.renderjs.org/rel/interface'" +
" href='./interface/renderable'/>" +
"<base href='./bar/bar2/'></base>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org/foo/");
deepEqual(settings.interface_list,
['http://example.org/foo/interface/renderable'],
"interface extracted");
});
test('Extract interface order', function () {
// Check that parseGadgetHTMLDocument correctly keep interface order
var settings,
......@@ -307,6 +398,38 @@
"JS extracted");
});
test('Extract JS after base tag', function () {
// Check that parseGadgetHTMLDocument correctly extract the JS
var settings,
html = "<html>" +
"<head>" +
"<base href='./bar/bar2/'></base>" +
"<script src='../lib/qunit/qunit.js' " +
"type='text/javascript'></script>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org/foo/");
deepEqual(settings.required_js_list,
['http://example.org/foo/bar/lib/qunit/qunit.js'],
"JS extracted");
});
test('Extract JS before base tag', function () {
// Check that parseGadgetHTMLDocument correctly extract the JS
var settings,
html = "<html>" +
"<head>" +
"<script src='../lib/qunit/qunit.js' " +
"type='text/javascript'></script>" +
"<base href='./bar/bar2/'></base>" +
"</head></html>";
settings = parseGadgetHTML(html, "http://example.org/foo/");
deepEqual(settings.required_js_list,
['http://example.org/lib/qunit/qunit.js'],
"JS extracted");
});
test('Extract JS order', function () {
// Check that parseGadgetHTMLDocument correctly keep JS order
var settings,
......@@ -345,6 +468,7 @@
'<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">' +
'</head><body><p>Non valid XML</p></body></html>',
'http://example.org/foo/'), {
base_url: "http://example.org/foo/",
title: "Test non valid XML",
interface_list: [],
required_css_list: [],
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment