diff --git a/.gitignore b/.gitignore index 51d52372..7a22f8fb 100644 --- a/.gitignore +++ b/.gitignore @@ -46,5 +46,4 @@ docker-compose.env.yml .serena .claude .playwright-mcp -CLAUDE.md #tools diff --git a/AGENTS.md b/AGENTS.md index fef5ac1b..363cbaa5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -114,7 +114,8 @@ MMGIS/ ├── src/ # Frontend source code │ └── essence/ │ ├── Basics/ # Core map functionality -│ │ └── Map_.js # Map rendering engine (Leaflet/Cesium) +│ │ ├── Map_.js # Map rendering engine (Leaflet/Cesium) +│ │ └── TimeControl_/ # Temporal data control and UI │ ├── Tools/ # Interactive tool plugins (16 core tools) │ │ ├── Animation/ # Map animation creation (GIF/MP4) │ │ ├── Chemistry/ # Chemical composition visualization @@ -132,7 +133,6 @@ MMGIS/ │ │ ├── Sites/ # Quick navigation bookmarks │ │ └── Viewshed/ # Line-of-sight visibility │ └── Ancillary/ # UI components and helpers -│ └──TimeControl/ # Temporal data control ├── configure/ # Admin configuration interface │ └── build/ # Configuration UI ├── docs/ # Documentation (Jekyll site) @@ -162,6 +162,7 @@ MMGIS/ - **`API/Backend/Databases/`** - Sequelize ORM models and database migrations - **`src/essence/Tools/`** - Plugin-based interactive mapping tools. Each tool is self-contained with defined interfaces. - **`src/essence/Basics/Map_.js`** - Core map rendering engine managing both Leaflet (2D) and Cesium (3D) +- **`src/essence/Basics/TimeControl_/`** - Temporal data control system for time-enabled layers - **`configure/`** - Separate admin interface for mission configuration, user management, and tool setup. Also known as the "Configure Page" or "CMS" - **`specs/`** - Feature specifications following spec-kit format diff --git a/CHANGELOG.md b/CHANGELOG.md index 8ae03623..62c2c8eb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,10 @@ _TBD_ #### Changed +- Moved TimeControl from `Ancillary/` to `Basics/TimeControl_/` to reflect its role as core infrastructure (#835) + - TimeControl and TimeUI now located in `src/essence/Basics/TimeControl_/` + - Updated import paths across 19 files + - **Breaking change for external plugins**: Import path changed from `'Ancillary/TimeControl'` to `'Basics/TimeControl_/TimeControl'` - Moved admin login assets from `config/login/` to `public/` directory - `adminlogin.js` and `adminlogin.css` now served from `/public` diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..bbc197ac --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,7 @@ +# MMGIS - Claude Code Context + +This file provides context to Claude Code about the MMGIS project. + +**For complete project context, see AGENTS.md.** + +@AGENTS.md diff --git a/configure/package.json b/configure/package.json index f6483e24..5a7e7260 100644 --- a/configure/package.json +++ b/configure/package.json @@ -1,6 +1,6 @@ { "name": "configure", - "version": "4.2.2-20251222", + "version": "4.2.3-20251223", "homepage": "./configure/build", "private": true, "dependencies": { diff --git a/package.json b/package.json index ca207dc6..0a21f510 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "mmgis", - "version": "4.2.2-20251222", + "version": "4.2.3-20251223", "description": "A web-based mapping and localization solution for science operation on planetary missions.", "homepage": "build", "repository": { diff --git a/src/essence/Ancillary/Coordinates.js b/src/essence/Ancillary/Coordinates.js index 7a7d3b1c..4c29b3fe 100644 --- a/src/essence/Ancillary/Coordinates.js +++ b/src/essence/Ancillary/Coordinates.js @@ -3,7 +3,7 @@ import $ from 'jquery' import F_ from '../Basics/Formulae_/Formulae_' import Map_ from '../Basics/Map_/Map_' import L_ from '../Basics/Layers_/Layers_' -import TimeUI from './TimeUI' +import TimeUI from '../Basics/TimeControl_/TimeUI' import Dropy from '../../external/Dropy/dropy' import * as _UserInterface_ from '../Basics/UserInterface_/UserInterface_' import calls from '../../pre/calls' diff --git a/src/essence/Ancillary/Description.js b/src/essence/Ancillary/Description.js index 18c4b5f1..34d4e1a5 100644 --- a/src/essence/Ancillary/Description.js +++ b/src/essence/Ancillary/Description.js @@ -5,7 +5,7 @@ import Dropy from '../../external/Dropy/dropy' import flat from 'flat' import { booleanIntersects, bbox } from '@turf/turf' import calls from '../../pre/calls' -import TimeControl from './TimeControl' +import TimeControl from '../Basics/TimeControl_/TimeControl' import tippy from 'tippy.js' diff --git a/src/essence/Ancillary/QueryURL.js b/src/essence/Ancillary/QueryURL.js index 373c7640..39aea2df 100644 --- a/src/essence/Ancillary/QueryURL.js +++ b/src/essence/Ancillary/QueryURL.js @@ -4,8 +4,8 @@ import F_ from '../Basics/Formulae_/Formulae_' import L_ from '../Basics/Layers_/Layers_' import T_ from '../Basics/ToolController_/ToolController_' import calls from '../../pre/calls' -import TimeControl from './TimeControl' -import TimeUI from './TimeUI' +import TimeControl from '../Basics/TimeControl_/TimeControl' +import TimeUI from '../Basics/TimeControl_/TimeUI' var QueryURL = { checkIfMission: function () { diff --git a/src/essence/Basics/Globe_/Globe_.js b/src/essence/Basics/Globe_/Globe_.js index b23348d8..59194b76 100644 --- a/src/essence/Basics/Globe_/Globe_.js +++ b/src/essence/Basics/Globe_/Globe_.js @@ -2,7 +2,7 @@ import F_ from '../Formulae_/Formulae_' import L_ from '../Layers_/Layers_' import $ from 'jquery' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../TimeControl_/TimeControl' import GlobeRenderer from './GlobeRenderer' let Globe_ = { diff --git a/src/essence/Basics/Layers_/LayerCapturer.js b/src/essence/Basics/Layers_/LayerCapturer.js index c8194264..369e325a 100644 --- a/src/essence/Basics/Layers_/LayerCapturer.js +++ b/src/essence/Basics/Layers_/LayerCapturer.js @@ -3,7 +3,7 @@ import { utcFormat } from 'd3-time-format' import F_ from '../Formulae_/Formulae_' import L_ from '../Layers_/Layers_' import calls from '../../../pre/calls' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../TimeControl_/TimeControl' // This is so that an eariler and slower dynamic geodataset request // does not override an earlier shorter one diff --git a/src/essence/Basics/Map_/Map_.js b/src/essence/Basics/Map_/Map_.js index 074cd3f6..47ba77da 100644 --- a/src/essence/Basics/Map_/Map_.js +++ b/src/essence/Basics/Map_/Map_.js @@ -17,7 +17,7 @@ import MetadataCapturer from '../Layers_/MetadataCapturer.js' import { Kinds } from '../../../pre/tools' import DataShaders from '../../Ancillary/DataShaders' import calls from '../../../pre/calls' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../TimeControl_/TimeControl' import gjv from 'geojson-validation' import { diff --git a/src/essence/Ancillary/TimeControl.css b/src/essence/Basics/TimeControl_/TimeControl.css similarity index 100% rename from src/essence/Ancillary/TimeControl.css rename to src/essence/Basics/TimeControl_/TimeControl.css diff --git a/src/essence/Ancillary/TimeControl.js b/src/essence/Basics/TimeControl_/TimeControl.js similarity index 96% rename from src/essence/Ancillary/TimeControl.js rename to src/essence/Basics/TimeControl_/TimeControl.js index 44ebdd0b..5da2c95d 100644 --- a/src/essence/Ancillary/TimeControl.js +++ b/src/essence/Basics/TimeControl_/TimeControl.js @@ -2,9 +2,9 @@ import { utcFormat } from 'd3-time-format' import * as moment from 'moment' import $ from 'jquery' -import F_ from '../Basics/Formulae_/Formulae_' -import L_ from '../Basics/Layers_/Layers_' -import Map_ from '../Basics/Map_/Map_' +import F_ from '../Formulae_/Formulae_' +import L_ from '../Layers_/Layers_' +import Map_ from '../Map_/Map_' import TimeUI from './TimeUI' import './TimeControl.css' diff --git a/src/essence/Ancillary/TimeUI.css b/src/essence/Basics/TimeControl_/TimeUI.css similarity index 100% rename from src/essence/Ancillary/TimeUI.css rename to src/essence/Basics/TimeControl_/TimeUI.css diff --git a/src/essence/Ancillary/TimeUI.js b/src/essence/Basics/TimeControl_/TimeUI.js similarity index 97% rename from src/essence/Ancillary/TimeUI.js rename to src/essence/Basics/TimeControl_/TimeUI.js index c084048e..173c963c 100644 --- a/src/essence/Ancillary/TimeUI.js +++ b/src/essence/Basics/TimeControl_/TimeUI.js @@ -6,12 +6,12 @@ */ import $ from 'jquery' import * as moment from 'moment' -import F_ from '../Basics/Formulae_/Formulae_' -import Map_ from '../Basics/Map_/Map_' -import L_ from '../Basics/Layers_/Layers_' -import calls from '../../pre/calls' +import F_ from '../Formulae_/Formulae_' +import Map_ from '../Map_/Map_' +import L_ from '../Layers_/Layers_' +import calls from '../../../pre/calls' import tippy from 'tippy.js' -import Dropy from '../../external/Dropy/dropy' +import Dropy from '../../../external/Dropy/dropy' import { TempusDominus, Namespace } from '@eonasdan/tempus-dominus' import '@eonasdan/tempus-dominus/dist/css/tempus-dominus.css' diff --git a/src/essence/Basics/ToolController_/ToolController_.js b/src/essence/Basics/ToolController_/ToolController_.js index 0e507199..cfa79350 100644 --- a/src/essence/Basics/ToolController_/ToolController_.js +++ b/src/essence/Basics/ToolController_/ToolController_.js @@ -1,6 +1,6 @@ import $ from 'jquery' import L_ from '../Layers_/Layers_' -import TimeUI from '../../Ancillary/TimeUI' +import TimeUI from '../TimeControl_/TimeUI' import { toolModules, toolConfigs } from '../../../pre/tools' import tippy from 'tippy.js' diff --git a/src/essence/Tools/Animation/AnimationTool.js b/src/essence/Tools/Animation/AnimationTool.js index 5c94ac52..3ff9a2cd 100644 --- a/src/essence/Tools/Animation/AnimationTool.js +++ b/src/essence/Tools/Animation/AnimationTool.js @@ -7,7 +7,7 @@ import Viewer_ from '../../Basics/Viewer_/Viewer_' import ToolController_ from '../../Basics/ToolController_/ToolController_' import CursorInfo from '../../Ancillary/CursorInfo' import Description from '../../Ancillary/Description' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../../Basics/TimeControl_/TimeControl' import Modal from '../../Ancillary/Modal' import HTML2Canvas from 'html2canvas' import gifshot from 'gifshot' diff --git a/src/essence/Tools/Draw/DrawTool.js b/src/essence/Tools/Draw/DrawTool.js index 04c541e9..f4001249 100644 --- a/src/essence/Tools/Draw/DrawTool.js +++ b/src/essence/Tools/Draw/DrawTool.js @@ -16,7 +16,7 @@ import Viewer_ from '../../Basics/Viewer_/Viewer_' import ToolController_ from '../../Basics/ToolController_/ToolController_' import CursorInfo from '../../Ancillary/CursorInfo' import Description from '../../Ancillary/Description' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../../Basics/TimeControl_/TimeControl' import { Kinds } from '../../../pre/tools' import turf from 'turf' diff --git a/src/essence/Tools/Draw/DrawTool_Templater.js b/src/essence/Tools/Draw/DrawTool_Templater.js index 3fa15d3f..30f6b35a 100644 --- a/src/essence/Tools/Draw/DrawTool_Templater.js +++ b/src/essence/Tools/Draw/DrawTool_Templater.js @@ -3,7 +3,7 @@ import $ from 'jquery' import F_ from '../../Basics/Formulae_/Formulae_' import CursorInfo from '../../Ancillary/CursorInfo' import Dropy from '../../../external/Dropy/dropy' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../../Basics/TimeControl_/TimeControl' import calls from '../../../pre/calls' import * as moment from 'moment' diff --git a/src/essence/Tools/Layers/LayersTool.js b/src/essence/Tools/Layers/LayersTool.js index c97f12ff..7127ad8f 100644 --- a/src/essence/Tools/Layers/LayersTool.js +++ b/src/essence/Tools/Layers/LayersTool.js @@ -9,7 +9,7 @@ import LayerInfoModal from './LayerInfoModal/LayerInfoModal' import Filtering from '../../Basics/Layers_/Filtering/Filtering' import Help from '../../Ancillary/Help' import CursorInfo from '../../Ancillary/CursorInfo' -import TimeUI from '../../Ancillary/TimeUI' +import TimeUI from '../../Basics/TimeControl_/TimeUI' import LegendTool from '../Legend/LegendTool.js' diff --git a/src/essence/Tools/Shade/ShadeTool.js b/src/essence/Tools/Shade/ShadeTool.js index ad1c9273..3200c877 100644 --- a/src/essence/Tools/Shade/ShadeTool.js +++ b/src/essence/Tools/Shade/ShadeTool.js @@ -11,7 +11,7 @@ import Map_ from '../../Basics/Map_/Map_' import Globe_ from '../../Basics/Globe_/Globe_' import CursorInfo from '../../Ancillary/CursorInfo' import DataShaders from '../../Ancillary/DataShaders' -import TimeControl from '../../Ancillary/TimeControl' +import TimeControl from '../../Basics/TimeControl_/TimeControl' import Help from '../../Ancillary/Help' import '../../../external/ColorPicker/jqColorPicker' diff --git a/src/essence/essence.js b/src/essence/essence.js index 92d4b49f..385e9c47 100644 --- a/src/essence/essence.js +++ b/src/essence/essence.js @@ -39,7 +39,7 @@ import MapLogo from './Ancillary/MapLogo' import Attributions from './Ancillary/Attributions' //import Swap from './Ancillary/Swap' import QueryURL from './Ancillary/QueryURL' -import TimeControl from './Ancillary/TimeControl' +import TimeControl from './Basics/TimeControl_/TimeControl' import calls from '../pre/calls' import { mmgisAPI_, mmgisAPI } from './mmgisAPI/mmgisAPI' import { makeMissionNotFoundDiv } from './LandingPage/LandingPage' diff --git a/src/essence/mmgisAPI/mmgisAPI.js b/src/essence/mmgisAPI/mmgisAPI.js index 96baec4e..aba0507d 100644 --- a/src/essence/mmgisAPI/mmgisAPI.js +++ b/src/essence/mmgisAPI/mmgisAPI.js @@ -2,7 +2,7 @@ import L_ from '../Basics/Layers_/Layers_' import F_ from '../Basics/Formulae_/Formulae_' import ToolController_ from '../Basics/ToolController_/ToolController_' import QueryURL from '../Ancillary/QueryURL' -import TimeControl from '../Ancillary/TimeControl' +import TimeControl from '../Basics/TimeControl_/TimeControl' import Login from '../Ancillary/Login/Login' import LegendTool from '../Tools/Legend/LegendTool.js'