mirror of
https://github.com/google/blockly.git
synced 2026-01-11 19:07:08 +01:00
* chore(deps): Update closure/goog/base.js, add goog.js
- Update base.js from the latest version (20220502.0.0).
- Also copy over goog.js, which provides access to a suitable subset
of goog.* via an importable module).
* chore(build): Split gulpfiles/config.js exports object
This makes it possible for entries to depend on each other.
* chore(build): build config consistency
- Reorder entries in gulpfiles.config.js to better match order they
are used.
- Have update_metadata.sh reference config.js and vice versa.
* refactor(build): Move deps.js (+ deps.mocha.js) from test/ to build/
Once we start using tsc, deps.js will be created based on the ouptut
of tsc rather than the raw source in core/. Since tsc will need to
be run before running closure-make-deps and also before trying to
load blockly_uncompressed.js, it doesn't really make sense to check
in deps.js; it's better to re-create as needed.
To reduce inconvenience, a new "prepare" script is added to
package.json which will run the buildDeps gulp target automaticaly
when one runs npm install.
* refactor(build): Always build from TypeScript sources
- Add buildJavaScript gulp task to use tsc to compile any .ts files
in core/ into build/src/core/ (and also copy any .js files that
are not yet migrated to TypeScript, which for now is all of them.
- Remove closure/goog from explicit inputs to tsc; it will find
the files it needs (e.g., goog.js) automatically.
- Have buildDeps, the playground, and all the tests that run in
uncompiled mode use build/src/core/ instead of core/ as their
input directory.
* feat(build): Add buildJavaScriptAndDeps gulp task
Have npm run build:deps (and npm run prepare) use a new gulp task,
buildJavaScriptAndDeps, to run tsc followed by closure-make-deps,
ensuring that deps.js is calculated based on the most recent code
in core/.
* fix(build): Fix implementation of flattenCorePaths
Even though this function is going away I want to remove it in
a separate PR so that we can revert easily if desired. But the
previous checked-in code was totally wrong. This version works.
* fix(build): Don't let checkinBuilt copy build/src/**
Now that we are putting a lot more stuff in build/ (specifically,
all the tsc output in build/src/), modify checkinBuilt so that it
only copies the specific things we want to check in (for now):
- _compressed.js build artifacts and their accompanying .js.maps
- the generated build/msg/js/*.js language files.
Unrelatedly, also fix safety-quoting of arguments for one execSync
call.
100 lines
3.5 KiB
JavaScript
100 lines
3.5 KiB
JavaScript
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
/**
|
|
* @fileoverview Load this file in a <script> tag to prepare for
|
|
* importing Blockly into a web page.
|
|
*
|
|
* You must use a <script> tag to load this script first, then
|
|
* import blockly.mjs in a <script type=module> to obtain the
|
|
* loaded value.
|
|
*
|
|
* See tests/playground.html for example usage.
|
|
*/
|
|
'use strict';
|
|
|
|
(function() {
|
|
// Decide whether we can load Blockly uncompiled, or must load the
|
|
// compiled version. Please see issue #5557 for more information.
|
|
const isIe = navigator.userAgent.indexOf('MSIE') !== -1 ||
|
|
navigator.appVersion.indexOf('Trident/') > -1;
|
|
const localhosts = ['localhost', '127.0.0.1', '[::1]'];
|
|
|
|
if (localhosts.includes(location.hostname) && !isIe) {
|
|
// We can load Blockly in uncompiled mode.
|
|
|
|
// Disable loading of closure/goog/deps.js (which doesn't exist).
|
|
window.CLOSURE_NO_DEPS = true;
|
|
// Load the Closure Library's base.js (the only part of the
|
|
// libary we use, mainly for goog.require / goog.provide /
|
|
// goog.module).
|
|
document.write('<script src="../../closure/goog/base.js"></script>');
|
|
// Load dependency graph info from build/deps.js. To update
|
|
// deps.js, run `npm run build:deps`.
|
|
document.write('<script src="../../build/deps.js"></script>');
|
|
|
|
// Msg loading kludge. This should go away once #5409 and/or
|
|
// #1895 are fixed.
|
|
|
|
// Load messages into a temporary Blockly.Msg object, deleting it
|
|
// afterwards (after saving the messages!)
|
|
window.Blockly = {Msg: Object.create(null)};
|
|
document.write('<script src="../../msg/messages.js"></script>');
|
|
document.write(`
|
|
<script>
|
|
window.BlocklyMsg = window.Blockly.Msg;
|
|
delete window.Blockly;
|
|
</script>`);
|
|
|
|
document.write(`
|
|
<script>
|
|
window.BlocklyLoader = new Promise((resolve, reject) => {
|
|
goog.bootstrap(
|
|
[
|
|
'Blockly',
|
|
'Blockly.libraryBlocks',
|
|
'Blockly.Dart.all',
|
|
'Blockly.JavaScript.all',
|
|
'Blockly.Lua.all',
|
|
'Blockly.PHP.all',
|
|
'Blockly.Python.all',
|
|
], resolve);
|
|
}).then(() => {
|
|
// Copy Messages from temporary Blockly.Msg object to the real one:
|
|
Object.assign(goog.module.get('Blockly').Msg, window.BlocklyMsg);
|
|
}).then(() => {
|
|
return goog.module.get('Blockly');
|
|
});
|
|
</script>`);
|
|
} else {
|
|
// The below code is necessary for a few reasons:
|
|
// - We need an absolute path instead of relative path because the
|
|
// advanced_playground the and regular playground are in different folders.
|
|
// - We need to get the root directory for blockly because it is
|
|
// different for github.io, appspot and local.
|
|
const files = [
|
|
'blockly_compressed.js',
|
|
'msg/messages.js',
|
|
'blocks_compressed.js',
|
|
'dart_compressed.js',
|
|
'javascript_compressed.js',
|
|
'lua_compressed.js',
|
|
'php_compressed.js',
|
|
'python_compressed.js',
|
|
];
|
|
|
|
// We need to load Blockly in compiled mode.
|
|
const hostName = window.location.host.replaceAll('.', '\\.');
|
|
const matches = new RegExp(hostName + '\\/(.*)tests').exec(window.location.href);
|
|
const root = matches && matches[1] ? matches[1] : '';
|
|
|
|
// Load blockly_compressed.js et al. using <script> tags.
|
|
for (let i = 0; i < files.length; i++) {
|
|
document.write('<script src="/' + root + files[i] + '"></script>');
|
|
}
|
|
}
|
|
})();
|