All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
1.5.2 – 2024-08-30
- Named entity modal: prevent text wrapping in labels. (dd0664a)
- Dependabot configuration: allow security updates of
@angular
packages. (066d45e) - Deps: update
@angular
to 18.2.2. (2ff2b72) - Deps (transitive): update
micromatch
to 4.0.8. (a74b1d7)
1.5.1 – 2024-08-28
- Generate static collection menus prebuild script: skip collections that are not included according to the config. (6a5a339)
- Generate sitemap prebuild script: skip collections that are not included according to the config. (b5b84a2)
- Home page: start-aligned instead of left-aligned text. (f714e09)
1.5.0 – 2024-08-28
- PDF viewer on ebooks page: PDF title to secondary toolbar. (4351a3f)
- PDF viewer on ebooks page: message and download link to PDF as fallback if the user’s browser doesn’t support viewing embedded PDFs. (7aa557c)
- PDF viewer on ebooks page: support navigating to specific page in PDF. Fixes incorrect translations for the component. (8250ca9)
- PDF viewer on ebooks page: support search term highlighting in PDF (dependent on browser support, which currently includes only Firefox). (118e7b0)
- Assets: the SLS logo in various sizes as PNG images. (33fe8b4)
- Elasticsearch page: filter labels for regions and reference numbers. (6e52f09)
- Elasticsearch page: support PDF type search results for PDFs ingested in Elasticsearch as one page in plain text format per document. For links from the search results to correctly map to PDFs on the ebook pages, you need to enter the PDFs as collections in the database, and add a
collectionId
property to each ebook object in the ebooks array in the config. (c3d8695)
backendBaseURL
in config set tohttps://api.sls.fi/digitaledition
by default. (7cea657)- Home page: reduce landscape banner image height to 40% on viewport widths less than 1100px. (e6cbab6)
- Content grid: fetch collection cover image data only for collections included in the config. (f2028fa)
- Elasticsearch page: rename Elastic hit path and queryparams pipes. (c9d9606)
- Rename trust HTML pipe file. (bb2ab6c)
- Update
nginx
to 1.26.2. (58d5bf2) - Deps: update
@angular
to 18.2.1. (d1508ea) - Deps: update
marked
to 14.1.0. (210b9a7) - Deps: update
tslib
to 2.7.0. (cc67715) - Deps (dev): update
@types/node
to 20.16.2. (ce75cd8)
- Media collections: reduce filter select widths to prevent clear button from wrapping to a new line when all three filter categories are available. (a33b48a)
- Document title set correctly when going back to previous collection pages in nav stack. (36d4839)
- Home page: sticky footer. (bab6d0d)
index.html
: deprecated and outdated meta tags. (2bf9c2e)compose.yml
: testa-vonwright.sls.fi from extra hosts. (5bb6ff8)
1.4.4 – 2024-08-08
- Docs: mention current Node version of app in README. (a7f854d)
- Deps: update
@angular
to 18.1.4. (f6e829a) - Deps: update
marked
to 14.0.0. (d73fa2c, aa72d73) - Deps: update
zone.js
to 0.14.10. (26ce24e) - Deps (dev): update
@types/node
to 20.14.14. (bb6b347) - Deps (dev): update
karma
to 6.4.4. (7d7008f) - Deps (dev): update
typescript
to 5.5.4. (53679f7)
- Match type when comparing collection IDs in text-changer component (i.e. allow
collectionId
to be either string or number in table of content JSON-files). (8f3142d) - Add missing
ngFor
import topdf-viewer.component
. (b751172) - Filter type headings should not be visible in index filter modal when no filter options available. (ff975df)
- Home page banner image
min-height
set to200px
in landscape image mode. This fixes an issue where the banner image height is too small on mobile phones in landscape orientation. You should adjust themin-height
for the banner image in your project incustom.scss
if necessary. You can use the selectorpage-home div.banner.banner
. (d5b717d)
1.4.3 – 2024-07-22
- Legacy key-value format for
NODE_ENV
inDockerfile
. (385b67e) - Docs: refactor code snippets in the development notes and add note about NgModules. (c3552a9)
- Deps: update
@angular
to 18.1.1. (9af16d9) - Deps: update
marked
to 13.0.2. (6471779) - Deps: update
zone.js
to 0.14.8 (includes SSR memory leakage fix). (9eced7c) - Deps (dev): update
@types/node
to 20.14.11. (0afdcc2) - Deps (dev): update
jasmine-core
to 5.2.0. (b107f9e) - Deps (dev): update
typescript
to 5.5.3. (5897905)
- Incorrect CSS selector for references after comments. (898a2b7)
1.4.2 – 2024-07-02
- Deps: update
@angular
to 18.0.5. (f8129f1) - Deps: update
marked
to 13.0.1. (f871a15) - Deps (dev): update
@types/node
to 20.14.9. (154f481) - Deps (dev): update
ws
,engine.io-client
,engine.io
andsocket.io-adapter
. (09a926e)
1.4.1 – 2024-06-17
- Deps: update
@angular
to 18.0.3. (a18049e)
- Active media collection filters do not clear properly when deselecting all filter options for a filter group. (a708a0d)
- Superfluous addition of
Title
service to providers inAppModule
. (06c141a)
1.4.0 – 2024-06-14
- Support for showing a ”facsimile-only icon” next to items in the collection side menu that have the
facsimileOnly
property set totrue
in the collection table of contents file. (fc7e0c6)
- Change search method on the (named entity) index page from fuzzy to substring search when the provider is ElasticSearch. (ce30c3e)
- Unwrap lone grouped collections in the main side menu: if a collection group contains just one collection, the group menu item will not be collapsible/expandable, instead the menu item will link directly into the collection. The menu item title will still be the title of the collection group (defined in translation xliff-files). (ff7ac04)
- Deps: update
@angular
to 17.3.11. (dd7cbc5) - Deps: update
@ionic
to 8.2.2. (746218a) - Deps: update
marked
to 13.0.0. (85699b3) - Deps: update
tslib
to 2.6.3. (0065912) - Deps: update
zone.js
to 0.14.7. (1061fd3) - Deps (dev): update
@types/node
to 20.14.2. (a2b72de) - Deps (dev): update
braces
to 3.0.3. (6a559f3) - Deps (dev): update
ng-extract-i18n-merge
to 2.12.0. (62aa573) - Update transitive dependencies by recreating
package-lock.json
. (2f6f6d6) - Update
nginx
to 1.26.1. (3fe3dd9)
1.3.4 – 2024-05-07
- Run app as non-root user to increase security. (578937c)
- Deps: update
@angular
to 17.3.7. (547c4e8) - Deps: update
@ionic
to 8.1.0. (8bde0a4) - Deps: update
ionicons
to 7.4.0. (1a4bb08) - Deps: update
marked
to 12.0.2. (db5dc72) - Deps: update
zone.js
to 0.14.5. (412caa0) - Deps: update
@types/node
to 20.12.10. (524024e, 0508562) - Deps: update
typescript
to 5.4.5. (4a8c95f) - Update
nginx
to 1.26.0. (4e3bdfa)
1.3.3 – 2024-04-04
- Docs: notes on how to run nginx in front of Node.js app locally. (caf8d1e)
- Replace deprecated
browserTarget
withbuildTarget
inextract-i18n
options inangular.json
. (96c94fe) - Ensure build uses latest version of Node.js Docker-image. Remove unnecessary quotes around strings in GitHub Actions YAML build file. (971e06e)
- Docs: restructure notes on running app locally. (a41dc7d)
- Update
nginx
to 1.25.4. (2ce5529) - Deps: update
@angular
to 17.3.3. (e531f86, 0873abb) - Deps: update
@ionic
to 7.8.3. (29bd2ae, aa69990) - Deps: update
express
to 4.19.2. (a4443eb) - Deps: update
ionicons
to 7.3.1. (9d0bc07) - Deps: update
marked
to 12.0.1. (2978215) - Deps: update
@types/node
to 20.12.4. (5987f3a, 11f0385) - Deps: update
ng-extract-i18n-merge
to 2.11.2. (bd55fd0, 68d72fe) - Deps: update
typescript
to 5.4.3. (fd5d49f) - Deps: update
es5-ext
to 0.10.64 (e06c6d4) - Deps: update
follow-redirects
to 1.15.6. (82d4839)
- Link-elements added to the DOM using a custom renderer in the document head service are cleaned up when the service is destroyed. This fixes a potential memory leak in the SSR-app. (736195e)
- Return values of the RxJS
catchError
function. (fb862c2) - Ensure cleanup of event listeners in the draggable-image directive. (0b2f871)
1.3.2 – 2024-02-29
- Button labels in the secondary toolbar are hidden when the viewport is less than or equal to 960px wide, the same as for the labels in the top menu. (79973f5)
- Set
fetchpriority
property tohigh
on image element of home page banner image. (942ec0d) - Deps: update
@angular
to 17.2.3. (c9c28e9, 7d76625) - Deps: update
@ionic
to 7.7.3. (434306c) - Deps: update
express
to 4.18.3. (19cd3a5) - Deps: update
@types/node
to 20.11.23. (1460e29, 5a0198a) - Deps: update
karma
to 6.4.3. (4e66d5d)
- Missing collection menu when navigating backward using browser history if collection changes. (11687bb)
1.3.1 – 2024-02-19
- Memory leak related to BehaviorSubject-subscription in the download-texts modal. Also, as a precation, unsubscribe from all route subscriptions on component destruction. (b32dfe4)
1.3.0 – 2024-02-16
- Config options to enable server-side rendering of the collection side menu and prebuild static versions of the menu:
config.app.ssr.collectionSideMenu
andconfig.app.prebuild.staticCollectionMenus
. Both options are booleans.config.app.ssr.collectionSideMenu
defaults tofalse
, which means that rendering of the dynamic collection side menu is not performed on the server, but deferred to the browser. This increases performance on the server for projects that have very large collections (hundreds of texts/collection).config.app.prebuild.staticCollectionMenus
defaults totrue
, which means that static HTML versions of each collection menu, in each project language, are generated when the Docker image of the app is built. The static collection menus are included in the server-side rendering of collection pages, and then replaced with the dynamic collection menus in the browser. This improves SEO of collection pages when server-side rendering of collection menus is disabled, without degrading the user experience. Setting both new options tofalse
puts the least load on the server, but makes the web app less crawlable by robots. Notice that the static menus are generated during build-time – if the collection table of contents are updated in the backend, a new build has to be created for the changes to be reflected in the static menus. (a25be18, 78108e3, 2ec89c3, 5848028) - Config option to control the generation of a sitemap file in a prebuild step:
config.app.prebuild.sitemap
. Defaults totrue
. (02d8b65) - Config option to define the intrinsic dimensions of the default banner image on the home page:
config.page.home.bannerImage.intrinsicSize
. The option defaults tonull
, meaning that theheight
andwidth
attributes are not set on the image. The option takes an object withheight
andwidth
keys and their respective values as numbers (the implicit unit is pixels). Setting the intrinsic dimensions of the image file (defined by theconfig.page.home.bannerImage.URL
option) is recommended since the browser can then calculate the aspect ratio of the image, which improves initial page rendering. (4495d91) - Config option to define alternate image sources for the banner image on the home page:
config.page.home.bannerImage.alternateSources
. The option defaults to an empty array, which means that the banner image is rendered like before using the image URL provided inconfig.page.home.bannerImage.URL
. The newalternateSources
option takes an array of objects. If the array is non-empty, the banner image will be created as a<picture>
element with each of the objects in the array specifying a<source>
HTML element. The object can contain key-value pairs where the keys are the allowed attributes of the<source>
element (media
,srcset
,sizes
,type
,height
,width
) and the values are strings or numbers defining the values of the corresponding attributes. For examples, see the forthcoming documentation. Using thealternateSources
option makes it possible to define responsive images for the banner image (serve different image files based on screen resolution) and serve modern image formats like AVIF for reduced bandwidth. The default image defined by theURL
option is still needed – it is used as the fallback image defined by the<img>
element in the<picture>
element. (49708b7) - The current text title in the text-changer component is appended with the value of the
text_two
property of the TOC item if the property exists. The previous/next text buttons have been changed into links and are thus crawlable. (5848028) Vary: User-Agent
HTTP response header to server-side rendered content. This enables more efficient caching and improves SEO by telling browsers etc. that the content varies by user agent (mobile vs desktop). (1160490)
- Defer loading of the facsimile component on the collection text page to the browser. This increases server-side rendering performance since the component isn’t rendered on the server. (69fa89a, 5bbdaae)
- Defer loading of the illustrations component on the collection text page to the browser. This increases server-side rendering performance since the component isn’t rendered on the server. (eb60a82)
- Defer loading of the epub viewer component to the browser, since it’s not SSR-compatible. The epub title is shown as a
<h1>
placeholder in the server response. Also show pdf title as<h1>
in the pdf viewer component. (7658b71) - Refactor requests for flattened collection table of contents to use function in the collection TOC service. (a6b643b)
- Refactor the download texts modal to get the current text title from the document head service. (baa0a44)
- Update the development notes with brief descriptions of dependencies. (34a1a7c)
- Deps: update
@angular
to 17.2.1. (e78ed03, 0dffb42, 073f167) - Deps: update
@ionic
to 7.7.2. (5b57491, 7bd4e41, ad8b502) - Deps: update
marked
to 12.0.0. (17dc71e, dd6548b) - Deps: update
zone.js
to 0.14.4. (47d90dd) - Deps: update
jasmine-core
to 5.1.2. (3e2402b) - Deps: update
ng-extract-i18n-merge
to 2.10.0. (0387016) - Deps: update
@types/node
to 20.11.19. (75f2527, 90bc7f3, 67e4e80)
- Set correct app mode (desktop or mobile) on the server. Prior to this fix the server app would always return the app rendered in desktop mode, regardless of the actual client device. Previously Ionic’s Platform service was used to determine the current device in the browser, but since it’s not SSR-compatible, the user agent string is now used instead. On the server, the user agent is read from the request headers, and in the browser from the
Window.navigator
object. The app mode is now correctly set for most devices and browsers. One notable exception is Safari on iPads with iOS 13+, which are recognized as desktop devices. Using only the user agent string, it is not possible to distinguish Safari on iPads with iOS 13+ from Safari on MacBooks with MacOS. This fix makes the app compatible with Angular hydration, and nullifies the unreleased changes in a2f3ea2. (7a9efed)
- Deps:
xliff
. (7475e83)
1.2.3 – 2024-01-26
- Broken server-side rendering for non-default locales. Before this commit pages in non-default locales that used the
UrlService
were not rendered on the server. This was a side effect of the@jsonurl/jsonurl
library used by the service to convert primitive data types and complex data structures like arrays, arrays of objects and objects with nested arrays and objects into URL-safe strings and vice versa. This fix removes the dependency on the external library and replaces its functionality with a custom conversion implementation. The custom implementation is not a full implementation of the JSON→URL specification, but produces the same results for the parts that are relevant for this project. The code has been generated by ChatGPT-4 according to the JSON→URL specification, meticulously guided by a human mind. (e4ff558)
1.2.2 – 2024-01-25
- Fix indentation in
nginx.conf
. (779b217) - Use
ARG
instructions inDockerfile
to define variables for setting Angular major version and Node image tag of the base image. This makes updatingDockerfile
clearer as the Angular major version has to be changed in the file when the Angular major version of the app is updated. (700b4e5) - Refactor functions and services related to markdown content. Remove duplicate code by moving functions for getting markdown content to the markdown service. Add pipe for marking HTML safe (bypassing sanitization) in order to separate the getting and parsing of markdown to HTML from the trusting of the HTML. Rename MarkdownContentService MarkdownService. (a294791)
- Replace
bypassSecurityTrustHtml
function calls withtrustHtml
pipe. (b698c67) - Run MathJax only in the browser. (d92853c)
- Deps: update Angular to 17.1.1. (3aba10e, a3783f2)
- Deps: update Ionic to 7.6.6. (1baa779)
- Deps: update htmlparser2 to 9.1.0. (3a28300)
- Deps: update marked to 11.1.1 and remove @types/marked. Move markdown parsing to function in dedicated markdown service. (2d214df)
- Deps: update zone.js to 0.14.3. (9a33558)
- Moved @angular/compiler from devDependencies to dependencies (like in fresh Angular 17 apps). (c8a680d)
- Deps: update typescript to 5.3.3. (c2ef241)
- Deps: update @types/node to 20.11.5. (ba5a0ea)
- Deps: update browser-sync to 3.0.2. (7f65bed)
- Deps: update jasmine-core to 5.1.1 and @types/jasmine to 5.1.4. (b548e78)
- Deps: angular-eslint from devDependencies. (c719b45)
- Deps: jasmine-spec-reporter from devDependencies. (a9e0702)
- Deps: karma-coverage-istanbul-reporter from devDependencies. (f27d677)
- Deps: ts-node from devDependencies. (e55173f)
1.2.1 – 2024-01-16
- Compression of static files. During the build step, static files of type
html
,xml
,txt
,css
,js
,svg
,ico
,json
,ttf
andotf
indist/app/browser/
are precompressed using gzip. Files smaller than 1300 B are not compressed. If there is a compressed version of a static file, nginx is configured to serve it instead of the uncompressed file. The necessary directives for compressing dynamically generated HTML on-the-fly have also been added to the nginx configuration (nginx.conf
), however, the directives have been commented out because of the increased server CPU load associated with on-the-fly compression. Each project can choose to enable the directives as they see fit. (667b535)
- Legacy setup code from Angular 15 to 17 migration. Angular 17 introduced several changes to the
app.module.\*
,main.server.ts
,main.ts
,server.ts
andtsconfig.\*
files. During the original v15 -> v17 update of the app all of these changes were not implemented. This fix attempts to align the app with the setup of a new modules based Angular 17 app that has SSR and i18n enabled. (2b7c94d)
1.2.0 – 2024-01-10
- Config option to specify the dimensions of the site logo in the top menu:
config.component.topMenu.siteLogoDimensions
(7402e28). The new config option is an object containing nested objects for specifying the height and width of the logo in both desktop and mobile mode. If the option is omitted, it defaults to an empty object, which corresponds to the old behaviour where the height and width attributes of the HTMLImageElement of the logo are not set. Setting the dimensions reduces layout shifts during page loading. Structure of thesiteLogoDimensions
with example values:
siteLogoDimensions: {
default: {
height: 56,
width: 173
},
mobile: {
height: 56,
width: 56
}
}
- Documentation on updating, building and deployment, as well as development. (c329aa8)
- Default site logo in top menu changed to optimized PNG image file. Added both black and white versions of SLS’s logo to
assets/images/logo/
. (9df4bef) - Deps: update Angular dev-kit, CLI and SSR to 17.0.9. (c67b22e)
- Deps: update dev-dependency follow-redirects to 1.15.4. (30355ea)
1.1.1 – 2024-01-09
- nginx web server to serve static files in front of Node. This improves performance under load since 1) nginx is more performant than Node’s Express-server, 2) nginx’s performance is not impacted by Node being busy with server-side rendering tasks for dynamic content. (8952fdc by @rasek-sls)
- Paths to font files in @font-face rules from absolute to relative. (2dd2bf3)
- Deps: update Ionic to 7.6.3 and Ionicons to 7.2.2. (f35d148)
1.1.0 – 2023-12-28
- Config option to show or hide the toggle for switching between the normalized and non-normalized version of manuscripts:
config.component.manuscripts.showNormalizedToggle
. The new config option defaults totrue
, which corresponds to the old behaviour. (930eec2) - Config option to add mandatory TEI class names to collection text HTML loaded from the backend:
config.collections.addTEIClassNames
. The new config option defaults totrue
, which corresponds to the old behaviour. If set tofalse
, the class attributes of all HTML elements in reading texts, manuscripts and variants fetched from the backend, must contain the valuetei
. In addition, elements in comments must contain the class nameteiComment
, elements in manuscripts the class nameteiManuscript
, and elements in variantsteiVariant
. Otherwise, some inherent functionality and styles won’t work anymore for these texts. Setting the new config option tofalse
improves app performance. (df6554d, b8984f8) - Config option to fix paths to the
assets/images/
folder in collection texts:config.collections.replaceImageAssetsPaths
. The new config option defaults totrue
, which corresponds to the old behaviour. When this option istrue
,src
attribute values starting withimages/
in the HTML of collection texts are replaced withassets/images/
, which is the correct path to the image assets folder. Setting the new config option tofalse
improves app performance. (1f9d7ed)
- Eagerly load home page banner image in portrait mode. (5d11e3c)
- Deps: update Angular to 17.0.8. (e936d0b)
- Deps: update ng-extract-i18n-merge to 2.9.1. (98e567b)
- Show placeholder image for collections in the content grid on the content and home page if unable to retrieve collection cover image URL from the backend. Previously a missing cover image URL disrupted loading of all collections in the grid. (3f3b256)
- Trimming of collection texts fetched from backend. (990a08c)
1.0.3 – 2023-12-14
- GitHub Actions workflow definition for triggering builds on commit push to
main
branch or new release/tag. (aa32c39, a5b22e7, a7be6c3, 00b19e4 by @rasek-sls)
- Update base app Docker image repository and tag in
compose.yml
. (8bdfc5a) - Update README, CHANGELOG and build workflow code comments. (35d373d)
- Deps: update Angular to 17.0.7. (90028cf)
- Remove incomplete regex sanitization of script tags in search query results. The regex sanitization is unnecessary because the query results are anyway parsed as HTML, only text nodes are retained and any
<
,>
characters are converted to their corresponding HTML entities. (ce54078)
1.0.2 – 2023-12-11
- Doodle illustrations must be placed in a media collection in the backend rather than in the hard coded
src/assets/images/verk/
folder in the frontend. Usecollections.mediaCollectionMappings
inconfig.ts
to map the id of the collection with doodles to the id of the media collection that holds the images in the backend. (9fd9d0e, 02d3d21) - Illustration image path mapping to media collections is performed solely based on the presence of the CSS class name
est_figure_graphic
onimg
elements – not as previously based on the imagesrc
containingassets/images/verk/
in it. Thus, illustration images that are to be mapped to media collections must have just the image file names in thesrc
attributes, rather thanimages/verk/<filename>
as previously. Images with absolute URLs insrc
are never mapped regardless of class names. (2b4f4e6) - Fixing image paths in collection pages from
images/
toassets/images/
is done specifically at the start ofsrc
attribute values – not for any occurrence of the stringimages/
. (111f902)
- Legacy settings from Angular configuration file. (fbfc51c)
1.0.1 – 2023-12-07
- Matching text color to page break toggle labels in the view options popover. (514f999)
- Apply background colors to toggle labels only instead of the entire toggles in the view options popover. (fc2fc38)
- Adjust padding of facsimile page number input elements to accommodate changed spec in Ionic 7.6.0. (34d1ab0)
- Move inline styles for checkbox labels on the elastic-search page to the component SCSS-file. (8d0a766)
- Deps: update Ionic to 7.6.0. (9c66917)
- Deps: update Angular to 17.0.6. (bf878ae)
1.0.0 – 2023-12-05
- Initial release.