Made _getScriptLocation smarter, and added it to SingleFile.js also. This means that single file builds no longer need to contain OpenLayers.js. r=eleomine (closes #2873)

git-svn-id: http://svn.openlayers.org/trunk/openlayers@10822 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
ahocevar
2010-10-13 13:02:08 +00:00
parent 8dc19c84c7
commit 485ebaa316
10 changed files with 129 additions and 67 deletions

View File

@@ -3,7 +3,6 @@
[first]
OpenLayers/SingleFile.js
OpenLayers.js
OpenLayers/BaseTypes.js
OpenLayers/BaseTypes/Class.js
OpenLayers/Util.js
@@ -15,4 +14,5 @@ Rico/Corner.js
[exclude]
Firebug
OpenLayers.js
OpenLayers/Lang

View File

@@ -4,7 +4,6 @@
[first]
OpenLayers/SingleFile.js
OpenLayers.js
OpenLayers/BaseTypes.js
OpenLayers/BaseTypes/Class.js
OpenLayers/Util.js
@@ -16,6 +15,7 @@ Rico/Corner.js
[exclude]
Firebug
OpenLayers.js
OpenLayers/Format/GeoRSS.js
OpenLayers/Format/GML.js
OpenLayers/Format/WKT.js

View File

@@ -6,7 +6,6 @@
[first]
OpenLayers/SingleFile.js
OpenLayers.js
OpenLayers/BaseTypes.js
OpenLayers/BaseTypes/Class.js
OpenLayers/Util.js

View File

@@ -14,28 +14,21 @@
* Before creating the OpenLayers namespace, check to see if
* OpenLayers.singleFile is true. This occurs if the
* OpenLayers/SingleFile.js script is included before this one - as is the
* case with single file builds.
* case with old single file build profiles that included both
* OpenLayers.js and OpenLayers/SingleFile.js.
*/
var singleFile = (typeof OpenLayers == "object" && OpenLayers.singleFile);
/**
* Cache for the script location returned from
* OpenLayers._getScriptLocation
* Relative path of this script.
*/
var scriptLocation;
var scriptName = (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js";
/**
* Namespace: OpenLayers
* The OpenLayers object provides a namespace for all things OpenLayers
*/
window.OpenLayers = {
/**
* Property: _scriptName
* {String} Relative path of this script.
*/
_scriptName: (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js",
/**
* Function: _getScriptLocation
* Return the path to this script.
@@ -43,26 +36,12 @@
* Returns:
* {String} Path to this script
*/
_getScriptLocation: function () {
if (scriptLocation != undefined) {
return scriptLocation;
}
scriptLocation = "";
var isOL = new RegExp("(^|(.*?\\/))(" + OpenLayers._scriptName + ")(\\?|$)");
var scripts = document.getElementsByTagName('script');
for (var i=0, len=scripts.length; i<len; i++) {
var src = scripts[i].getAttribute('src');
if (src) {
var match = src.match(isOL);
if(match) {
scriptLocation = match[1];
break;
}
}
}
return scriptLocation;
}
_getScriptLocation: (function() {
var r = new RegExp("(^|(.*?\\/))(" + scriptName + ")(\\?|$)");
var s = document.getElementsByTagName('script');
var l = s[s.length-1].getAttribute("src").match(r)[1];
return (function() { return l; });
})()
};
/**
* OpenLayers.singleFile is a flag indicating this file is being included

View File

@@ -4,7 +4,12 @@
* full text of the license. */
var OpenLayers = {
singleFile: true
singleFile: true,
_getScriptLocation: (function() {
var s = document.getElementsByTagName('script');
var l = s[s.length-1].getAttribute("src").match(/(^|(.*?\/))(OpenLayers\.js)(\?|$)/)[1];
return (function() { return l; });
})()
};

View File

@@ -1,31 +0,0 @@
<html>
<head>
<script src="bogus/1/OpenLayers.js-foo"></script>
<script src="bogus/2/foo-OpenLayers.js"></script>
<script id="script" src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(3);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
// create a clone of OpenLayers._getScriptLocation
eval("var getScriptLocation = " + OpenLayers._getScriptLocation.toString());
var scriptLocation;
script.setAttribute("src", "../lib/OpenLayers.js?foo");
t.eq(getScriptLocation(), "../", "Script location with search string correctly detected.");
scriptLocation = null;
// now pretend we're using a built script
OpenLayers._scriptName = "OpenLayers.js";
t.eq(getScriptLocation(), "../lib/", "not fooled by bogus paths");
}
</script>
</head>
<body>
</body>
</html>

32
tests/OpenLayers1.html Normal file
View File

@@ -0,0 +1,32 @@
<html>
<head>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(1);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
}
</script>
</head>
<body>
</body>
</html>
<html>
<head>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(1);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../", "Script location correctly detected.");
}
</script>
</head>
<body>
</body>
</html>

38
tests/OpenLayers2.html Normal file
View File

@@ -0,0 +1,38 @@
<html>
<head>
<script src="bogus/1/OpenLayers.js-foo"></script>
<script src="bogus/2/foo-OpenLayers.js"></script>
<script src="../lib/OpenLayers.js?foo"></script>
<script src="bogus/3/after-OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(1);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../", "Script location with search string correctly detected, and not fooled by other scripts.");
}
</script>
</head>
<body>
</body>
</html>
<html>
<head>
<script src="bogus/1/OpenLayers.js-foo"></script>
<script src="bogus/2/foo-OpenLayers.js"></script>
<script src="../lib/OpenLayers.js?foo"></script>
<script src="bogus/3/after-OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(1);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../", "Script location with search string correctly detected, and not fooled by other scripts.");
}
</script>
</head>
<body>
</body>
</html>

38
tests/OpenLayers3.html Normal file
View File

@@ -0,0 +1,38 @@
<html>
<head>
<script>
var OpenLayers = {singleFile: true};
</script>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(1);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../lib/", "Script location for single file build correctly detected.");
}
</script>
</head>
<body>
</body>
</html>
<html>
<head>
<script>
var OpenLayers = {singleFile: true};
</script>
<script src="../lib/OpenLayers.js"></script>
<script type="text/javascript">
function test_OpenLayers(t) {
t.plan(1);
var script = document.getElementById("script");
t.eq(OpenLayers._getScriptLocation(), "../lib/", "Script location for single file build correctly detected.");
}
</script>
</head>
<body>
</body>
</html>

View File

@@ -156,7 +156,9 @@
<li>Map.html</li>
<li>Marker.html</li>
<li>Marker/Box.html</li>
<li>OpenLayers.html</li>
<li>OpenLayers1.html</li>
<li>OpenLayers2.html</li>
<li>OpenLayers3.html</li>
<li>Popup.html</li>
<li>Popup/Anchored.html</li>
<li>Popup/AnchoredBubble.html</li>