-
Notifications
You must be signed in to change notification settings - Fork 2
/
index.js
125 lines (107 loc) · 5.94 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
'use strict';
/*global require,window */
var terriaOptions = {
baseUrl: 'build/TerriaJS'
};
// checkBrowserCompatibility('ui');
import GoogleAnalytics from 'terriajs/lib/Core/GoogleAnalytics';
import ShareDataService from 'terriajs/lib/Models/ShareDataService';
import raiseErrorToUser from 'terriajs/lib/Models/raiseErrorToUser';
import registerAnalytics from 'terriajs/lib/Models/registerAnalytics';
import registerCatalogMembers from 'terriajs/lib/Models/registerCatalogMembers';
import registerCustomComponentTypes from 'terriajs/lib/ReactViews/Custom/registerCustomComponentTypes';
import Terria from 'terriajs/lib/Models/Terria';
import updateApplicationOnHashChange from 'terriajs/lib/ViewModels/updateApplicationOnHashChange';
import updateApplicationOnMessageFromParentWindow from 'terriajs/lib/ViewModels/updateApplicationOnMessageFromParentWindow';
import ViewState from 'terriajs/lib/ReactViewModels/ViewState';
import BingMapsSearchProviderViewModel from 'terriajs/lib/ViewModels/BingMapsSearchProviderViewModel.js';
import GazetteerSearchProviderViewModel from 'terriajs/lib/ViewModels/GazetteerSearchProviderViewModel.js';
import GnafSearchProviderViewModel from 'terriajs/lib/ViewModels/GnafSearchProviderViewModel.js';
import defined from 'terriajs-cesium/Source/Core/defined';
import render from './lib/Views/render';
// Register all types of catalog members in the core TerriaJS. If you only want to register a subset of them
// (i.e. to reduce the size of your application if you don't actually use them all), feel free to copy a subset of
// the code in the registerCatalogMembers function here instead.
registerCatalogMembers();
registerAnalytics();
terriaOptions.analytics = new GoogleAnalytics();
// Construct the TerriaJS application, arrange to show errors to the user, and start it up.
var terria = new Terria(terriaOptions);
// Register custom components in the core TerriaJS. If you only want to register a subset of them, or to add your own,
// insert your custom version of the code in the registerCustomComponentTypes function here instead.
registerCustomComponentTypes(terria);
// Create the ViewState before terria.start so that errors have somewhere to go.
const viewState = new ViewState({
terria: terria
});
if (process.env.NODE_ENV === "development") {
window.viewState = viewState;
}
// If we're running in dev mode, disable the built style sheet as we'll be using the webpack style loader.
// Note that if the first stylesheet stops being nationalmap.css then this will have to change.
if (process.env.NODE_ENV !== "production" && module.hot) {
document.styleSheets[0].disabled = true;
}
module.exports = terria.start({
// If you don't want the user to be able to control catalog loading via the URL, remove the applicationUrl property below
// as well as the call to "updateApplicationOnHashChange" further down.
applicationUrl: window.location,
configUrl: 'config.json',
defaultTo2D: true,
persistViewerMode: false,
shareDataService: new ShareDataService({
terria: terria
})
}).otherwise(function(e) {
raiseErrorToUser(terria, e);
}).always(function() {
try {
viewState.searchState.locationSearchProviders = [
new BingMapsSearchProviderViewModel({
terria: terria,
key: terria.configParameters.bingMapsKey
}),
new GazetteerSearchProviderViewModel({terria}),
new GnafSearchProviderViewModel({terria})
];
// Automatically update Terria (load new catalogs, etc.) when the hash part of the URL changes.
updateApplicationOnHashChange(terria, window);
updateApplicationOnMessageFromParentWindow(terria, window);
// Create the various base map options.
var createPacificBaseMapOptions = require('./lib/ViewModels/createPacificBaseMapOptions');
var createGlobalBaseMapOptions = require('terriajs/lib/ViewModels/createGlobalBaseMapOptions');
var selectBaseMap = require('terriajs/lib/ViewModels/selectBaseMap');
var pacificBaseMaps = createPacificBaseMapOptions(terria);
var globalBaseMaps = createGlobalBaseMapOptions(terria, terria.configParameters.bingMapsKey);
var allBaseMaps = globalBaseMaps.concat(pacificBaseMaps);
selectBaseMap(terria, globalBaseMaps, 'Bing Maps Aerial with Labels', true);
// Show a modal disclaimer before user can do anything else.
if (defined(terria.configParameters.globalDisclaimer)) {
var globalDisclaimer = terria.configParameters.globalDisclaimer;
var hostname = window.location.hostname;
if (globalDisclaimer.enableOnLocalhost || hostname.indexOf('localhost') === -1) {
var message = '';
// Sometimes we want to show a preamble if the user is viewing a site other than the official production instance.
// This can be expressed as a devHostRegex ("any site starting with staging.") or a negative prodHostRegex ("any site not ending in .gov.au")
if (defined(globalDisclaimer.devHostRegex) && hostname.match(globalDisclaimer.devHostRegex) ||
defined(globalDisclaimer.prodHostRegex) && !hostname.match(globalDisclaimer.prodHostRegex)) {
message += require('./lib/Views/DevelopmentDisclaimerPreamble.html');
}
message += require('./lib/Views/GlobalDisclaimer.html');
var options = {
title: (globalDisclaimer.title !== undefined) ? globalDisclaimer.title : 'Warning',
confirmText: (globalDisclaimer.buttonTitle || "Ok"),
width: 600,
height: 550,
message: message,
horizontalPadding : 100
};
viewState.notifications.push(options);
}
}
render(terria, allBaseMaps, viewState);
} catch (e) {
console.error(e);
console.error(e.stack);
}
});