diff --git a/src/dependencies.js b/src/dependencies.js new file mode 100644 index 00000000000..d9e2c3e0c37 --- /dev/null +++ b/src/dependencies.js @@ -0,0 +1,51 @@ +/* + * Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50, evil:true */ +/*global window, document:true, CollectionUtils:true */ + +window.setTimeout(function () { + "use strict"; + var deps = { "Mustache": window.Mustache, "jQuery": window.$, "CodeMirror": window.CodeMirror, "RequireJS": window.require }; + var key, missingDeps = []; + for (key in deps) { + if (deps.hasOwnProperty(key) && !deps[key]) { + missingDeps.push(key); + } + } + if (missingDeps.length === 0) { + return; + } + document.write("

Missing libraries

"); + document.write("

Oops! One or more required libraries could not be found.

"); + document.write(""); + document.write("

If you're running from a local copy of the Brackets source, please make sure submodules are updated by running:

"); + document.write("
git submodule update --init
"); + document.write("

If you're still having problems, please contact us via one of the channels mentioned at the bottom of the README.

"); + document.write("

Reload Brackets

"); +}, 1000); \ No newline at end of file diff --git a/src/index.html b/src/index.html index 406b3f6f8ce..5a77420df0f 100644 --- a/src/index.html +++ b/src/index.html @@ -33,59 +33,10 @@ nonstandard WebKit-specific syntax. --> - - @@ -120,34 +71,7 @@ - + diff --git a/src/xorigin.js b/src/xorigin.js new file mode 100644 index 00000000000..8b996b96dd2 --- /dev/null +++ b/src/xorigin.js @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2013 Adobe Systems Incorporated. All rights reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + * DEALINGS IN THE SOFTWARE. + * + */ + +/*jslint vars: true, plusplus: true, devel: true, nomen: true, indent: 4, maxerr: 50 */ +/*global brackets: true, navigator:true, document:true, window:true */ +(function () { + "use strict"; + + // Function to test whether a given error represents an illegal cross origin access + var testCrossOriginError; + + if (navigator.userAgent.search(" Chrome/") !== -1) { + // Chrome support + testCrossOriginError = function (message, url, line) { + return url === "" && line === 0 && message === "Script error."; + }; + } else if (navigator.userAgent.slice(0, 6) === 'Opera/') { + // Opera support + testCrossOriginError = function (message, url, line) { + return message === "Uncaught exception: DOMException: NETWORK_ERR"; + }; + } + + // Abort if running in the shell, running on a server or not running in a supported and affected browser + if (typeof (brackets) !== "undefined" || + document.location.href.substr(0, 7) !== "file://" || + !testCrossOriginError) { + return; + } + + // Remember the current error handler to restore it once we're done + var previousErrorHandler = window.onerror; + + // Our error handler + function handleError(message, url, line) { + // Ignore this error if it does not look like the rather vague cross origin error in Chrome + // Chrome will print it to the console anyway + if (!testCrossOriginError(message, url, line)) { + if (previousErrorHandler) { + return previousErrorHandler(message, url, line); + } + return; + } + + // Show an error message + alert("Oops! This application doesn't run in browsers yet.\n\nIt is built in HTML, but right now it runs as a desktop app so you can use it to edit local files. Please use the application shell in the following repo to run this application:\n\ngithub.com/adobe/brackets-shell"); + + // Restore the original handler for later errors + window.onerror = previousErrorHandler; + } + + // Install our error handler + window.onerror = handleError; +}()); \ No newline at end of file