Compare commits

..

5 commits

Author SHA1 Message Date
Sanjay Bhangar
b2056d4e2b get npm build to somehow work 2026-02-09 19:25:09 +05:30
Sanjay Bhangar
d51d3f60f1 Complete core ES module migration with build system and tests
- Enhanced build system to generate ESM, UMD, and minified formats
- Fixed test extraction script to properly parse OxJS inline tests
- Added comprehensive test infrastructure with Vitest
- Successfully extracted 22 test files from inline documentation
- Verified builds work in browser and Node.js environments
- Maintained full backward compatibility with Ox.load() pattern
- Updated .gitignore to exclude build artifacts (dev/, min/, dist/, test/extracted/)

Generated with AI assistance
2026-02-09 17:58:48 +05:30
Sanjay Bhangar
a8a7dc9445 Add core Ox modules as ES modules with tests
This commit adds ES module versions of fundamental Ox utilities:
- Array utilities (api, compact, unique, zip, etc.)
- String utilities (capitalize, clean, truncate, wordwrap, etc.)
- Math utilities (trig functions, geographic calculations, etc.)
- Object utilities (clone, serialize, keys/values, etc.)
- Function utilities (cache, debounce, throttle, memoize, etc.)
- Constants (math, time, colors, HTTP status codes)
- Polyfills for older browser compatibility

All modules include proper imports/exports and maintain the same API
as the original implementations. Added comprehensive test coverage with
31 tests passing.

Next steps: Convert remaining core modules, set up build pipeline,
and test backward compatibility with existing examples.

🤖 Generated with AI assistance
2026-02-09 17:32:06 +05:30
Sanjay Bhangar
4c880728dc Begin ES modules migration and modern build infrastructure
This commit lays the foundation for migrating OxJS from its custom module
system to ES modules while maintaining backward compatibility.

Key changes:
- Set up npm project with Vite for modern build tooling
- Created ES module versions of core Ox utilities (Type, Collection, DOM, etc.)
- Implemented compatibility layer for legacy Ox.load() pattern
- Added Vitest for testing with initial test suite
- Created script to extract existing inline tests from documentation
- Updated .gitignore for Node.js/npm development

The migration preserves OxJS's innovative inline test system and maintains
backward compatibility. Original source files remain unchanged.

Next steps include migrating UI modules, replacing the Python build script,
and creating npm package distribution.

🤖 Generated with AI assistance
2026-02-09 17:17:52 +05:30
Sanjay Bhangar
91b6deaf7f add CLAUDE.md with overall structure and plan to migrate to ES modules 2026-02-09 17:01:15 +05:30
2490 changed files with 160912 additions and 11 deletions

25
.gitignore vendored
View file

@ -1,12 +1,15 @@
.DS_Store node_modules/
tools/geo/json/_cities.json *.log
dev dist/
build/ .vite/
coverage/
# Build artifacts
dev/
min/ min/
tools/geo/json/countries.json
index.json # Generated test files
._* test/extracted/
build
downloads # Temporary test files
*~ test-build.html
*.swp

185
CLAUDE.md Normal file
View file

