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
+1 -1
View File
@@ -3,7 +3,6 @@
[first] [first]
OpenLayers/SingleFile.js OpenLayers/SingleFile.js
OpenLayers.js
OpenLayers/BaseTypes.js OpenLayers/BaseTypes.js
OpenLayers/BaseTypes/Class.js OpenLayers/BaseTypes/Class.js
OpenLayers/Util.js OpenLayers/Util.js
@@ -15,4 +14,5 @@ Rico/Corner.js
[exclude] [exclude]
Firebug Firebug
OpenLayers.js
OpenLayers/Lang OpenLayers/Lang
+1 -1
View File
@@ -4,7 +4,6 @@
[first] [first]
OpenLayers/SingleFile.js OpenLayers/SingleFile.js
OpenLayers.js
OpenLayers/BaseTypes.js OpenLayers/BaseTypes.js
OpenLayers/BaseTypes/Class.js OpenLayers/BaseTypes/Class.js
OpenLayers/Util.js OpenLayers/Util.js
@@ -16,6 +15,7 @@ Rico/Corner.js
[exclude] [exclude]
Firebug Firebug
OpenLayers.js
OpenLayers/Format/GeoRSS.js OpenLayers/Format/GeoRSS.js
OpenLayers/Format/GML.js OpenLayers/Format/GML.js
OpenLayers/Format/WKT.js OpenLayers/Format/WKT.js
-1
View File
@@ -6,7 +6,6 @@
[first] [first]
OpenLayers/SingleFile.js OpenLayers/SingleFile.js
OpenLayers.js
OpenLayers/BaseTypes.js OpenLayers/BaseTypes.js
OpenLayers/BaseTypes/Class.js OpenLayers/BaseTypes/Class.js
OpenLayers/Util.js OpenLayers/Util.js
+10 -31
View File
@@ -14,28 +14,21 @@
* Before creating the OpenLayers namespace, check to see if * Before creating the OpenLayers namespace, check to see if
* OpenLayers.singleFile is true. This occurs if the * OpenLayers.singleFile is true. This occurs if the
* OpenLayers/SingleFile.js script is included before this one - as is 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); var singleFile = (typeof OpenLayers == "object" && OpenLayers.singleFile);
/** /**
* Cache for the script location returned from * Relative path of this script.
* OpenLayers._getScriptLocation
*/ */
var scriptLocation; var scriptName = (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js";
/** /**
* Namespace: OpenLayers * Namespace: OpenLayers
* The OpenLayers object provides a namespace for all things OpenLayers * The OpenLayers object provides a namespace for all things OpenLayers
*/ */
window.OpenLayers = { window.OpenLayers = {
/**
* Property: _scriptName
* {String} Relative path of this script.
*/
_scriptName: (!singleFile) ? "lib/OpenLayers.js" : "OpenLayers.js",
/** /**
* Function: _getScriptLocation * Function: _getScriptLocation
* Return the path to this script. * Return the path to this script.
@@ -43,26 +36,12 @@
* Returns: * Returns:
* {String} Path to this script * {String} Path to this script
*/ */
_getScriptLocation: function () { _getScriptLocation: (function() {
if (scriptLocation != undefined) { var r = new RegExp("(^|(.*?\\/))(" + scriptName + ")(\\?|$)");
return scriptLocation; var s = document.getElementsByTagName('script');
} var l = s[s.length-1].getAttribute("src").match(r)[1];
scriptLocation = ""; return (function() { return l; });
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;
}
}; };
/** /**
* OpenLayers.singleFile is a flag indicating this file is being included * OpenLayers.singleFile is a flag indicating this file is being included
+6 -1
View File
@@ -4,7 +4,12 @@
* full text of the license. */ * full text of the license. */
var OpenLayers = { 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; });
})()
}; };
-31
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
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
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
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>
+3 -1
View File
@@ -156,7 +156,9 @@
<li>Map.html</li> <li>Map.html</li>
<li>Marker.html</li> <li>Marker.html</li>
<li>Marker/Box.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.html</li>
<li>Popup/Anchored.html</li> <li>Popup/Anchored.html</li>
<li>Popup/AnchoredBubble.html</li> <li>Popup/AnchoredBubble.html</li>