@rr0/cms 0.1.16 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +20 -2
- package/dist/DefaultContentVisitor.d.ts +1 -3
- package/dist/OpenGraphCommand.js +1 -1
- package/dist/OpenGraphCommand.test.js +14 -0
- package/dist/RR0Build.d.ts +56 -0
- package/dist/RR0Build.js +254 -0
- package/dist/RR0Build.test.js +103 -0
- package/dist/RR0Context.d.ts +6 -4
- package/dist/RR0Context.js +4 -0
- package/dist/TableReplaceCommand.js +2 -1
- package/dist/anchor/AnchorReplaceCommandTest.js +23 -0
- package/dist/anchor/AnchorReplacerTest.js +60 -0
- package/dist/anchor/CaseAnchorHandler.js +1 -1
- package/dist/anchor/DataAnchorHandler.d.ts +1 -2
- package/dist/book/Book.d.ts +1 -1
- package/dist/book/BookDirectoryStep.d.ts +3 -3
- package/dist/book/BookDirectoryStep.js +2 -1
- package/dist/book/BookService.d.ts +3 -3
- package/dist/book/BookService.js +2 -2
- package/dist/index.d.ts +0 -2
- package/dist/index.js +0 -2
- package/dist/lang/LanguageReplaceCommant.test.js +17 -0
- package/dist/lang/RR0Messages.d.ts +1 -0
- package/dist/lang/RR0Messages_en.d.ts +1 -0
- package/dist/lang/RR0Messages_en.js +2 -1
- package/dist/lang/RR0Messages_fr.d.ts +1 -0
- package/dist/lang/RR0Messages_fr.js +2 -1
- package/dist/org/Cities.js +12 -20
- package/dist/org/CountryMessageList_en.js +2 -1
- package/dist/org/CountryMessageList_fr.js +2 -1
- package/dist/org/Organization.d.ts +1 -2
- package/dist/org/OrganizationFactory.d.ts +1 -2
- package/dist/org/OrganizationFactory.js +1 -1
- package/dist/org/OrganizationService.d.ts +5 -1
- package/dist/org/OrganizationService.js +5 -1
- package/dist/org/au/Australia_en.d.ts +1 -1
- package/dist/org/au/Australia_fr.d.ts +1 -1
- package/dist/org/au/region/vic/Victoria.d.ts +1 -1
- package/dist/org/au/region/vic/Victoria.js +1 -1
- package/dist/org/au/region/vic/VictoriaMessages_en.d.ts +2 -2
- package/dist/org/au/region/vic/VictoriaMessages_en.js +2 -2
- package/dist/org/au/region/vic/VictoriaMessages_fr.d.ts +2 -2
- package/dist/org/au/region/vic/VictoriaMessages_fr.js +2 -2
- package/dist/org/cn/China.d.ts +6 -0
- package/dist/org/cn/China.js +6 -0
- package/dist/org/cn/ChinaMessages.d.ts +1 -0
- package/dist/org/cn/ChinaMessages_cn.d.ts +3 -0
- package/dist/org/cn/ChinaMessages_cn.js +5 -0
- package/dist/org/cn/ChinaMessages_en.d.ts +3 -0
- package/dist/org/cn/ChinaMessages_en.js +5 -0
- package/dist/org/cn/ChinaMessages_fr.d.ts +3 -0
- package/dist/org/cn/ChinaMessages_fr.js +5 -0
- package/dist/org/cn/region/ChinaCities.d.ts +2 -0
- package/dist/org/cn/region/ChinaCities.js +4 -0
- package/dist/org/cn/region/ChinaRegion.d.ts +4 -0
- package/dist/org/cn/region/ChinaRegion.js +5 -0
- package/dist/org/cn/region/ChinaRegionCode.d.ts +3 -0
- package/dist/org/cn/region/ChinaRegionCode.js +4 -0
- package/dist/org/cn/region/ChinaRegions.d.ts +2 -0
- package/dist/org/cn/region/ChinaRegions.js +4 -0
- package/dist/org/cn/region/n/NorthChina.d.ts +2 -0
- package/dist/org/cn/region/n/NorthChina.js +4 -0
- package/dist/org/cn/region/n/NorthChinaDepartmentCode.d.ts +3 -0
- package/dist/org/cn/region/n/NorthChinaDepartmentCode.js +4 -0
- package/dist/org/cn/region/n/NorthChinaMessages_cn.d.ts +6 -0
- package/dist/org/cn/region/n/NorthChinaMessages_cn.js +6 -0
- package/dist/org/cn/region/n/NorthChinaMessages_en.d.ts +6 -0
- package/dist/org/cn/region/n/NorthChinaMessages_en.js +6 -0
- package/dist/org/cn/region/n/NorthChinaMessages_fr.d.ts +6 -0
- package/dist/org/cn/region/n/NorthChinaMessages_fr.js +6 -0
- package/dist/org/cn/region/n/ji/Hebei.d.ts +2 -0
- package/dist/org/cn/region/n/ji/Hebei.js +5 -0
- package/dist/org/cn/region/n/ji/HebeiCities.d.ts +2 -0
- package/dist/org/cn/region/n/ji/HebeiCities.js +4 -0
- package/dist/org/cn/region/n/ji/HebeiCityCode.d.ts +3 -0
- package/dist/org/cn/region/n/ji/HebeiCityCode.js +4 -0
- package/dist/org/cn/region/n/ji/HebeiMessages_cn.d.ts +4 -0
- package/dist/org/cn/region/n/ji/HebeiMessages_cn.js +6 -0
- package/dist/org/cn/region/n/ji/HebeiMessages_en.d.ts +4 -0
- package/dist/org/cn/region/n/ji/HebeiMessages_en.js +6 -0
- package/dist/org/cn/region/n/ji/HebeiMessages_fr.d.ts +4 -0
- package/dist/org/cn/region/n/ji/HebeiMessages_fr.js +6 -0
- package/dist/org/cn/region/n/ji/Tianjin/Tianjin.d.ts +2 -0
- package/dist/org/cn/region/n/ji/Tianjin/Tianjin.js +5 -0
- package/dist/org/cn/region/n/ji/Tianjin/TianjinMessages_cn.d.ts +2 -0
- package/dist/org/cn/region/n/ji/Tianjin/TianjinMessages_cn.js +2 -0
- package/dist/org/cn/region/n/ji/Tianjin/TianjinMessages_en.d.ts +2 -0
- package/dist/org/cn/region/n/ji/Tianjin/TianjinMessages_en.js +2 -0
- package/dist/org/cn/region/n/ji/Tianjin/TianjinMessages_fr.d.ts +2 -0
- package/dist/org/cn/region/n/ji/Tianjin/TianjinMessages_fr.js +3 -0
- package/dist/org/country/CountryMessages.test.d.ts +1 -0
- package/dist/org/country/CountryMessages.test.js +20 -0
- package/dist/org/country/CountryService.test.d.ts +1 -0
- package/dist/org/country/CountryService.test.js +11 -0
- package/dist/org/country/region/RegionMessages.test.d.ts +1 -0
- package/dist/org/country/region/RegionMessages.test.js +17 -0
- package/dist/org/country/region/RegionService.test.d.ts +1 -0
- package/dist/org/country/region/RegionService.test.js +13 -0
- package/dist/org/country/region/department/DeparmentMessages.test.d.ts +1 -0
- package/dist/org/country/region/department/DeparmentMessages.test.js +22 -0
- package/dist/org/country/region/department/DepartmentService.test.d.ts +1 -0
- package/dist/org/country/region/department/DepartmentService.test.js +13 -0
- package/dist/org/country/region/department/city/CityMessages.test.d.ts +1 -0
- package/dist/org/country/region/department/city/CityMessages.test.js +34 -0
- package/dist/org/country/region/department/city/CityService.test.d.ts +1 -0
- package/dist/org/country/region/department/city/CityService.test.js +19 -0
- package/dist/org/do/DominicanRepublicMessages.d.ts +1 -1
- package/dist/org/do/DominicanRepublic_en.d.ts +2 -2
- package/dist/org/do/DominicanRepublic_fr.d.ts +2 -2
- package/dist/org/eu/fr/FranceMessages.test.d.ts +1 -0
- package/dist/org/eu/fr/FranceMessages.test.js +11 -0
- package/dist/org/eu/fr/cnes/geipan/geipan/GeipanDatasource.test.d.ts +1 -0
- package/dist/org/eu/fr/cnes/geipan/geipan/GeipanDatasource.test.js +30 -0
- package/dist/org/us/region/UsaCountyCode.d.ts +7 -1
- package/dist/org/us/region/UsaCountyCode.js +7 -1
- package/dist/org/us/region/mn/MinnesotaCities.js +2 -2
- package/dist/org/us/region/mn/MinnesotaCounties.js +2 -2
- package/dist/org/us/region/mn/Minnesota_en.d.ts +2 -2
- package/dist/org/us/region/mn/Minnesota_en.js +2 -2
- package/dist/org/us/region/mn/Minnesota_fr.d.ts +2 -2
- package/dist/org/us/region/mn/Minnesota_fr.js +2 -2
- package/dist/org/us/region/mn/{kalamazoo/Kalamazoo.d.ts → hennepin/Hennepin.d.ts} +1 -1
- package/dist/org/us/region/mn/{kalamazoo/Kalamazoo.js → hennepin/Hennepin.js} +1 -1
- package/dist/org/us/region/mn/{kalamazoo/KalamazooCities.d.ts → hennepin/HennepinCities.d.ts} +1 -1
- package/dist/org/us/region/mn/hennepin/HennepinCities.js +4 -0
- package/dist/org/us/region/mn/hennepin/HennepinCityCode.d.ts +3 -0
- package/dist/org/us/region/mn/hennepin/HennepinCityCode.js +4 -0
- package/dist/org/us/region/mn/hennepin/HennepinMessages_en.d.ts +4 -0
- package/dist/org/us/region/mn/hennepin/HennepinMessages_en.js +6 -0
- package/dist/org/us/region/mn/hennepin/HennepinMessages_fr.d.ts +4 -0
- package/dist/org/us/region/mn/hennepin/HennepinMessages_fr.js +6 -0
- package/dist/org/us/region/mn/hennepin/Minneapolis/Minneapolis.d.ts +1 -0
- package/dist/org/us/region/mn/hennepin/Minneapolis/Minneapolis.js +5 -0
- package/dist/org/us/region/mn/hennepin/Minneapolis/MinneapolisMessages.d.ts +2 -0
- package/dist/org/us/region/mn/hennepin/Minneapolis/MinneapolisMessages.js +2 -0
- package/dist/org/us/region/mo/MissouriCities.js +2 -2
- package/dist/org/us/region/mo/MissouriCounties.js +2 -2
- package/dist/org/us/region/mo/Missouri_en.d.ts +2 -2
- package/dist/org/us/region/mo/Missouri_en.js +2 -2
- package/dist/org/us/region/mo/Missouri_fr.d.ts +2 -2
- package/dist/org/us/region/mo/Missouri_fr.js +2 -2
- package/dist/org/us/region/{mn/kalamazoo/galesburg/Galesburg.d.ts → mo/pike/Louisiana/Louisiana.d.ts} +1 -1
- package/dist/org/us/region/mo/pike/Louisiana/Louisiana.js +5 -0
- package/dist/org/us/region/{mn/kalamazoo/galesburg/GalesburgMessages.d.ts → mo/pike/Louisiana/LouisianaMessages.d.ts} +1 -1
- package/dist/org/us/region/{ms/kalamazoo/galesburg/GalesburgMessages.js → mo/pike/Louisiana/LouisianaMessages.js} +1 -1
- package/dist/org/us/region/mo/{kalamazoo/Kalamazoo.d.ts → pike/Pike.d.ts} +1 -1
- package/dist/org/us/region/mo/{kalamazoo/Kalamazoo.js → pike/Pike.js} +1 -1
- package/dist/org/us/region/mo/{kalamazoo/KalamazooCities.d.ts → pike/PikeCities.d.ts} +1 -1
- package/dist/org/us/region/mo/pike/PikeCities.js +4 -0
- package/dist/org/us/region/mo/pike/PikeCityCode.d.ts +3 -0
- package/dist/org/us/region/mo/pike/PikeCityCode.js +4 -0
- package/dist/org/us/region/mo/pike/PikeMessages_en.d.ts +4 -0
- package/dist/org/us/region/mo/pike/PikeMessages_en.js +6 -0
- package/dist/org/us/region/mo/pike/PikeMessages_fr.d.ts +4 -0
- package/dist/org/us/region/mo/pike/PikeMessages_fr.js +6 -0
- package/dist/org/us/region/ms/MississippiCities.js +2 -2
- package/dist/org/us/region/ms/MississippiCounties.js +2 -2
- package/dist/org/us/region/ms/Mississippi_en.d.ts +2 -2
- package/dist/org/us/region/ms/Mississippi_en.js +2 -2
- package/dist/org/us/region/ms/Mississippi_fr.d.ts +2 -2
- package/dist/org/us/region/ms/Mississippi_fr.js +2 -2
- package/dist/org/us/region/ms/{kalamazoo/Kalamazoo.d.ts → hinds/Hinds.d.ts} +1 -1
- package/dist/org/us/region/ms/{kalamazoo/Kalamazoo.js → hinds/Hinds.js} +1 -1
- package/dist/org/us/region/ms/{kalamazoo/KalamazooCities.d.ts → hinds/HindsCities.d.ts} +1 -1
- package/dist/org/us/region/ms/hinds/HindsCities.js +4 -0
- package/dist/org/us/region/ms/hinds/HindsCityCode.d.ts +3 -0
- package/dist/org/us/region/ms/hinds/HindsCityCode.js +4 -0
- package/dist/org/us/region/ms/hinds/HindsMessages_en.d.ts +4 -0
- package/dist/org/us/region/ms/hinds/HindsMessages_en.js +6 -0
- package/dist/org/us/region/ms/hinds/HindsMessages_fr.d.ts +4 -0
- package/dist/org/us/region/ms/hinds/HindsMessages_fr.js +6 -0
- package/dist/org/us/region/ms/hinds/Jackson/Jackson.d.ts +1 -0
- package/dist/org/us/region/ms/hinds/Jackson/Jackson.js +5 -0
- package/dist/org/us/region/ms/{kalamazoo/galesburg/GalesburgMessages.d.ts → hinds/Jackson/JacksonMessages.d.ts} +1 -1
- package/dist/org/us/region/ms/hinds/Jackson/JacksonMessages.js +2 -0
- package/dist/org/us/region/mt/MontanaCities.js +2 -2
- package/dist/org/us/region/mt/MontanaCounties.js +2 -2
- package/dist/org/us/region/mt/Montana_en.d.ts +2 -2
- package/dist/org/us/region/mt/Montana_en.js +2 -2
- package/dist/org/us/region/mt/Montana_fr.d.ts +2 -2
- package/dist/org/us/region/mt/Montana_fr.js +2 -2
- package/dist/org/us/region/mt/{kalamazoo/Kalamazoo.d.ts → cascade/Cascade.d.ts} +1 -1
- package/dist/org/us/region/mt/{kalamazoo/Kalamazoo.js → cascade/Cascade.js} +1 -1
- package/dist/org/us/region/mt/{kalamazoo/KalamazooCities.d.ts → cascade/CascadeCities.d.ts} +1 -1
- package/dist/org/us/region/mt/cascade/CascadeCities.js +4 -0
- package/dist/org/us/region/mt/cascade/CascadeCityCode.d.ts +3 -0
- package/dist/org/us/region/mt/cascade/CascadeCityCode.js +4 -0
- package/dist/org/us/region/mt/cascade/CascadeMessages_en.d.ts +4 -0
- package/dist/org/us/region/mt/cascade/CascadeMessages_en.js +6 -0
- package/dist/org/us/region/mt/cascade/CascadeMessages_fr.d.ts +4 -0
- package/dist/org/us/region/mt/cascade/CascadeMessages_fr.js +6 -0
- package/dist/org/us/region/mt/cascade/GreatFalls/GreatFalls.d.ts +1 -0
- package/dist/org/us/region/mt/cascade/GreatFalls/GreatFalls.js +5 -0
- package/dist/org/us/region/mt/{kalamazoo/galesburg/GalesburgMessages.d.ts → cascade/GreatFalls/GreatFallsMessages.d.ts} +1 -1
- package/dist/org/us/region/mt/cascade/GreatFalls/GreatFallsMessages.js +2 -0
- package/dist/org/us/region/nh/NewHampshireCities.js +2 -2
- package/dist/org/us/region/nh/NewHampshireCounties.js +2 -2
- package/dist/org/us/region/nh/NewHampshire_en.d.ts +2 -2
- package/dist/org/us/region/nh/NewHampshire_en.js +2 -2
- package/dist/org/us/region/nh/NewHampshire_fr.d.ts +2 -2
- package/dist/org/us/region/nh/NewHampshire_fr.js +2 -2
- package/dist/org/us/region/nh/rockingham/Portsmouth/Portsmouth.d.ts +1 -0
- package/dist/org/us/region/nh/rockingham/Portsmouth/Portsmouth.js +5 -0
- package/dist/org/us/region/nh/rockingham/Portsmouth/PortsmouthMessages.d.ts +2 -0
- package/dist/org/us/region/nh/rockingham/Portsmouth/PortsmouthMessages.js +2 -0
- package/dist/org/us/region/nh/rockingham/Rockingham.d.ts +2 -0
- package/dist/org/us/region/nh/{kalamazoo/Kalamazoo.js → rockingham/Rockingham.js} +1 -1
- package/dist/org/us/region/nh/rockingham/RockinghamCities.d.ts +2 -0
- package/dist/org/us/region/nh/rockingham/RockinghamCities.js +4 -0
- package/dist/org/us/region/nh/rockingham/RockinghamCityCode.d.ts +3 -0
- package/dist/org/us/region/nh/rockingham/RockinghamCityCode.js +4 -0
- package/dist/org/us/region/nh/rockingham/RockinghamMessages_en.d.ts +4 -0
- package/dist/org/us/region/nh/rockingham/RockinghamMessages_en.js +6 -0
- package/dist/org/us/region/nh/rockingham/RockinghamMessages_fr.d.ts +4 -0
- package/dist/org/us/region/nh/rockingham/RockinghamMessages_fr.js +6 -0
- package/dist/org/us/region/nv/NevadaCities.js +2 -2
- package/dist/org/us/region/nv/NevadaCounties.js +2 -2
- package/dist/org/us/region/nv/Nevada_en.d.ts +2 -2
- package/dist/org/us/region/nv/Nevada_en.js +2 -2
- package/dist/org/us/region/nv/Nevada_fr.d.ts +2 -2
- package/dist/org/us/region/nv/Nevada_fr.js +2 -2
- package/dist/org/us/region/nv/clark/Clark.d.ts +2 -0
- package/dist/org/us/region/nv/{kalamazoo/Kalamazoo.js → clark/Clark.js} +1 -1
- package/dist/org/us/region/nv/clark/ClarkCities.d.ts +2 -0
- package/dist/org/us/region/nv/clark/ClarkCities.js +4 -0
- package/dist/org/us/region/nv/clark/ClarkCityCode.d.ts +3 -0
- package/dist/org/us/region/nv/clark/ClarkCityCode.js +4 -0
- package/dist/org/us/region/nv/clark/ClarkMessages_en.d.ts +4 -0
- package/dist/org/us/region/nv/clark/ClarkMessages_en.js +6 -0
- package/dist/org/us/region/nv/clark/ClarkMessages_fr.d.ts +4 -0
- package/dist/org/us/region/nv/clark/ClarkMessages_fr.js +6 -0
- package/dist/org/us/region/nv/clark/LasVegas/LasVegas.d.ts +1 -0
- package/dist/org/us/region/nv/clark/LasVegas/LasVegas.js +5 -0
- package/dist/org/us/region/{mo/kalamazoo/galesburg/GalesburgMessages.d.ts → nv/clark/LasVegas/LasVegasMessages.d.ts} +1 -1
- package/dist/org/us/region/nv/clark/LasVegas/LasVegasMessages.js +2 -0
- package/dist/people/People.d.ts +1 -2
- package/dist/people/People.test.d.ts +1 -0
- package/dist/people/People.test.js +34 -0
- package/dist/people/PeopleDirectoryStep.d.ts +2 -2
- package/dist/people/PeopleDirectoryStepFactory.d.ts +27 -14
- package/dist/people/PeopleDirectoryStepFactory.js +66 -44
- package/dist/people/PeopleFactory.d.ts +1 -2
- package/dist/people/PeopleFactory.js +1 -1
- package/dist/people/PeopleFactory.test.d.ts +1 -0
- package/dist/people/PeopleFactory.test.js +81 -0
- package/dist/people/PeopleRegexReplaceCommand.test.d.ts +1 -0
- package/dist/people/PeopleRegexReplaceCommand.test.js +17 -0
- package/dist/people/PeopleReplacer.test.d.ts +1 -0
- package/dist/people/PeopleReplacer.test.js +58 -0
- package/dist/people/PeopleService.d.ts +1 -1
- package/dist/people/PeopleService.js +1 -1
- package/dist/people/author/AuthorReplaceCommandTest.d.ts +1 -0
- package/dist/people/author/AuthorReplaceCommandTest.js +49 -0
- package/dist/place/Place.d.ts +1 -2
- package/dist/place/PlaceReplacer.test.d.ts +1 -0
- package/dist/place/PlaceReplacer.test.js +91 -0
- package/dist/place/PlaceService.js +2 -2
- package/dist/place/PlaceService.test.d.ts +1 -0
- package/dist/place/PlaceService.test.js +28 -0
- package/dist/science/crypto/ufo/enquete/dossier/CaseDirectoryStep.d.ts +2 -3
- package/dist/science/crypto/ufo/enquete/dossier/CaseDirectoryStep.js +0 -4
- package/dist/science/crypto/ufo/enquete/dossier/CaseDirectoryStep.test.d.ts +1 -0
- package/dist/science/crypto/ufo/enquete/dossier/CaseDirectoryStep.test.js +34 -0
- package/dist/science/crypto/ufo/enquete/dossier/CaseFactory.d.ts +1 -2
- package/dist/science/crypto/ufo/enquete/dossier/CaseFactory.js +1 -1
- package/dist/science/crypto/ufo/enquete/dossier/CaseService.d.ts +1 -1
- package/dist/science/crypto/ufo/enquete/dossier/CaseService.js +1 -1
- package/dist/search/SearchIndexStep.js +2 -2
- package/dist/search/SearchVisitor.js +1 -1
- package/dist/source/PersistentSourceRegistry.d.ts +2 -2
- package/dist/source/PersistentSourceRegistry.js +8 -3
- package/dist/source/SourceFactory.d.ts +2 -2
- package/dist/source/SourceFactory.js +1 -1
- package/dist/source/SourceIndexStep.js +2 -2
- package/dist/source/SourceRegistry.d.ts +2 -2
- package/dist/source/SourceRenderer.d.ts +1 -1
- package/dist/source/SourceRenderer.js +1 -1
- package/dist/source/index.d.ts +0 -3
- package/dist/source/index.js +0 -3
- package/dist/tech/info/soft/API.d.ts +1 -1
- package/dist/tech/info/soft/APIFactory.d.ts +1 -2
- package/dist/tech/info/soft/APIFactory.js +1 -1
- package/dist/tech/info/soft/proj/impl/lang/CodeReplacerTest.d.ts +1 -0
- package/dist/tech/info/soft/proj/impl/lang/CodeReplacerTest.js +50 -0
- package/dist/test/RR0TestUtil.d.ts +21 -0
- package/dist/test/RR0TestUtil.js +72 -0
- package/dist/test/index.d.ts +1 -0
- package/dist/test/index.js +1 -0
- package/dist/time/EventRenderer.d.ts +3 -3
- package/dist/time/EventRenderer.js +1 -1
- package/dist/time/EventReplacerFactory.d.ts +1 -2
- package/dist/time/Time.js +1 -1
- package/dist/time/Time.test.d.ts +1 -0
- package/dist/time/Time.test.js +48 -0
- package/dist/time/TimeEventRenderer.test.d.ts +1 -0
- package/dist/time/TimeEventRenderer.test.js +56 -0
- package/dist/time/TimeService.d.ts +1 -2
- package/dist/time/TimeService.js +1 -1
- package/dist/time/TimeTagReplaceCommand.test.d.ts +1 -0
- package/dist/time/TimeTagReplaceCommand.test.js +17 -0
- package/dist/time/TimeTestUtil.d.ts +1 -1
- package/dist/time/TimeTestUtil.js +2 -2
- package/dist/time/TimeUrlBuilder.test.d.ts +1 -0
- package/dist/time/TimeUrlBuilder.test.js +46 -0
- package/dist/time/TitleReplaceCommand.test.d.ts +1 -0
- package/dist/time/TitleReplaceCommand.test.js +44 -0
- package/dist/time/datasource/ChronologyReplacer.test.d.ts +1 -0
- package/dist/time/datasource/ChronologyReplacer.test.js +29 -0
- package/dist/time/datasource/CsvMapper.test.d.ts +1 -0
- package/dist/time/datasource/CsvMapper.test.js +50 -0
- package/dist/time/datasource/DatasourceTestCase.d.ts +1 -1
- package/dist/time/datasource/DatasourceTestCase.js +3 -3
- package/dist/time/datasource/FileSource.d.ts +2 -1
- package/dist/time/datasource/FileSource.js +1 -1
- package/dist/time/datasource/JsonMapper.test.d.ts +1 -0
- package/dist/time/datasource/JsonMapper.test.js +23 -0
- package/dist/time/datasource/baseovnifrance/BaseOvniFranceCaseSummaryRR0Mapper.test.d.ts +1 -0
- package/dist/time/datasource/baseovnifrance/BaseOvniFranceCaseSummaryRR0Mapper.test.js +72 -0
- package/dist/time/datasource/baseovnifrance/BaseOvniFranceCsv.test.d.ts +1 -0
- package/dist/time/datasource/baseovnifrance/BaseOvniFranceCsv.test.js +44 -0
- package/dist/time/datasource/baseovnifrance/BaseOvniFranceDatasource.test.d.ts +1 -0
- package/dist/time/datasource/baseovnifrance/BaseOvniFranceDatasource.test.js +30 -0
- package/dist/time/datasource/fufora/FuforaDatasource.test.d.ts +1 -0
- package/dist/time/datasource/fufora/FuforaDatasource.test.js +30 -0
- package/dist/time/datasource/nuforc/NuforcDatasource.test.d.ts +1 -0
- package/dist/time/datasource/nuforc/NuforcDatasource.test.js +30 -0
- package/dist/time/datasource/nuforc/NuforcRR0Mapper.test.d.ts +1 -0
- package/dist/time/datasource/nuforc/NuforcRR0Mapper.test.js +110 -0
- package/dist/time/datasource/rr0/RR0CaseSummary.d.ts +1 -2
- package/dist/time/datasource/rr0/RR0Datasource.test.d.ts +19 -0
- package/dist/time/datasource/rr0/RR0Datasource.test.js +82 -0
- package/dist/time/datasource/rr0/RR0HttpDatasource.d.ts +1 -1
- package/dist/time/datasource/sceau/SceauDatasource.test.d.ts +17 -0
- package/dist/time/datasource/sceau/SceauDatasource.test.js +84 -0
- package/dist/time/datasource/ufo-search/UfoSearchCaseRR0Mapper.js +1 -1
- package/dist/time/datasource/ufo-search/UfoSearchDatasource.test.d.ts +1 -0
- package/dist/time/datasource/ufo-search/UfoSearchDatasource.test.js +30 -0
- package/dist/time/datasource/ufo-search/UfoSearchFileDatasource.js +2 -2
- package/dist/time/datasource/urecat/UrecatDatasource.test.d.ts +1 -0
- package/dist/time/datasource/urecat/UrecatDatasource.test.js +56 -0
- package/dist/time/datasource/urecat/UrecatHttpDatasource.js +1 -1
- package/dist/time/html/TimeRenderer.js +1 -1
- package/dist/time/html/TimeReplacer.test.d.ts +1 -0
- package/dist/time/html/TimeReplacer.test.js +225 -0
- package/dist/time/text/RelativeTimeTextBuilder.js +53 -102
- package/dist/time/text/RelativeTimeTextBuilder.test.d.ts +1 -0
- package/dist/time/text/RelativeTimeTextBuilder.test.js +125 -0
- package/dist/time/text/TimeTextBuilder.d.ts +4 -5
- package/dist/time/text/TimeTextBuilder.js +8 -21
- package/dist/time/text/TimeTextBuilder.test.d.ts +1 -0
- package/dist/time/text/TimeTextBuilder.test.js +63 -0
- package/dist/util/cli/CLI.test.d.ts +1 -0
- package/dist/util/cli/CLI.test.js +13 -0
- package/dist/util/html/HtmlTable.test.d.ts +1 -0
- package/dist/util/html/HtmlTable.test.js +11 -0
- package/dist/util/string/StringUtil.test.d.ts +1 -0
- package/dist/util/string/StringUtil.test.js +22 -0
- package/dist/util/url/UrlUtil.test.d.ts +1 -0
- package/dist/util/url/UrlUtil.test.js +14 -0
- package/package.json +11 -6
- package/dist/build.js +0 -299
- package/dist/data/AbstractDataFactory.d.ts +0 -16
- package/dist/data/AbstractDataFactory.js +0 -60
- package/dist/data/AbstractDataService.d.ts +0 -12
- package/dist/data/AbstractDataService.js +0 -13
- package/dist/data/AllDataService.d.ts +0 -16
- package/dist/data/AllDataService.js +0 -54
- package/dist/data/RR0Data.d.ts +0 -81
- package/dist/data/RR0DataFactory.d.ts +0 -7
- package/dist/data/TypedDataFactory.d.ts +0 -14
- package/dist/data/TypedDataFactory.js +0 -29
- package/dist/data/index.d.ts +0 -6
- package/dist/data/index.js +0 -6
- package/dist/event/RR0Event.d.ts +0 -7
- package/dist/event/RR0EventFactory.d.ts +0 -7
- package/dist/event/RR0EventFactory.js +0 -21
- package/dist/event/index.d.ts +0 -2
- package/dist/event/index.js +0 -2
- package/dist/org/us/region/mn/kalamazoo/KalamazooCities.js +0 -4
- package/dist/org/us/region/mn/kalamazoo/KalamazooCityCode.d.ts +0 -3
- package/dist/org/us/region/mn/kalamazoo/KalamazooCityCode.js +0 -4
- package/dist/org/us/region/mn/kalamazoo/KalamazooMessages_en.d.ts +0 -4
- package/dist/org/us/region/mn/kalamazoo/KalamazooMessages_en.js +0 -6
- package/dist/org/us/region/mn/kalamazoo/KalamazooMessages_fr.d.ts +0 -4
- package/dist/org/us/region/mn/kalamazoo/KalamazooMessages_fr.js +0 -6
- package/dist/org/us/region/mn/kalamazoo/galesburg/Galesburg.js +0 -5
- package/dist/org/us/region/mn/kalamazoo/galesburg/GalesburgMessages.js +0 -2
- package/dist/org/us/region/mo/kalamazoo/KalamazooCities.js +0 -4
- package/dist/org/us/region/mo/kalamazoo/KalamazooCityCode.d.ts +0 -3
- package/dist/org/us/region/mo/kalamazoo/KalamazooCityCode.js +0 -4
- package/dist/org/us/region/mo/kalamazoo/KalamazooMessages_en.d.ts +0 -4
- package/dist/org/us/region/mo/kalamazoo/KalamazooMessages_en.js +0 -6
- package/dist/org/us/region/mo/kalamazoo/KalamazooMessages_fr.d.ts +0 -4
- package/dist/org/us/region/mo/kalamazoo/KalamazooMessages_fr.js +0 -6
- package/dist/org/us/region/mo/kalamazoo/galesburg/Galesburg.d.ts +0 -1
- package/dist/org/us/region/mo/kalamazoo/galesburg/Galesburg.js +0 -5
- package/dist/org/us/region/mo/kalamazoo/galesburg/GalesburgMessages.js +0 -2
- package/dist/org/us/region/ms/kalamazoo/KalamazooCities.js +0 -4
- package/dist/org/us/region/ms/kalamazoo/KalamazooCityCode.d.ts +0 -3
- package/dist/org/us/region/ms/kalamazoo/KalamazooCityCode.js +0 -4
- package/dist/org/us/region/ms/kalamazoo/KalamazooMessages_en.d.ts +0 -4
- package/dist/org/us/region/ms/kalamazoo/KalamazooMessages_en.js +0 -6
- package/dist/org/us/region/ms/kalamazoo/KalamazooMessages_fr.d.ts +0 -4
- package/dist/org/us/region/ms/kalamazoo/KalamazooMessages_fr.js +0 -6
- package/dist/org/us/region/ms/kalamazoo/galesburg/Galesburg.d.ts +0 -1
- package/dist/org/us/region/ms/kalamazoo/galesburg/Galesburg.js +0 -5
- package/dist/org/us/region/mt/kalamazoo/KalamazooCities.js +0 -4
- package/dist/org/us/region/mt/kalamazoo/KalamazooCityCode.d.ts +0 -3
- package/dist/org/us/region/mt/kalamazoo/KalamazooCityCode.js +0 -4
- package/dist/org/us/region/mt/kalamazoo/KalamazooMessages_en.d.ts +0 -4
- package/dist/org/us/region/mt/kalamazoo/KalamazooMessages_en.js +0 -6
- package/dist/org/us/region/mt/kalamazoo/KalamazooMessages_fr.d.ts +0 -4
- package/dist/org/us/region/mt/kalamazoo/KalamazooMessages_fr.js +0 -6
- package/dist/org/us/region/mt/kalamazoo/galesburg/Galesburg.d.ts +0 -1
- package/dist/org/us/region/mt/kalamazoo/galesburg/Galesburg.js +0 -5
- package/dist/org/us/region/mt/kalamazoo/galesburg/GalesburgMessages.js +0 -2
- package/dist/org/us/region/nh/kalamazoo/Kalamazoo.d.ts +0 -2
- package/dist/org/us/region/nh/kalamazoo/KalamazooCities.d.ts +0 -2
- package/dist/org/us/region/nh/kalamazoo/KalamazooCities.js +0 -4
- package/dist/org/us/region/nh/kalamazoo/KalamazooCityCode.d.ts +0 -3
- package/dist/org/us/region/nh/kalamazoo/KalamazooCityCode.js +0 -4
- package/dist/org/us/region/nh/kalamazoo/KalamazooMessages_en.d.ts +0 -4
- package/dist/org/us/region/nh/kalamazoo/KalamazooMessages_en.js +0 -6
- package/dist/org/us/region/nh/kalamazoo/KalamazooMessages_fr.d.ts +0 -4
- package/dist/org/us/region/nh/kalamazoo/KalamazooMessages_fr.js +0 -6
- package/dist/org/us/region/nh/kalamazoo/galesburg/Galesburg.d.ts +0 -1
- package/dist/org/us/region/nh/kalamazoo/galesburg/Galesburg.js +0 -5
- package/dist/org/us/region/nh/kalamazoo/galesburg/GalesburgMessages.d.ts +0 -2
- package/dist/org/us/region/nh/kalamazoo/galesburg/GalesburgMessages.js +0 -2
- package/dist/org/us/region/nv/kalamazoo/Kalamazoo.d.ts +0 -2
- package/dist/org/us/region/nv/kalamazoo/KalamazooCities.d.ts +0 -2
- package/dist/org/us/region/nv/kalamazoo/KalamazooCities.js +0 -4
- package/dist/org/us/region/nv/kalamazoo/KalamazooCityCode.d.ts +0 -3
- package/dist/org/us/region/nv/kalamazoo/KalamazooCityCode.js +0 -4
- package/dist/org/us/region/nv/kalamazoo/KalamazooMessages_en.d.ts +0 -4
- package/dist/org/us/region/nv/kalamazoo/KalamazooMessages_en.js +0 -6
- package/dist/org/us/region/nv/kalamazoo/KalamazooMessages_fr.d.ts +0 -4
- package/dist/org/us/region/nv/kalamazoo/KalamazooMessages_fr.js +0 -6
- package/dist/org/us/region/nv/kalamazoo/galesburg/Galesburg.d.ts +0 -1
- package/dist/org/us/region/nv/kalamazoo/galesburg/Galesburg.js +0 -5
- package/dist/org/us/region/nv/kalamazoo/galesburg/GalesburgMessages.d.ts +0 -2
- package/dist/org/us/region/nv/kalamazoo/galesburg/GalesburgMessages.js +0 -2
- package/dist/source/Article.d.ts +0 -4
- package/dist/source/ArticleFactory.d.ts +0 -7
- package/dist/source/ArticleFactory.js +0 -11
- package/dist/source/Source.d.ts +0 -45
- package/tsconfig.json +0 -23
- package/tsconfig.prod.json +0 -10
- /package/dist/{build.d.ts → OpenGraphCommand.test.d.ts} +0 -0
- /package/dist/{data/RR0Data.js → RR0Build.test.d.ts} +0 -0
- /package/dist/{data/RR0DataFactory.js → anchor/AnchorReplaceCommandTest.d.ts} +0 -0
- /package/dist/{event/RR0Event.js → anchor/AnchorReplacerTest.d.ts} +0 -0
- /package/dist/{source/Article.js → lang/LanguageReplaceCommant.test.d.ts} +0 -0
- /package/dist/{source/Source.js → org/cn/ChinaMessages.js} +0 -0
|
@@ -0,0 +1,225 @@
|
|
|
1
|
+
import { TimeReplacer } from "./TimeReplacer.js";
|
|
2
|
+
import { rr0TestUtil } from "../../test";
|
|
3
|
+
import { describe, expect, test } from "@javarome/testscript";
|
|
4
|
+
import { TimeRenderer } from "./TimeRenderer.js";
|
|
5
|
+
import { TimeElementFactory } from "./TimeElementFactory.js";
|
|
6
|
+
import { TimeTextBuilder } from "../text/TimeTextBuilder.js";
|
|
7
|
+
import path from "path";
|
|
8
|
+
describe("TimeReplacer", async () => {
|
|
9
|
+
const timeRoot = rr0TestUtil.time.timeOptions.root;
|
|
10
|
+
const timeService = await rr0TestUtil.time.getService({
|
|
11
|
+
root: timeRoot,
|
|
12
|
+
files: [
|
|
13
|
+
path.join(timeRoot, "1/9/4/7/07/02/index.html"),
|
|
14
|
+
path.join(timeRoot, "2/0/0/3/index.html"),
|
|
15
|
+
path.join(timeRoot, "2/0/0/3/12/24/index.html"),
|
|
16
|
+
path.join(timeRoot, "2/0/0/4/index.html"),
|
|
17
|
+
path.join(timeRoot, "2/0/0/4/09/index.html"),
|
|
18
|
+
path.join(timeRoot, "2/0/0/5/index.html"),
|
|
19
|
+
path.join(timeRoot, "2/0/0/5/08/23/index.html"),
|
|
20
|
+
path.join(timeRoot, "2/0/0/6/index.html"),
|
|
21
|
+
path.join(timeRoot, "2/0/0/6/07/14/index.html"),
|
|
22
|
+
path.join(timeRoot, "2/0/0/7/06/15/index.html")
|
|
23
|
+
]
|
|
24
|
+
});
|
|
25
|
+
const textBuilder = new TimeTextBuilder(rr0TestUtil.intlOptions);
|
|
26
|
+
const timeRenderer = new TimeRenderer(timeService, textBuilder);
|
|
27
|
+
const timeElementFactory = new TimeElementFactory(timeRenderer);
|
|
28
|
+
const replacer = new TimeReplacer(timeElementFactory);
|
|
29
|
+
function timeUrl(pathStr) {
|
|
30
|
+
return path.join("/", timeService.root, pathStr, "index.html");
|
|
31
|
+
}
|
|
32
|
+
test("parses year", async () => {
|
|
33
|
+
{
|
|
34
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
35
|
+
const timeEl = context.file.document.createElement("time");
|
|
36
|
+
timeEl.textContent = "2003";
|
|
37
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
38
|
+
expect(replacement.outerHTML).toBe(`<span class="time-resolved">en <a href="${path.join("/", timeService.root, "2/0/0/3/")}"><time datetime="2003">2003</time></a></span>`);
|
|
39
|
+
expect(context.time.getYear()).toBe(2003);
|
|
40
|
+
expect(context.time.getMonth()).toBe(undefined);
|
|
41
|
+
expect(context.time.getDayOfMonth()).toBe(undefined);
|
|
42
|
+
expect(context.time.getHour()).toBe(undefined);
|
|
43
|
+
expect(context.time.getMinutes()).toBe(undefined);
|
|
44
|
+
expect(context.time.getTimeZone()).toBe(undefined);
|
|
45
|
+
}
|
|
46
|
+
{
|
|
47
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
48
|
+
const timeEl = context.file.document.createElement("time");
|
|
49
|
+
timeEl.innerHTML = "2003\n ";
|
|
50
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
51
|
+
expect(replacement.outerHTML).toBe(`<span class="time-resolved">en <a href="${path.join("/", timeService.root, "2/0/0/3/")}"><time datetime="2003">2003</time></a></span>`);
|
|
52
|
+
expect(context.time.getYear()).toBe(2003);
|
|
53
|
+
expect(context.time.getMonth()).toBe(undefined);
|
|
54
|
+
expect(context.time.getDayOfMonth()).toBe(undefined);
|
|
55
|
+
expect(context.time.getHour()).toBe(undefined);
|
|
56
|
+
expect(context.time.getMinutes()).toBe(undefined);
|
|
57
|
+
expect(context.time.getTimeZone()).toBe(undefined);
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
test("parses interval", async () => {
|
|
61
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
62
|
+
const interval = "2003/2004";
|
|
63
|
+
const original = context.file.document.createElement("time");
|
|
64
|
+
original.textContent = interval;
|
|
65
|
+
const replaced = await replacer.replacement(context, original);
|
|
66
|
+
expect(replaced.outerHTML)
|
|
67
|
+
.toBe(`<span class="time-interval"><span class="time-resolved">en <a href="${path.join("/", timeService.root, "2/0/0/3/")}"><time datetime="2003">2003</time></a></span> à <span class="time-resolved">en <a href="${path.join("/", timeService.root, "2/0/0/4/")}"><time datetime="2004">2004</time></a></span></span>`);
|
|
68
|
+
expect(context.time.getYear()).toBe(2004);
|
|
69
|
+
expect(context.time.getMonth()).toBe(undefined);
|
|
70
|
+
expect(context.time.getDayOfMonth()).toBe(undefined);
|
|
71
|
+
expect(context.time.getHour()).toBe(undefined);
|
|
72
|
+
expect(context.time.getMinutes()).toBe(undefined);
|
|
73
|
+
expect(context.time.getTimeZone()).toBe(undefined);
|
|
74
|
+
});
|
|
75
|
+
test("parses unsupported", async () => {
|
|
76
|
+
const interval = "moi";
|
|
77
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
78
|
+
const original = context.file.document.createElement("time");
|
|
79
|
+
original.textContent = interval;
|
|
80
|
+
const replacement = await replacer.replacement(context, original);
|
|
81
|
+
expect(replacement.outerHTML).toBe(`<time>moi</time>`);
|
|
82
|
+
expect(context.time.getYear()).toBe(1990);
|
|
83
|
+
expect(context.time.getMonth()).toBe(8);
|
|
84
|
+
expect(context.time.getDayOfMonth()).toBe(undefined);
|
|
85
|
+
expect(context.time.getHour()).toBe(undefined);
|
|
86
|
+
expect(context.time.getMinutes()).toBe(undefined);
|
|
87
|
+
expect(context.time.getTimeZone()).toBe(undefined);
|
|
88
|
+
});
|
|
89
|
+
test("parses timezone", async () => {
|
|
90
|
+
{
|
|
91
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
92
|
+
const original = context.file.document.createElement("time");
|
|
93
|
+
original.textContent = "2003-12-24T10:22CDT";
|
|
94
|
+
const replacement = await replacer.replacement(context, original);
|
|
95
|
+
expect(replacement.outerHTML)
|
|
96
|
+
.toBe(`<span class="time-resolved">le <a href="${path.join("/", timeService.root, "2/0/0/3/12/24/")}"><time datetime="2003-12-24T10:22-05">mercredi 24 décembre 2003 à 10:22</time></a></span>`); // TODO: Text should have timezone info
|
|
97
|
+
expect(context.time.getYear()).toBe(2003);
|
|
98
|
+
expect(context.time.getMonth()).toBe(12);
|
|
99
|
+
expect(context.time.getDayOfMonth()).toBe(24);
|
|
100
|
+
expect(context.time.getHour()).toBe(10);
|
|
101
|
+
expect(context.time.getMinutes()).toBe(22);
|
|
102
|
+
expect(context.time.getTimeshift()).toBe("-05");
|
|
103
|
+
}
|
|
104
|
+
/*{
|
|
105
|
+
const context = rr0TestUtil.newHtmlContext("time/1/9/9/0/08/index.html", "")
|
|
106
|
+
const interval = "2003-12-24 (CDT)"
|
|
107
|
+
const replacer = new TimeReplacer(["time/2/0/0/3/12/24"])
|
|
108
|
+
expect(replacer.replacement(context, `<time>${interval}</time>`, interval))
|
|
109
|
+
.toBe(`<a href="/time/2/0/0/3/12/24/">mercredi 24 décembre 2003</a>`) // TODO: Text should have timezone info
|
|
110
|
+
expect(context.time.getYear()).toBe(2003)
|
|
111
|
+
expect(context.time.getMonth()).toBe(12)
|
|
112
|
+
expect(context.time.getDayOfMonth()).toBe(24)
|
|
113
|
+
expect(context.time.getHour()).toBe(undefined)
|
|
114
|
+
expect(context.time.getMinutes()).toBe(undefined)
|
|
115
|
+
expect(context.time.getTimeZone()).toBe("CDT")
|
|
116
|
+
}*/
|
|
117
|
+
});
|
|
118
|
+
test("parses month", async () => {
|
|
119
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
120
|
+
const original = context.file.document.createElement("time");
|
|
121
|
+
original.textContent = "2004-09";
|
|
122
|
+
const replacement = await replacer.replacement(context, original);
|
|
123
|
+
expect(replacement.outerHTML).toBe(`<span class="time-resolved">en <a href="${path.join("/", timeService.root, "2/0/0/4/09/")}"><time datetime="2004-09">septembre 2004</time></a></span>`);
|
|
124
|
+
expect(context.time.getYear()).toBe(2004);
|
|
125
|
+
expect(context.time.getMonth()).toBe(9);
|
|
126
|
+
expect(context.time.getDayOfMonth()).toBe(undefined);
|
|
127
|
+
expect(context.time.getHour()).toBe(undefined);
|
|
128
|
+
expect(context.time.getMinutes()).toBe(undefined);
|
|
129
|
+
});
|
|
130
|
+
describe("parses day", () => {
|
|
131
|
+
test("from full date", async () => {
|
|
132
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
133
|
+
const timeEl = context.file.document.createElement("time");
|
|
134
|
+
timeEl.textContent = "2005-08-23";
|
|
135
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
136
|
+
expect(replacement.outerHTML).toBe(`<span class="time-resolved">le <a href="${path.join("/", timeService.root, "2/0/0/5/08/23/")}"><time datetime="2005-08-23">mardi 23 août 2005</time></a></span>`);
|
|
137
|
+
expect(context.time.getYear()).toBe(2005);
|
|
138
|
+
expect(context.time.getMonth()).toBe(8);
|
|
139
|
+
expect(context.time.getDayOfMonth()).toBe(23);
|
|
140
|
+
expect(context.time.getHour()).toBe(undefined);
|
|
141
|
+
expect(context.time.getMinutes()).toBe(undefined);
|
|
142
|
+
});
|
|
143
|
+
});
|
|
144
|
+
test("reset context", async () => {
|
|
145
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
146
|
+
const timeEl = context.file.document.createElement("time");
|
|
147
|
+
timeEl.textContent = "2005";
|
|
148
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
149
|
+
expect(replacement.outerHTML).toBe(`<span class="time-resolved">en <a href="${rr0TestUtil.time.url("2/0/0/5/")}"><time datetime="2005">2005</time></a></span>`);
|
|
150
|
+
const original = context.file.document.createElement("time");
|
|
151
|
+
const datetime = "2006";
|
|
152
|
+
original.textContent = datetime;
|
|
153
|
+
const replacement2 = await replacer.replacement(context, original);
|
|
154
|
+
expect(replacement2.outerHTML).toBe(`<span class="time-resolved">en <a href="${rr0TestUtil.time.url("2/0/0/6/")}"><time datetime="${datetime}" title="2006">l'année suivante</time></a></span>`);
|
|
155
|
+
});
|
|
156
|
+
test("avoids linking to current file", async () => {
|
|
157
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
158
|
+
const timeEl = context.file.document.createElement("time");
|
|
159
|
+
const datetime = "1954-10-01";
|
|
160
|
+
timeEl.textContent = datetime;
|
|
161
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
162
|
+
expect(replacement.outerHTML)
|
|
163
|
+
.toBe(`<span class="time-resolved">le <time datetime="${datetime}">vendredi 1 octobre 1954</time></span>`);
|
|
164
|
+
});
|
|
165
|
+
describe("parse duration", () => {
|
|
166
|
+
test("with days, hours, minutes and seconds", async () => {
|
|
167
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
168
|
+
const timeEl = context.file.document.createElement("time");
|
|
169
|
+
const datetime = "P2D10H23M45S";
|
|
170
|
+
timeEl.textContent = datetime;
|
|
171
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
172
|
+
expect(replacement.outerHTML).toBe(`<time datetime="${datetime}" class="duration">2 jours, 10 heures, 23 minutes et 45 secondes</time>`);
|
|
173
|
+
});
|
|
174
|
+
test("with context", async () => {
|
|
175
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
176
|
+
{
|
|
177
|
+
const ctxElement = context.file.document.createElement("time");
|
|
178
|
+
ctxElement.textContent = "1947-07-02";
|
|
179
|
+
const replacement1 = await replacer.replacement(context, ctxElement);
|
|
180
|
+
expect(replacement1.outerHTML).toBe(`<span class="time-resolved">le <a href="${rr0TestUtil.time.url("1/9/4/7/07/02/")}"><time datetime="1947-07-02">mercredi 2 juillet 1947</time></a></span>`);
|
|
181
|
+
}
|
|
182
|
+
{
|
|
183
|
+
const element = context.file.document.createElement("time");
|
|
184
|
+
element.textContent = "P20M";
|
|
185
|
+
const replacement = await replacer.replacement(context, element);
|
|
186
|
+
expect(replacement.outerHTML).toBe(`<time datetime="P20M" class="duration">20 minutes</time>`);
|
|
187
|
+
}
|
|
188
|
+
});
|
|
189
|
+
test("with approximation", async () => {
|
|
190
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
191
|
+
const original = context.file.document.createElement("time");
|
|
192
|
+
original.textContent = "P~2H";
|
|
193
|
+
const replacement = await replacer.replacement(context, original);
|
|
194
|
+
expect(replacement.outerHTML).toBe(`<time datetime="P2H" class="duration">environ 2 heures</time>`);
|
|
195
|
+
});
|
|
196
|
+
});
|
|
197
|
+
describe("parses hour", () => {
|
|
198
|
+
test("with context", async () => {
|
|
199
|
+
// Empty context
|
|
200
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08/index.html", "");
|
|
201
|
+
const timeEl = context.file.document.createElement("time");
|
|
202
|
+
timeEl.textContent = "2006-07-14 17:56";
|
|
203
|
+
const replacement = await replacer.replacement(context, timeEl);
|
|
204
|
+
expect(replacement.outerHTML).toBe(`<span class="time-resolved">le <a href="${path.join("/", timeService.root, "2/0/0/6/07/14/")}"><time datetime="2006-07-14T17:56">vendredi 14 juillet 2006 à 17:56</time></a></span>`);
|
|
205
|
+
expect(context.time.getYear()).toBe(2006);
|
|
206
|
+
expect(context.time.getMonth()).toBe(7);
|
|
207
|
+
expect(context.time.getDayOfMonth()).toBe(14);
|
|
208
|
+
expect(context.time.getHour()).toBe(17);
|
|
209
|
+
expect(context.time.getMinutes()).toBe(56);
|
|
210
|
+
// Change day + hour
|
|
211
|
+
const timeEl1 = context.file.document.createElement("time");
|
|
212
|
+
timeEl1.textContent = "2007-06-15 18:47";
|
|
213
|
+
const replacement1 = await replacer.replacement(context, timeEl1);
|
|
214
|
+
expect(replacement1.outerHTML).toBe(`<span class="time-resolved">le <a href="${path.join("/", timeService.root, "2/0/0/7/06/15/")}"><time datetime="2007-06-15T18:47">vendredi 15 juin 2007 à 18:47</time></a></span>`);
|
|
215
|
+
expect(context.time.getYear()).toBe(2007);
|
|
216
|
+
expect(context.time.getMonth()).toBe(6);
|
|
217
|
+
expect(context.time.getDayOfMonth()).toBe(15);
|
|
218
|
+
expect(context.time.getHour()).toBe(18);
|
|
219
|
+
expect(context.time.getMinutes()).toBe(47);
|
|
220
|
+
// TODO: Change hour only
|
|
221
|
+
});
|
|
222
|
+
test("with approximation", async () => {
|
|
223
|
+
});
|
|
224
|
+
});
|
|
225
|
+
});
|
|
@@ -1,106 +1,71 @@
|
|
|
1
|
+
import { Level0Duration } from "@rr0/time";
|
|
1
2
|
export class RelativeTimeTextBuilder {
|
|
2
3
|
constructor(timeTextBuilder) {
|
|
3
4
|
this.timeTextBuilder = timeTextBuilder;
|
|
4
5
|
}
|
|
5
6
|
build(oldContext, newContext) {
|
|
7
|
+
var _a, _b, _c, _d, _e;
|
|
6
8
|
let text;
|
|
7
|
-
|
|
8
|
-
const previousTime = oldContext === null || oldContext === void 0 ? void 0 : oldContext.time;
|
|
9
|
+
const time = newContext.time;
|
|
10
|
+
const previousTime = time.equals(oldContext === null || oldContext === void 0 ? void 0 : oldContext.time) ? undefined : oldContext.time;
|
|
11
|
+
let options;
|
|
9
12
|
if (previousTime === null || previousTime === void 0 ? void 0 : previousTime.isDefined()) {
|
|
13
|
+
options = {};
|
|
14
|
+
const deltaMs = time.date.compare(previousTime.date);
|
|
15
|
+
const deltaDuration = Level0Duration.toSpec(deltaMs);
|
|
10
16
|
const deltaContext = oldContext.clone();
|
|
11
17
|
const deltaTime = deltaContext.time;
|
|
12
|
-
let dayOfMonthDelta;
|
|
13
|
-
let yearDelta;
|
|
14
|
-
let monthDelta;
|
|
15
|
-
let hourDelta;
|
|
16
|
-
let minutesDelta;
|
|
17
|
-
function shouldSetDay() {
|
|
18
|
-
return !previousTime.getMonth() || monthDelta === 0;
|
|
19
|
-
}
|
|
20
|
-
function shouldSetHour() {
|
|
21
|
-
return !previousTime.getDayOfMonth() || dayOfMonthDelta === 0;
|
|
22
|
-
}
|
|
23
|
-
function shouldSetMinutes() {
|
|
24
|
-
return !previousTime.getMinutes() || hourDelta === 0;
|
|
25
|
-
}
|
|
26
|
-
function setYear(year) {
|
|
27
|
-
const previousYear = previousTime.getYear();
|
|
28
|
-
if (previousYear) {
|
|
29
|
-
yearDelta = year - previousYear;
|
|
30
|
-
if (yearDelta != 0) {
|
|
31
|
-
deltaTime.setYear(year);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
function setMonth(month) {
|
|
36
|
-
const previousMonth = previousTime.getMonth();
|
|
37
|
-
if (yearDelta === 0) {
|
|
38
|
-
monthDelta = month - (previousMonth || 0);
|
|
39
|
-
if (monthDelta != 0) {
|
|
40
|
-
deltaTime.setMonth(month);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
else if (yearDelta != 0) {
|
|
44
|
-
deltaTime.setMonth(month);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
function setDayOfMonth(dayOfMonth) {
|
|
48
|
-
const sameMonth = yearDelta === 0 && shouldSetDay();
|
|
49
|
-
if (sameMonth) {
|
|
50
|
-
dayOfMonthDelta = dayOfMonth - (previousTime.getDayOfMonth() || 0);
|
|
51
|
-
if (dayOfMonthDelta != 0) {
|
|
52
|
-
deltaTime.setDayOfMonth(dayOfMonth);
|
|
53
|
-
}
|
|
54
|
-
}
|
|
55
|
-
else if (monthDelta != 0) {
|
|
56
|
-
deltaTime.setDayOfMonth(dayOfMonth);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
59
|
-
function setHour(hour) {
|
|
60
|
-
const sameDay = yearDelta === 0 && shouldSetDay() && shouldSetHour();
|
|
61
|
-
if (sameDay) {
|
|
62
|
-
hourDelta = hour - (previousTime.getHour() || 0);
|
|
63
|
-
if (hourDelta != 0) {
|
|
64
|
-
deltaTime.setHour(hour);
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
else if (dayOfMonthDelta != 0) {
|
|
68
|
-
deltaTime.setHour(hour);
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
function setMinutes(minutes) {
|
|
72
|
-
const sameHour = yearDelta === 0 && shouldSetDay() && shouldSetHour() && shouldSetMinutes();
|
|
73
|
-
if (sameHour) {
|
|
74
|
-
minutesDelta = minutes - (previousTime.getMinutes() || 0);
|
|
75
|
-
if (minutesDelta != 0) {
|
|
76
|
-
deltaTime.setMinutes(minutes);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
deltaTime.setMinutes(minutes);
|
|
80
|
-
}
|
|
81
|
-
const time = newContext.time;
|
|
82
18
|
const year = time.getYear();
|
|
83
|
-
|
|
84
|
-
|
|
19
|
+
const previousYear = previousTime.getYear();
|
|
20
|
+
const yearDelta = (_a = deltaDuration.years) === null || _a === void 0 ? void 0 : _a.value;
|
|
21
|
+
const sameYear = !yearDelta || yearDelta < 1;
|
|
22
|
+
const noYear = !previousYear;
|
|
23
|
+
const shouldSetYear = yearDelta || (noYear) || previousTime.getYear() !== time.getYear();
|
|
24
|
+
if (shouldSetYear) {
|
|
25
|
+
deltaTime.setYear(year);
|
|
26
|
+
options.year = "numeric";
|
|
85
27
|
}
|
|
86
28
|
const month = time.getMonth();
|
|
87
|
-
|
|
88
|
-
|
|
29
|
+
const previousMonth = previousTime.getMonth();
|
|
30
|
+
const deltaDurationMonth = (_b = deltaDuration.months) === null || _b === void 0 ? void 0 : _b.value;
|
|
31
|
+
const sameMonth = !deltaDurationMonth || deltaDurationMonth < 1;
|
|
32
|
+
const noMonth = !previousMonth;
|
|
33
|
+
const shouldSetMonth = deltaDurationMonth || (noMonth || shouldSetYear);
|
|
34
|
+
if (shouldSetMonth) {
|
|
35
|
+
deltaTime.setMonth(month);
|
|
36
|
+
options.month = "long";
|
|
89
37
|
}
|
|
90
38
|
const dayOfMonth = time.getDayOfMonth();
|
|
91
|
-
|
|
92
|
-
|
|
39
|
+
const previousDay = previousTime.getDayOfMonth();
|
|
40
|
+
const dayOfMonthDelta = (_c = deltaDuration.days) === null || _c === void 0 ? void 0 : _c.value;
|
|
41
|
+
const sameDay = !dayOfMonthDelta || dayOfMonthDelta < 1;
|
|
42
|
+
const shouldSetDay = dayOfMonthDelta || (!sameDay && sameYear && sameMonth);
|
|
43
|
+
const noDay = !previousDay;
|
|
44
|
+
if (shouldSetDay) {
|
|
45
|
+
deltaTime.setDayOfMonth(dayOfMonth);
|
|
46
|
+
options.day = "numeric";
|
|
47
|
+
options.weekday = "long";
|
|
93
48
|
}
|
|
94
49
|
const hour = time.getHour();
|
|
95
|
-
|
|
96
|
-
|
|
50
|
+
const hourDelta = (_d = deltaDuration.hours) === null || _d === void 0 ? void 0 : _d.value;
|
|
51
|
+
const shouldSetHour = hourDelta || (hour && (noDay || (sameYear && sameMonth && sameDay))) || previousTime.getHour() !== time.getHour();
|
|
52
|
+
if (shouldSetHour) {
|
|
53
|
+
deltaTime.setHour(hour);
|
|
54
|
+
options.hour = "2-digit";
|
|
97
55
|
}
|
|
98
56
|
const minutes = time.getMinutes();
|
|
99
|
-
|
|
100
|
-
|
|
57
|
+
const minutesDelta = (_e = deltaDuration.minutes) === null || _e === void 0 ? void 0 : _e.value;
|
|
58
|
+
const sameHour = hourDelta === 0;
|
|
59
|
+
const shouldSetMinutes = minutesDelta || (minutes && (sameYear && sameMonth && sameDay && sameHour));
|
|
60
|
+
if (shouldSetMinutes) {
|
|
61
|
+
deltaTime.setMinutes(minutes);
|
|
62
|
+
options.minute = "2-digit";
|
|
63
|
+
}
|
|
64
|
+
if (deltaContext.time.isDefined()) {
|
|
65
|
+
newContext = deltaContext;
|
|
101
66
|
}
|
|
102
|
-
|
|
103
|
-
if (dayOfMonthDelta) {
|
|
67
|
+
const messages = newContext.messages.context.time.relative;
|
|
68
|
+
if (dayOfMonthDelta && sameYear && sameMonth) {
|
|
104
69
|
switch (dayOfMonthDelta) {
|
|
105
70
|
case -1:
|
|
106
71
|
text = messages.day.before;
|
|
@@ -111,13 +76,13 @@ export class RelativeTimeTextBuilder {
|
|
|
111
76
|
}
|
|
112
77
|
}
|
|
113
78
|
else {
|
|
114
|
-
if (!dayOfMonth) {
|
|
115
|
-
switch (
|
|
79
|
+
if (!dayOfMonth && sameYear) {
|
|
80
|
+
switch (deltaDurationMonth) {
|
|
116
81
|
case -1:
|
|
117
82
|
text = messages.month.before;
|
|
118
83
|
break;
|
|
119
84
|
case +1:
|
|
120
|
-
text = messages.month.after;
|
|
85
|
+
text = time.getMonth() - previousTime.getMonth() === 1 ? messages.month.after : messages.month.later;
|
|
121
86
|
break;
|
|
122
87
|
}
|
|
123
88
|
}
|
|
@@ -142,23 +107,9 @@ export class RelativeTimeTextBuilder {
|
|
|
142
107
|
}
|
|
143
108
|
}
|
|
144
109
|
}
|
|
145
|
-
if (!text) {
|
|
146
|
-
let defaultContext;
|
|
147
|
-
if (deltaContext.time.isDefined()) {
|
|
148
|
-
defaultContext = deltaContext;
|
|
149
|
-
const dayOfMonth = defaultContext.time.getDayOfMonth();
|
|
150
|
-
if (dayOfMonth && shouldSetDay()) {
|
|
151
|
-
defaultContext.time.setMonth(newContext.time.getMonth() || previousTime.getMonth(), false); // give month
|
|
152
|
-
defaultContext.time.setYear(newContext.time.getYear() || previousTime.getYear(), false); // give year
|
|
153
|
-
// context for the day but won't
|
|
154
|
-
print = false;
|
|
155
|
-
}
|
|
156
|
-
newContext = defaultContext;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
110
|
}
|
|
160
111
|
if (!text) {
|
|
161
|
-
text = this.timeTextBuilder.build(newContext,
|
|
112
|
+
text = this.timeTextBuilder.build(newContext, options);
|
|
162
113
|
}
|
|
163
114
|
return text;
|
|
164
115
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { RelativeTimeTextBuilder } from "./RelativeTimeTextBuilder.js";
|
|
2
|
+
import { rr0TestUtil } from "../../test";
|
|
3
|
+
import { describe, expect, test } from "@javarome/testscript";
|
|
4
|
+
import { TimeTextBuilder } from "./TimeTextBuilder.js";
|
|
5
|
+
describe("RelativeTimeTextBuilder", () => {
|
|
6
|
+
const timeTextBuilder = new TimeTextBuilder(rr0TestUtil.intlOptions);
|
|
7
|
+
const relativeTimeTextBuilder = new RelativeTimeTextBuilder(timeTextBuilder);
|
|
8
|
+
test("next year", () => {
|
|
9
|
+
{
|
|
10
|
+
const previousContext = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
11
|
+
previousContext.time.setYear(2003);
|
|
12
|
+
const context = previousContext.clone();
|
|
13
|
+
context.time.setYear(2004);
|
|
14
|
+
const s1 = relativeTimeTextBuilder.build(previousContext, context);
|
|
15
|
+
expect(s1).toBe("l'année suivante");
|
|
16
|
+
context.time.setMonth(6);
|
|
17
|
+
const s2 = relativeTimeTextBuilder.build(previousContext, context);
|
|
18
|
+
expect(s2).toBe("juin 2004");
|
|
19
|
+
}
|
|
20
|
+
});
|
|
21
|
+
test("change year", () => {
|
|
22
|
+
const previousContext = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
23
|
+
previousContext.time.setYear(1947);
|
|
24
|
+
const context = previousContext.clone();
|
|
25
|
+
context.time.setYear(1990);
|
|
26
|
+
context.time.setMonth(8);
|
|
27
|
+
context.time.setDayOfMonth(4);
|
|
28
|
+
const s = relativeTimeTextBuilder.build(previousContext, context);
|
|
29
|
+
expect(s).toBe("samedi 4 août 1990");
|
|
30
|
+
});
|
|
31
|
+
test("next month", () => {
|
|
32
|
+
{
|
|
33
|
+
const context1 = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
34
|
+
context1.time.setYear(2003);
|
|
35
|
+
{
|
|
36
|
+
context1.time.setMonth(2);
|
|
37
|
+
const next2months = context1.clone();
|
|
38
|
+
next2months.time.setMonth(context1.time.getMonth() + 2);
|
|
39
|
+
const s11 = relativeTimeTextBuilder.build(context1, next2months);
|
|
40
|
+
expect(s11).toBe("avril");
|
|
41
|
+
}
|
|
42
|
+
context1.time.setMonth(9);
|
|
43
|
+
const context2 = context1.clone();
|
|
44
|
+
context2.time.setMonth(context2.time.getMonth() + 1);
|
|
45
|
+
const s1 = relativeTimeTextBuilder.build(context1, context2);
|
|
46
|
+
expect(s1).toBe("le mois suivant");
|
|
47
|
+
const context3 = context2.clone();
|
|
48
|
+
context3.time.setDayOfMonth(23); // Resets day of month in context
|
|
49
|
+
const s2 = relativeTimeTextBuilder.build(context2, context3);
|
|
50
|
+
expect(s2).toBe("jeudi 23");
|
|
51
|
+
const context4 = context3.clone();
|
|
52
|
+
context4.time.setMonth(12);
|
|
53
|
+
const s3 = relativeTimeTextBuilder.build(context3, context4);
|
|
54
|
+
expect(s3).toBe("un mois plus tard");
|
|
55
|
+
const context5 = context4.clone();
|
|
56
|
+
context5.time.setMonth(1);
|
|
57
|
+
context5.time.setDayOfMonth(24);
|
|
58
|
+
const s4 = relativeTimeTextBuilder.build(context4, context5);
|
|
59
|
+
expect(s4).toBe("vendredi 24 janvier");
|
|
60
|
+
}
|
|
61
|
+
{
|
|
62
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "<html lang='en'></html>");
|
|
63
|
+
context.time.setYear(2003);
|
|
64
|
+
context.time.setMonth(9);
|
|
65
|
+
const previousContext = context.clone();
|
|
66
|
+
context.time.setMonth(context.time.getMonth() + 1);
|
|
67
|
+
const s = relativeTimeTextBuilder.build(previousContext, context);
|
|
68
|
+
expect(s).toBe("the month after");
|
|
69
|
+
}
|
|
70
|
+
});
|
|
71
|
+
test("next day", () => {
|
|
72
|
+
{
|
|
73
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
74
|
+
context.time.setYear(2003);
|
|
75
|
+
context.time.setMonth(9);
|
|
76
|
+
context.time.setDayOfMonth(23);
|
|
77
|
+
const previousContext = context.clone();
|
|
78
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("mardi 23 septembre 2003");
|
|
79
|
+
context.time.setDayOfMonth(24);
|
|
80
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("le lendemain");
|
|
81
|
+
}
|
|
82
|
+
{
|
|
83
|
+
const context = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "<html lang='en'></html>");
|
|
84
|
+
context.time.setYear(2003);
|
|
85
|
+
context.time.setMonth(9);
|
|
86
|
+
context.time.setDayOfMonth(23);
|
|
87
|
+
const previousContext = context.clone();
|
|
88
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("Tuesday, September 23, 2003");
|
|
89
|
+
context.time.setDayOfMonth(context.time.getDayOfMonth() + 1);
|
|
90
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("the day after");
|
|
91
|
+
}
|
|
92
|
+
});
|
|
93
|
+
describe("hour", () => {
|
|
94
|
+
test("next", () => {
|
|
95
|
+
{
|
|
96
|
+
let previousContext = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "");
|
|
97
|
+
const context = previousContext.clone();
|
|
98
|
+
context.time.setYear(2003);
|
|
99
|
+
context.time.setMonth(9);
|
|
100
|
+
context.time.setDayOfMonth(23);
|
|
101
|
+
context.time.setHour(16);
|
|
102
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("mardi 23 septembre 2003 à 16 h");
|
|
103
|
+
previousContext = context.clone();
|
|
104
|
+
context.time.setHour(17);
|
|
105
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("une heure plus tard");
|
|
106
|
+
context.time.setMinutes(43);
|
|
107
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("17:43");
|
|
108
|
+
}
|
|
109
|
+
{
|
|
110
|
+
let previousContext = rr0TestUtil.time.newHtmlContext("1/9/9/0/08", "<html lang='en'></html>");
|
|
111
|
+
const context = previousContext.clone();
|
|
112
|
+
context.time.setYear(2003);
|
|
113
|
+
context.time.setMonth(9);
|
|
114
|
+
context.time.setDayOfMonth(23);
|
|
115
|
+
context.time.setHour(16);
|
|
116
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("Tuesday, September 23, 2003 at 04 PM");
|
|
117
|
+
previousContext = context.clone();
|
|
118
|
+
context.time.setHour(17);
|
|
119
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("one hour later");
|
|
120
|
+
context.time.setMinutes(43);
|
|
121
|
+
expect(relativeTimeTextBuilder.build(previousContext, context)).toBe("05:43 PM");
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
});
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
import { RR0Context } from "../../RR0Context.js";
|
|
2
2
|
export declare class TimeTextBuilder {
|
|
3
3
|
readonly options: Intl.DateTimeFormatOptions;
|
|
4
|
+
/**
|
|
5
|
+
* @param options The default date format.to use.
|
|
6
|
+
*/
|
|
4
7
|
constructor(options: Intl.DateTimeFormatOptions);
|
|
5
8
|
/**
|
|
6
9
|
* Build a textual representation of context's time, according to context's locale.
|
|
7
|
-
*
|
|
8
|
-
* @param context
|
|
9
|
-
* @param print
|
|
10
|
-
* @param options
|
|
11
10
|
*/
|
|
12
|
-
build(context: RR0Context,
|
|
11
|
+
build(context: RR0Context, options?: Intl.DateTimeFormatOptions): string;
|
|
13
12
|
}
|
|
@@ -1,60 +1,47 @@
|
|
|
1
1
|
export class TimeTextBuilder {
|
|
2
|
+
/**
|
|
3
|
+
* @param options The default date format.to use.
|
|
4
|
+
*/
|
|
2
5
|
constructor(options) {
|
|
3
6
|
this.options = options;
|
|
4
7
|
}
|
|
5
8
|
/**
|
|
6
9
|
* Build a textual representation of context's time, according to context's locale.
|
|
7
|
-
*
|
|
8
|
-
* @param context
|
|
9
|
-
* @param print
|
|
10
|
-
* @param options
|
|
11
10
|
*/
|
|
12
|
-
build(context,
|
|
11
|
+
build(context, options = this.options) {
|
|
13
12
|
const time = context.time;
|
|
14
13
|
const printOptions = {};
|
|
15
14
|
const date = new Date(undefined, undefined, undefined);
|
|
16
15
|
const year = time.getYear();
|
|
17
16
|
if (year) {
|
|
18
17
|
date.setFullYear(year);
|
|
19
|
-
|
|
20
|
-
printOptions.year = options.year;
|
|
21
|
-
}
|
|
18
|
+
printOptions.year = options.year;
|
|
22
19
|
}
|
|
23
20
|
const month = time.getMonth();
|
|
24
21
|
if (month) {
|
|
25
22
|
date.setDate(1); // Avoid increasing month if today is > 30
|
|
26
23
|
date.setMonth(month - 1);
|
|
27
|
-
|
|
28
|
-
printOptions.month = options.month;
|
|
29
|
-
}
|
|
24
|
+
printOptions.month = options.month;
|
|
30
25
|
}
|
|
31
26
|
const dayOfMonth = time.getDayOfMonth();
|
|
32
27
|
if (dayOfMonth) {
|
|
33
28
|
date.setDate(dayOfMonth);
|
|
34
|
-
// if (print) {
|
|
35
29
|
printOptions.day = options.day;
|
|
36
30
|
printOptions.weekday = options.weekday;
|
|
37
|
-
// }
|
|
38
31
|
}
|
|
39
32
|
const hour = time.getHour();
|
|
40
33
|
if (hour) {
|
|
41
34
|
date.setHours(hour);
|
|
42
|
-
// if (print) {
|
|
43
35
|
printOptions.hour = options.hour;
|
|
44
|
-
// }
|
|
45
36
|
}
|
|
46
37
|
const minutes = time.getMinutes();
|
|
47
38
|
if (minutes) {
|
|
48
39
|
date.setMinutes(minutes);
|
|
49
|
-
// if (print) {
|
|
50
40
|
printOptions.minute = options.minute;
|
|
51
|
-
// }
|
|
52
41
|
}
|
|
53
42
|
const timeZone = time.getTimeZone();
|
|
54
43
|
if (timeZone) {
|
|
55
|
-
|
|
56
|
-
// printOptions.timeZoneName = context.time.options.timeZoneName
|
|
57
|
-
}
|
|
44
|
+
// printOptions.timeZoneName = context.time.options.timeZoneName
|
|
58
45
|
}
|
|
59
46
|
let text;
|
|
60
47
|
if (Number.isNaN(date.getTime())) {
|
|
@@ -62,7 +49,7 @@ export class TimeTextBuilder {
|
|
|
62
49
|
// TODO: Handle partial date (month only, etc.)
|
|
63
50
|
}
|
|
64
51
|
else { // Valid date?
|
|
65
|
-
const locale = context.
|
|
52
|
+
const locale = context.locale;
|
|
66
53
|
if (year < 0) {
|
|
67
54
|
date.setFullYear(date.getFullYear() + 1);
|
|
68
55
|
printOptions.era = "narrow";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|