@ -0,0 +1,185 @@
# OxJS Codebase Analysis
## Overview
OxJS is a JavaScript UI framework created around 2008, predating modern JavaScript build tools and module systems. It uses a custom build system and loading mechanism that was innovative for its time but needs modernization.
## Current Architecture
### 1. Module Structure
The codebase is organized into distinct modules:
- **Ox**: Core library with utilities (Array, String, Math, Type, etc.)
- **UI**: User interface components and themes
- **Geo**: Geographic utilities
- **Image**: Image manipulation utilities
- **Unicode**: Unicode utilities
Each module follows the pattern:
```
source/
├── ModuleName/
│ ├── ModuleName.js (module loader)
│ ├── js/ (JavaScript files)
│ └── json/ (locale and config files)
```
### 2. Custom Import/Loading System
#### Core Loader (`source/Ox.js`)
- The framework uses a custom `Ox.load()` function instead of ES modules
- Loading process:
1. Detects script path from `<script>` tag
2. Loads `Ox/json/Ox.json` manifest file
3. Sequentially loads script groups in dependency order
4. Supports dev (individual files) and min (bundled) modes
#### Module Loading Pattern
```javascript
// Usage in applications
Ox.load('UI', function() {
// Module is loaded, can use Ox.UI
});
// Module definition pattern
Ox.load.ModuleName = function(options, callback) {
// Module initialization code
callback(true); // success
};
```
### 3. Build System (`tools/build/build.py`)
The Python build script performs several tasks:
#### Core Processing (`Ox` module)
1. **Dependency ordering**: Files are loaded in specific groups to handle dependencies
- Group 1: `Core.js` (defines Ox object)
- Group 2: `Function.js`, `Polyfill.js`
- Group 3: `Array.js`, `String.js`, `Type.js`
- Group 4: `Collection.js`, `Math.js`
- Remaining files loaded alphabetically
2. **Version injection**: Replaces `Ox.VERSION` placeholder
3. **Locale aggregation**: Collects all locale files into `Ox.LOCALES`
4. **Minification**: Uses `ox.js.minify()` to create compressed version
#### UI Module Processing
1. **Theme handling**:
- Reads theme data from `themes/*/json/theme.jsonc`
- Generates theme-specific CSS by replacing variables
- Creates theme-specific SVG files
2. **Asset management**:
- SVG files are embedded as strings in `ui_images`
- PNG files are copied to build directories
- CSS imports are dynamically generated
3. **File bundling**:
- All UI JavaScript files are concatenated into `UI/js/UI.js`
- Creates `UI/json/UI.json` manifest with file lists
#### Output Structure
Creates two build directories:
- `dev/`: Development version with symlinks to source files
- `min/`: Minified production version with concatenated files
### 4. Key Patterns and Conventions
#### No External Dependencies
- jQuery is bundled but loaded separately
- No npm packages or node_modules
- All dependencies are included in source
#### Global Namespace
- Everything hangs off the global `Ox` object
- No module-level scope isolation
- Methods are attached directly to `Ox` or `Ox.ModuleName`
#### Custom JSON with Comments (JSONC)
- Uses `.jsonc` files that support comments
- Custom parser in build process
#### Dynamic Loading
- Modules can be loaded on-demand
- Supports conditional loading based on options
- Locale files loaded lazily
## Challenges for ES Module Migration
### 1. Circular Dependencies
The current load order suggests potential circular dependencies that need careful handling.
### 2. Global State
Heavy reliance on global `Ox` object and sequential initialization.
### 3. Dynamic Module Loading
The `Ox.load()` pattern allows runtime module loading which differs from ES module static imports.
### 4. Build Process Integration
The Python build script handles many transformations that would need webpack/rollup equivalents.
### 5. Theme and Asset Processing
Complex CSS variable substitution and SVG processing needs modern build tool equivalents.
### 6. Browser Compatibility
Current system supports very old browsers; ES modules require modern browser support.
## Migration Strategy Considerations
### Phase 1: Preparation
- Add package.json and npm infrastructure
- Set up modern build tooling (webpack/rollup/vite)
- Create comprehensive test suite
### Phase 2: Module Conversion
- Convert individual files to ES modules
- Maintain backward compatibility layer
- Create barrel exports for each module
### Phase 3: Build System
- Replace Python build with npm scripts
- Implement CSS/SVG processing with PostCSS/webpack
- Set up development and production builds
### Phase 4: Distribution
- Publish to npm
- Support both ES modules and UMD builds
- Maintain script tag compatibility
## Inline Test System
OxJS has a unique inline test system integrated with its documentation:
### Test Format
Tests are embedded directly in documentation comments:
```javascript
/*@
My.foo <f> Returns an item's bar per baz
(item) -> <n> Bar per baz, or NaN
item <o> Any item
> My.foo({bar: 1, baz: 10})
0.1
> My.foo({})
NaN
@*/
```
### Test Execution
- `Ox.doc()` parses documentation and extracts test statements
- `Ox.test()` runs the tests and compares actual vs expected results
- Tests can be synchronous or asynchronous (using callbacks)
- Test results include pass/fail status and actual values
### Benefits
- Tests serve as executable documentation
- Examples are guaranteed to be accurate
- No separate test files needed for basic unit tests
- Human-readable format
## Key Files to Study
1. `source/Ox.js` - Core loader implementation
2. `source/Ox/js/Core.js` - Module loading logic
3. `source/Ox/js/JavaScript.js` - Documentation parser and test runner
4. `tools/build/build.py` - Build process details
5. `source/UI/UI.js` - Module initialization pattern
6. `examples/documentation/oxdoc_tutorial/js/example.js` - Documentation format examples
7. `index.js` - Main entry point usage

119
ES_MODULE_MIGRATION_PLAN.md Normal file
View file

