Skip to content

Commit cf45a34

Browse files
committed
Merge branch 'main' into proj4leaflet
2 parents 7a080f1 + 756a2df commit cf45a34

20 files changed

+2789
-4428
lines changed

CHANGES.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# Change Log
22

3+
#### 0.4.3
4+
5+
**2025-10-09**
6+
7+
- Update TerriaJS to [8.11.0](https://github.com/TerriaJS/terriajs/blob/main/CHANGES.md#8110---2025-10-09)
8+
39
#### 0.4.2
410

511
**2025-06-03**

buildprocess/configureWebpackForPlugins.js

Lines changed: 7 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
/* eslint-disable @typescript-eslint/no-require-imports */
2+
13
const path = require("path");
24
const fs = require("fs");
3-
45
/**
56
* RegExp pattern used for matching plugin package names for applying various rules.
67
*
@@ -17,7 +18,7 @@ function configureWebpackForPlugins(config) {
1718
}
1819

1920
/**
20-
* Creates a webpack rule for processing svg icons from terriajs plugins using `svg-sprite-loader`.
21+
* Creates a webpack rule for processing svg icons from terriajs plugins using terriajs `svg-sprite-loader`.
2122
* We check two things to decide whether to include an icon:
2223
* 1. The icon belongs to assets/icons folder
2324
* 2. assets/icons/../../package.json has a name field with `terriajs-plugin-` prefix
@@ -46,15 +47,12 @@ function createPluginIconsRule() {
4647
packageNames[svgPath] = packageName;
4748
return isTerriaJsPlugin;
4849
},
49-
loader: require.resolve("svg-sprite-loader"),
50+
loader: require.resolve("terriajs/buildprocess/svgs/svg-sprite-loader.js"),
5051
options: {
51-
esModule: false,
52-
symbolId: (svgPath) => {
52+
namespace: (svgPath) => {
5353
// Generate a symbolId by concatenating the package name and the icon name
54-
const packageName = packageNames[svgPath] || "terriajs-plugin-";
55-
const iconName = path.basename(svgPath, ".svg");
56-
const symbolId = `${packageName}-${iconName}`;
57-
return symbolId;
54+
const packageName = packageNames[svgPath] || "terriajs-plugin";
55+
return packageName;
5856
}
5957
}
6058
};

buildprocess/webpack.config.js

Lines changed: 15 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
1+
/* eslint-disable no-undef */
2+
/* eslint-disable @typescript-eslint/no-require-imports */
3+
14
const configureWebpackForTerriaJS = require("terriajs/buildprocess/configureWebpack");
25
const configureWebpackForPlugins = require("./configureWebpackForPlugins");
6+
const defaultBabelLoader = require("terriajs/buildprocess/defaultBabelLoader");
37
const MiniCssExtractPlugin = require("mini-css-extract-plugin");
48
const path = require("path");
9+
const HtmlPlugin = require("html-webpack-plugin");
510

611
/**
712
* Webpack config for building terriamap
813
*/
9-
module.exports = function (devMode) {
14+
module.exports = function ({ devMode, baseHref = "/" }) {
1015
// Base configuration
1116
const config = {
1217
mode: devMode ? "development" : "production",
@@ -33,29 +38,7 @@ module.exports = function (devMode) {
3338
path.resolve(__dirname, "..", "plugins.ts"),
3439
path.resolve(__dirname, "..", "lib")
3540
],
36-
use: [
37-
{
38-
loader: "babel-loader",
39-
options: {
40-
cacheDirectory: true,
41-
presets: [
42-
[
43-
"@babel/preset-env",
44-
{
45-
corejs: 3,
46-
useBuiltIns: "usage"
47-
}
48-
],
49-
["@babel/preset-react", { runtime: "automatic" }],
50-
["@babel/preset-typescript", { allowNamespaces: true }]
51-
],
52-
plugins: [
53-
["@babel/plugin-proposal-decorators", { legacy: true }],
54-
"babel-plugin-styled-components"
55-
]
56-
}
57-
}
58-
]
41+
use: [defaultBabelLoader({ devMode })]
5942
},
6043
// import html file as string
6144
{
@@ -80,12 +63,6 @@ module.exports = function (devMode) {
8063
}
8164
}
8265
},
83-
// handle css files - inject in html tag
84-
{
85-
test: /loader\.css$/,
86-
include: [path.resolve(__dirname, "..", "lib", "Styles")],
87-
use: ["style-loader", "css-loader"]
88-
},
8966
// handle scss files
9067
{
9168
test: /\.scss$/,
@@ -100,6 +77,7 @@ module.exports = function (devMode) {
10077
defaultExport: true
10178
}
10279
},
80+
{ loader: "terriajs-typings-for-css-modules-loader" },
10381
{
10482
loader: "css-loader",
10583
options: {
@@ -135,6 +113,13 @@ module.exports = function (devMode) {
135113
new MiniCssExtractPlugin({
136114
filename: "TerriaMap.css",
137115
ignoreOrder: true
116+
}),
117+
new HtmlPlugin({
118+
filename: path.resolve(__dirname, "..", "wwwroot", "index.html"),
119+
template: path.resolve(__dirname, "..", "wwwroot", "index.ejs"),
120+
templateParameters: {
121+
baseHref: baseHref
122+
}
138123
})
139124
],
140125
resolve: {

entry.js

Lines changed: 2 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,32 +1,3 @@
1-
import globeGif from "./lib/Styles/globe.gif";
2-
import "./lib/Styles/loader.css";
1+
import { renderUi } from "./lib/Views/render";
32

4-
async function loadMainScript() {
5-
return import("terriajs/lib/Core/prerequisites")
6-
.then(() => import("./index"))
7-
.then(({ default: terriaPromise }) => terriaPromise);
8-
}
9-
10-
function createLoader() {
11-
const loaderDiv = document.createElement("div");
12-
loaderDiv.classList.add("loader-ui");
13-
const loaderGif = document.createElement("img");
14-
loaderGif.src = globeGif;
15-
loaderDiv.appendChild(loaderGif);
16-
17-
loaderDiv.style.backgroundColor = "#383F4D";
18-
document.body.appendChild(loaderDiv);
19-
20-
loadMainScript()
21-
.catch((_err) => {
22-
// Ignore errors and try to show the map anyway
23-
})
24-
.then(() => {
25-
loaderDiv.classList.add("loader-ui-hide");
26-
setTimeout(() => {
27-
document.body.removeChild(loaderDiv);
28-
}, 2000);
29-
});
30-
}
31-
32-
createLoader();
3+
renderUi();

gulpfile.js

Lines changed: 43 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
/*eslint-env node*/
22
/*eslint no-sync: 0*/
33
/*eslint no-process-exit: 0*/
4+
/*eslint no-redeclare: 0*/
5+
/*eslint @typescript-eslint/no-require-imports: 0*/
46

57
"use strict";
68

@@ -17,6 +19,17 @@ var watchOptions = {
1719
interval: 1000
1820
};
1921

22+
const getBaseHref = () => {
23+
var minimist = require("minimist");
24+
// Arguments written in skewer-case can cause problems (unsure why), so stick to camelCase
25+
var options = minimist(process.argv.slice(2), {
26+
string: ["baseHref"],
27+
default: { baseHref: "/" }
28+
});
29+
30+
return options.baseHref;
31+
};
32+
2033
gulp.task("check-terriajs-dependencies", function (done) {
2134
var appPackageJson = require("./package.json");
2235
var terriaPackageJson = require("terriajs/package.json");
@@ -68,33 +81,19 @@ gulp.task("write-version", function (done) {
6881
done();
6982
});
7083

71-
gulp.task("render-index", function renderIndex(done) {
72-
var ejs = require("ejs");
73-
var minimist = require("minimist");
74-
// Arguments written in skewer-case can cause problems (unsure why), so stick to camelCase
75-
var options = minimist(process.argv.slice(2), {
76-
string: ["baseHref"],
77-
default: { baseHref: "/" }
78-
});
79-
80-
var index = fs.readFileSync("wwwroot/index.ejs", "utf8");
81-
var indexResult = ejs.render(index, { baseHref: options.baseHref });
82-
83-
fs.writeFileSync(path.join("wwwroot", "index.html"), indexResult);
84-
done();
85-
});
86-
8784
gulp.task(
8885
"build-app",
8986
gulp.parallel(
90-
"render-index",
9187
gulp.series(
9288
"check-terriajs-dependencies",
9389
"write-version",
9490
function buildApp(done) {
9591
var runWebpack = require("terriajs/buildprocess/runWebpack.js");
9692
var webpack = require("webpack");
97-
var webpackConfig = require("./buildprocess/webpack.config.js")(true);
93+
var webpackConfig = require("./buildprocess/webpack.config.js")({
94+
devMode: true,
95+
baseHref: getBaseHref()
96+
});
9897

9998
checkForDuplicateCesium();
10099

@@ -107,14 +106,16 @@ gulp.task(
107106
gulp.task(
108107
"release-app",
109108
gulp.parallel(
110-
"render-index",
111109
gulp.series(
112110
"check-terriajs-dependencies",
113111
"write-version",
114112
function releaseApp(done) {
115113
var runWebpack = require("terriajs/buildprocess/runWebpack.js");
116114
var webpack = require("webpack");
117-
var webpackConfig = require("./buildprocess/webpack.config.js")(false);
115+
var webpackConfig = require("./buildprocess/webpack.config.js")({
116+
devMode: false,
117+
baseHref: getBaseHref()
118+
});
118119

119120
checkForDuplicateCesium();
120121

@@ -130,25 +131,17 @@ gulp.task(
130131
)
131132
);
132133

133-
gulp.task(
134-
"watch-render-index",
135-
gulp.series("render-index", function watchRenderIndex() {
136-
gulp.watch(["wwwroot/index.ejs"], gulp.series("render-index"));
137-
})
138-
);
139-
140134
gulp.task(
141135
"watch-app",
142136
gulp.parallel(
143-
"watch-render-index",
144137
gulp.series("check-terriajs-dependencies", function watchApp(done) {
145138
var fs = require("fs");
146139
var watchWebpack = require("terriajs/buildprocess/watchWebpack");
147140
var webpack = require("webpack");
148-
var webpackConfig = require("./buildprocess/webpack.config.js")(
149-
true,
150-
false
151-
);
141+
var webpackConfig = require("./buildprocess/webpack.config.js")({
142+
devMode: true,
143+
baseHref: getBaseHref()
144+
});
152145

153146
checkForDuplicateCesium();
154147

@@ -229,6 +222,7 @@ gulp.task("sync-terriajs-dependencies", function (done) {
229222

230223
function syncDependencies(dependencies, targetJson, justWarn) {
231224
for (var dependency in dependencies) {
225+
// eslint-disable-next-line no-prototype-builtins
232226
if (dependencies.hasOwnProperty(dependency)) {
233227
var version =
234228
targetJson.dependencies[dependency] ||
@@ -287,10 +281,24 @@ gulp.task("terriajs-server", terriajsServerGulpTask(3001));
287281
gulp.task("build", gulp.series("copy-terriajs-assets", "build-app"));
288282
gulp.task("release", gulp.series("copy-terriajs-assets", "release-app"));
289283
gulp.task("watch", gulp.parallel("watch-terriajs-assets", "watch-app"));
290-
// Run render-index before starting terriajs-server because terriajs-server won't
291-
// start if index.html isn't present
284+
// Simple task that waits for index.html then starts server
292285
gulp.task(
293286
"dev",
294-
gulp.parallel(gulp.series("render-index", "terriajs-server"), "watch")
287+
gulp.parallel("watch", function startServerWhenReady(done) {
288+
const indexFile = path.join(__dirname, "wwwroot", "index.html");
289+
290+
if (fs.existsSync(indexFile)) {
291+
terriajsServerGulpTask(3001)(done);
292+
return;
293+
}
294+
var watcher = gulp.watch(
295+
path.join(__dirname, "wwwroot", "index.html"),
296+
watchOptions
297+
);
298+
watcher.on("add", function () {
299+
watcher.close();
300+
terriajsServerGulpTask(3001)(done);
301+
});
302+
})
295303
);
296304
gulp.task("default", gulp.series("lint", "build"));

index.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,6 @@ import registerCustomComponentTypes from "terriajs/lib/ReactViews/Custom/registe
99
import updateApplicationOnHashChange from "terriajs/lib/ViewModels/updateApplicationOnHashChange";
1010
import updateApplicationOnMessageFromParentWindow from "terriajs/lib/ViewModels/updateApplicationOnMessageFromParentWindow";
1111
import loadPlugins from "./lib/Core/loadPlugins";
12-
import render from "./lib/Views/render";
1312
import showGlobalDisclaimer from "./lib/Views/showGlobalDisclaimer";
1413
import plugins from "./plugins";
1514

@@ -97,10 +96,11 @@ export default terria
9796
styleSheet.innerText = fontImports;
9897
document.head.appendChild(styleSheet);
9998
}
100-
101-
render(terria, [], viewState);
10299
} catch (e) {
103100
console.error(e);
104101
console.error(e.stack);
105102
}
103+
})
104+
.then(() => {
105+
return { terria, viewState };
106106
});

lib/Views/Loader.tsx

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import globeGif from "../Styles/globe.gif";
2+
import Styles from "./loader.scss";
3+
4+
export const Loader = () => {
5+
return (
6+
<div
7+
className={Styles.loaderUi}
8+
style={{
9+
backgroundColor: "#383F4D"
10+
}}
11+
>
12+
<img src={globeGif} />
13+
</div>
14+
);
15+
};

0 commit comments

Comments
 (0)