mirror of
https://github.com/silverstripe/silverstripe-framework
synced 2024-10-22 14:05:37 +02:00
Allow scheme-relative URLs in requirements
The Requirements class currently treats only absolute URLs as URLs, and tries to interpret anything else as a filesystem path. This prevents using scheme-relative URLs for requirements. Example: <% require javascript(//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js) %> This forces the unfortunate choice of not using a CDN for common scripts, always using an https absolute URL, or accepting that some browsers will throw a security warning when viewing the site in https. This change allows scheme-relative URLs & updates RequirementsTest.
This commit is contained in:
parent
9ebac90864
commit
3e0782267c
@ -18,8 +18,10 @@ class RequirementsTest extends SapphireTest {
|
|||||||
|
|
||||||
$backend->javascript('http://www.mydomain.com/test.js');
|
$backend->javascript('http://www.mydomain.com/test.js');
|
||||||
$backend->javascript('https://www.mysecuredomain.com/test.js');
|
$backend->javascript('https://www.mysecuredomain.com/test.js');
|
||||||
|
$backend->javascript('//scheme-relative.example.com/test.js');
|
||||||
$backend->css('http://www.mydomain.com/test.css');
|
$backend->css('http://www.mydomain.com/test.css');
|
||||||
$backend->css('https://www.mysecuredomain.com/test.css');
|
$backend->css('https://www.mysecuredomain.com/test.css');
|
||||||
|
$backend->css('//scheme-relative.example.com/test.css');
|
||||||
|
|
||||||
$html = $backend->includeInHTML(false, self::$html_template);
|
$html = $backend->includeInHTML(false, self::$html_template);
|
||||||
|
|
||||||
@ -31,6 +33,10 @@ class RequirementsTest extends SapphireTest {
|
|||||||
(strpos($html, 'https://www.mysecuredomain.com/test.js') !== false),
|
(strpos($html, 'https://www.mysecuredomain.com/test.js') !== false),
|
||||||
'Load external secure javascript URL'
|
'Load external secure javascript URL'
|
||||||
);
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
(strpos($html, '//scheme-relative.example.com/test.js') !== false),
|
||||||
|
'Load external scheme-relative javascript URL'
|
||||||
|
);
|
||||||
$this->assertTrue(
|
$this->assertTrue(
|
||||||
(strpos($html, 'http://www.mydomain.com/test.css') !== false),
|
(strpos($html, 'http://www.mydomain.com/test.css') !== false),
|
||||||
'Load external CSS URL'
|
'Load external CSS URL'
|
||||||
@ -39,6 +45,10 @@ class RequirementsTest extends SapphireTest {
|
|||||||
(strpos($html, 'https://www.mysecuredomain.com/test.css') !== false),
|
(strpos($html, 'https://www.mysecuredomain.com/test.css') !== false),
|
||||||
'Load external secure CSS URL'
|
'Load external secure CSS URL'
|
||||||
);
|
);
|
||||||
|
$this->assertTrue(
|
||||||
|
(strpos($html, '//scheme-relative.example.com/test.css') !== false),
|
||||||
|
'Load scheme-relative CSS URL'
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected function setupCombinedRequirements($backend) {
|
protected function setupCombinedRequirements($backend) {
|
||||||
|
@ -784,7 +784,7 @@ class Requirements_Backend {
|
|||||||
* @return string|boolean
|
* @return string|boolean
|
||||||
*/
|
*/
|
||||||
protected function path_for_file($fileOrUrl) {
|
protected function path_for_file($fileOrUrl) {
|
||||||
if(preg_match('/^http[s]?/', $fileOrUrl)) {
|
if(preg_match('{^//|http[s]?}', $fileOrUrl)) {
|
||||||
return $fileOrUrl;
|
return $fileOrUrl;
|
||||||
} elseif(Director::fileExists($fileOrUrl)) {
|
} elseif(Director::fileExists($fileOrUrl)) {
|
||||||
$prefix = Director::baseURL();
|
$prefix = Director::baseURL();
|
||||||
|
Loading…
Reference in New Issue
Block a user