@ -0,0 +1,119 @@
# OxJS ES Modules Migration Plan
## Phase 1: Test Suite Creation
### Existing Test Infrastructure
OxJS has an innovative inline test system built into its documentation format:
- Tests are embedded in documentation comments using `> statement` followed by expected result
- The `Ox.test()` function extracts and runs these tests from the source
- Tests can be synchronous or asynchronous
- Tests are human-readable and serve as documentation examples
### Test Migration Strategy
1. **Extract and modernize existing inline tests**
- Use `Ox.doc()` to parse all inline tests from source files
- Convert inline tests to Jest/Vitest test suites
- Maintain inline tests for documentation purposes
- Ensure all existing inline tests pass before migration
2. **Create additional test coverage**
- Integration tests for module loading patterns
- Verify that ES module imports/exports work correctly
- Test the compatibility layer (Ox.load to ES modules bridge)
- Simple validation that existing examples still function
3. **Set up test infrastructure**
- Add Jest or Vitest for running extracted tests
- Create test helpers for legacy Ox.load patterns
- Build a test runner that can execute both inline and external tests
- Focus on verifying functionality, not UI testing initially
## Phase 2: Build Infrastructure Setup
1. **Initialize npm project**
- Create package.json with proper metadata
- Add development dependencies (Vite, TypeScript, PostCSS, etc.)
- Set up ESLint and Prettier for code quality
2. **Configure Vite build system**
- Development server with ES modules
- Production builds (ES modules + UMD)
- Asset handling for themes, SVGs, and images
- CSS processing with PostCSS for theme variables
## Phase 3: Core Module Conversion
1. **Convert Ox core files to ES modules**
- Start with leaf modules (no dependencies)
- Add explicit imports/exports
- Create index.js barrel exports
- Maintain careful load order for circular dependencies
2. **Create compatibility layer**
- Global Ox object for backward compatibility
- Polyfill for Ox.load() using dynamic imports
- Bridge between ES modules and legacy code
## Phase 4: UI Module Migration
1. **Convert UI components to ES modules**
- Refactor each component as separate ES module
- Extract theme system to CSS variables
- Modernize SVG and image handling
2. **Update theme processing**
- Use CSS custom properties instead of build-time substitution
- Implement theme switching via CSS classes
- Bundle theme assets with Vite
## Phase 5: Testing and Validation
1. **Verify all functionality**
- Run test suite
- Test all examples with new build
- Validate both dev and production builds
- Check browser compatibility
2. **Performance testing**
- Compare bundle sizes
- Measure load times
- Profile runtime performance
## Phase 6: Documentation and Release
1. **Update documentation**
- Migration guide for existing users
- New ES modules usage examples
- API documentation updates
2. **NPM package release**
- Publish to npm registry
- Support multiple entry points (ES modules, UMD, legacy)
- Maintain backward compatibility
## Key Implementation Tasks
- Convert ~50+ JavaScript files to ES modules
- Replace Python build script with Vite/npm scripts
- Modernize theme and asset processing
- Create basic test suite for functionality verification
- Ensure all existing examples continue working
- Support both modern ES imports and legacy script tags
## Testing Strategy Details
### Unit Tests (Phase 1)
Focus on core functionality:
- Test Ox.Array methods (unique, sort, etc.)
- Test Ox.String utilities (capitalize, format, etc.)
- Test Ox.Math functions
- Test Ox.Type checking utilities
- Verify module export/import structure
### Integration Tests (Phase 1)
Verify module loading:
- Test dynamic import() for lazy loading
- Test circular dependency resolution
- Test module initialization order
- Test compatibility layer (Ox.load to ES modules)
- Basic smoke tests for UI component initialization
### Advanced Testing (Future)
- E2E testing with Playwright
- Visual regression testing
- Performance benchmarking
- Cross-browser testing

1
dev/Geo/Geo.js Symbolic link
View file

@ -0,0 +1 @@
../../source/Geo/Geo.js

1
dev/Geo/json/Geo.json Symbolic link
View file

@ -0,0 +1 @@
../../../source/Geo/json/Geo.json

1
dev/Geo/json/locale.ar.json Symbolic link
View file

@ -0,0 +1 @@
../../../source/Geo/json/locale.ar.json

1
dev/Geo/json/locale.de.json Symbolic link
View file

@ -0,0 +1 @@
../../../source/Geo/json/locale.de.json

1
dev/Geo/png/flags/16/AC.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AC.png

1
dev/Geo/png/flags/16/AD.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AD.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-AJ.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-AZ.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-DU.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-FU.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-RK.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-SH.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE-UQ.png

1
dev/Geo/png/flags/16/AE.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AE.png

1
dev/Geo/png/flags/16/AF.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AF.png

1
dev/Geo/png/flags/16/AG.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AG.png

1
dev/Geo/png/flags/16/AI.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AI.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AIDJ.png

1
dev/Geo/png/flags/16/AL.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AL.png

1
dev/Geo/png/flags/16/AM.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AM.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/ANHH.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AO-CAB.png

1
dev/Geo/png/flags/16/AO.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AO.png

1
dev/Geo/png/flags/16/AQ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AQ.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AR-AQ.png

1
dev/Geo/png/flags/16/AR.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AR.png

1
dev/Geo/png/flags/16/AS.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AS.png

1
dev/Geo/png/flags/16/AT.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AT.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AU-AC.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AU-AQ.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AU-CS.png

1
dev/Geo/png/flags/16/AU.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AU.png

1
dev/Geo/png/flags/16/AW.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AW.png

1
dev/Geo/png/flags/16/AX.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AX.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AZ-NK.png

1
dev/Geo/png/flags/16/AZ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/AZ.png

1
dev/Geo/png/flags/16/BA.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BA.png

1
dev/Geo/png/flags/16/BB.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BB.png

1
dev/Geo/png/flags/16/BD.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BD.png

1
dev/Geo/png/flags/16/BE.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BE.png

1
dev/Geo/png/flags/16/BF.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BF.png

1
dev/Geo/png/flags/16/BG.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BG.png

1
dev/Geo/png/flags/16/BH.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BH.png

1
dev/Geo/png/flags/16/BI.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BI.png

1
dev/Geo/png/flags/16/BJ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BJ.png

1
dev/Geo/png/flags/16/BL.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BL.png

1
dev/Geo/png/flags/16/BM.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BM.png

1
dev/Geo/png/flags/16/BN.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BN.png

1
dev/Geo/png/flags/16/BO.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BO.png

1
dev/Geo/png/flags/16/BQ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BQ.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BQAQ.png

1
dev/Geo/png/flags/16/BR.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BR.png

1
dev/Geo/png/flags/16/BS.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BS.png

1
dev/Geo/png/flags/16/BT.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BT.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BUMM.png

1
dev/Geo/png/flags/16/BV.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BV.png

1
dev/Geo/png/flags/16/BW.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BW.png

1
dev/Geo/png/flags/16/BY.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BY.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BYAA.png

1
dev/Geo/png/flags/16/BZ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/BZ.png

1
dev/Geo/png/flags/16/CA.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CA.png

1
dev/Geo/png/flags/16/CC.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CC.png

1
dev/Geo/png/flags/16/CD.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CD.png

1
dev/Geo/png/flags/16/CF.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CF.png

1
dev/Geo/png/flags/16/CG.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CG.png

1
dev/Geo/png/flags/16/CH.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CH.png

1
dev/Geo/png/flags/16/CI.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CI.png

1
dev/Geo/png/flags/16/CK.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CK.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CL-AQ.png

1
dev/Geo/png/flags/16/CL.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CL.png

1
dev/Geo/png/flags/16/CM.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CM.png

1
dev/Geo/png/flags/16/CN.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CN.png

1
dev/Geo/png/flags/16/CO.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CO.png

1
dev/Geo/png/flags/16/CP.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CP.png

1
dev/Geo/png/flags/16/CR.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CR.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CSHH.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CSXX.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CTKI.png

1
dev/Geo/png/flags/16/CU.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CU.png

1
dev/Geo/png/flags/16/CV.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CV.png

1
dev/Geo/png/flags/16/CW.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CW.png

1
dev/Geo/png/flags/16/CX.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CX.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CY-NC.png

1
dev/Geo/png/flags/16/CY.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CY.png

1
dev/Geo/png/flags/16/CZ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/CZ.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DDDE.png

1
dev/Geo/png/flags/16/DE.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DE.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DEDE.png

1
dev/Geo/png/flags/16/DG.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DG.png

1
dev/Geo/png/flags/16/DJ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DJ.png

1
dev/Geo/png/flags/16/DK.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DK.png

1
dev/Geo/png/flags/16/DM.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DM.png

1
dev/Geo/png/flags/16/DO.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DO.png

View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DYBJ.png

1
dev/Geo/png/flags/16/DZ.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/DZ.png

1
dev/Geo/png/flags/16/EA.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/EA.png

1
dev/Geo/png/flags/16/EC.png Symbolic link
View file

@ -0,0 +1 @@
../../../../../source/Geo/png/flags/16/EC.png

Some files were not shown because too many files have changed in this diff Show more