{"id":14972424,"url":"https://github.com/phax/ph-oton","last_synced_at":"2026-03-02T21:16:19.413Z","repository":{"id":31610829,"uuid":"35175824","full_name":"phax/ph-oton","owner":"phax","description":"The complete ph websuite","archived":false,"fork":false,"pushed_at":"2025-11-16T15:55:01.000Z","size":87762,"stargazers_count":3,"open_issues_count":3,"forks_count":5,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-11-16T17:26:55.365Z","etag":null,"topics":["bootstrap","css","datatables","framework","html","j2ee","java","java8","servlet","ui","web"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phax.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-05-06T18:27:20.000Z","updated_at":"2025-11-16T15:55:03.000Z","dependencies_parsed_at":"2023-02-19T02:00:40.913Z","dependency_job_id":"adf9276a-99c0-46f7-b443-5de42662044a","html_url":"https://github.com/phax/ph-oton","commit_stats":{"total_commits":3063,"total_committers":6,"mean_commits":510.5,"dds":0.005876591576885359,"last_synced_commit":"fa15dc232ece8b30a0ff57005023a30fafd752cc"},"previous_names":[],"tags_count":74,"template":false,"template_full_name":null,"purl":"pkg:github/phax/ph-oton","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fph-oton","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fph-oton/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fph-oton/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fph-oton/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phax","download_url":"https://codeload.github.com/phax/ph-oton/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phax%2Fph-oton/sbom","scorecard":{"id":730734,"data":{"date":"2025-08-11","repo":{"name":"github.com/phax/ph-oton","commit":"eeab773aa750250781daef44496c77ba46ba3b83"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.4,"checks":[{"name":"Maintained","score":10,"reason":"11 commit(s) and 1 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/maven.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.txt:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE.txt:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/maven.yml:29"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:37: update your workflow using https://app.stepsecurity.io/secureworkflow/phax/ph-oton/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/phax/ph-oton/maven.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/maven.yml:48: update your workflow using https://app.stepsecurity.io/secureworkflow/phax/ph-oton/maven.yml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Vulnerabilities","score":6,"reason":"4 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-4265-ccf5-phj5","Warn: Project is vulnerable to: GHSA-4g9r-vxhx-9pgx","Warn: Project is vulnerable to: GHSA-gmg8-593g-7mv3","Warn: Project is vulnerable to: GHSA-qh8g-58pp-2wxh"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-22T14:20:26.903Z","repository_id":31610829,"created_at":"2025-08-22T14:20:26.903Z","updated_at":"2025-08-22T14:20:26.903Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284750955,"owners_count":27057456,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-16T02:00:05.974Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bootstrap","css","datatables","framework","html","j2ee","java","java8","servlet","ui","web"],"created_at":"2024-09-24T13:46:53.906Z","updated_at":"2026-03-02T21:16:19.407Z","avatar_url":"https://github.com/phax.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ph-oton\n\n\u003c!-- ph-badge-start --\u003e\n[![Maven Central](https://img.shields.io/maven-central/v/com.helger.photon/ph-oton-parent-pom)](https://img.shields.io/maven-central/v/com.helger.photon/ph-oton-parent-pom)\n[![javadoc](https://javadoc.io/badge2/com.helger.photon/ph-oton-api/javadoc.svg)](https://javadoc.io/doc/com.helger.photon/ph-oton-api)\n\u003c!-- ph-badge-end --\u003e\n\nThis set of Java libraries forms a package to build Java web applications.\n\nContained subprojects are:\n* ph-oton-html - Java wrapper for all HTML elements and attributes\n* ph-oton-markdown - Java wrapper for Markdown processing (since 10.2.0; previously in ph-oton-html)\n* ph-oton-jscode - a Java code model to build structured JS code\n* ph-oton-jquery - an extension to ph-html-jscode to also support jQuery\n* ph-oton-atom - ATOM newsfeed stuff\n* ph-oton-io - basic IO stuff (since 9.2.0; previously in ph-oton-app)\n* ph-oton-app - basic application stuff\n* ph-oton-audit - basic auditing stuff\n* ph-oton-ajax - basic AJAX stuff\n* ph-oton-api - basic API stuff\n* ph-oton-security - security elements (user, user groups, roles etc.)\n* ph-oton-exchange - data exchange (import and export)\n* ph-oton-connect - connectivity modules\n* ph-oton-mgrs - basic managers (since 10.2.0; previously in ph-oton-core)\n* ph-oton-core - basic web stuff\n* ph-oton-uicore - basic web UI stuff\n* ph-oton-icon - icon library\n* ph-oton-tinymce4 - TinyMCE4 wrapper\n* ph-oton-datatables- Datatables.net wrapper\n* ph-oton-uictrls - misc web UI controls\n* ph-oton-jetty - wrapper for Jetty to simply use as main\n* ph-oton-jdbc - provides certain JDBC-based manager implementations (since 8.4.2)\n\n# Requirements\n\n* Java 17+ is required for building \n* Application server requirements:\n    * At least Tomcat 10.1.x (JakartaEE 10)\n    * Jetty 12.x with AnnotationConfiguration enabled\n    \nNote: actual frontend bindings were moved to separate projects:\n* Bootstrap v3: https://github.com/phax/ph-oton-bootstrap3\n* Bootstrap v4: https://github.com/phax/ph-oton-bootstrap4\n* Bootstrap v5: https://github.com/phax/ph-oton-bootstrap5 (work in progress)\n\n## Maven usage\n\nReplace `x.y.z` with the effective version number.\n\n```xml\n  \u003cdependencyManagement\u003e\n    \u003cdependencies\u003e\n      \u003cdependency\u003e\n        \u003cgroupId\u003ecom.helger.photon\u003c/groupId\u003e\n        \u003cartifactId\u003eph-oton-parent-pom\u003c/artifactId\u003e\n        \u003cversion\u003ex.y.z\u003c/version\u003e\n        \u003ctype\u003epom\u003c/type\u003e\n        \u003cscope\u003eimport\u003c/scope\u003e\n      \u003c/dependency\u003e\n    \u003c/dependencies\u003e\n  \u003c/dependencyManagement\u003e\n```\n\nNote: prior to v8.2.5 the Maven groupId was `com.helger`.\n\n## News and noteworthy\n\nv10.2.1 - 2026-03-02\n* Extracted class `AbstractHCExtSelect`\n* Change HTTP session ID after successful login. See [#28](https://github.com/phax/ph-oton/issues/28) - thx @andreasa-winenet\n* Added `ISftpSettingsHost.getKnownHostsPath ()`\n* Added class `SftpMaxParallelRunner`\n\nv10.2.0 - 2026-02-21\n* Updated to Jetty 12.1.6\n* Extracted new submodule `ph-oton-mgrs`\n* Extracted new submodule `ph-oton-markdown` for Markdown handling\n* Extracted the interface `ISystemMigrationManager` and provided an SQL backend via `SystemMigrationManagerJDBC`\n* Moved the class `SystemMigrationManager` into package `com.helger.photon.mgrs.sysmigration`\n* Created new class `PhotonCMSManager` and moved access to the `FavoriteManager` there\n* Extracted interface `ISystemMessageManager` and provided an SQL backend via `SystemMessageManagerJDBC`\n* Extracted interface `ILongRunningJobResultManager` and provided an SQL backend via `LongRunningJobResultManagerJDBC`\n* Moved class `PhotonBasicManager` to the new submodule `ph-oton-mgrs`\n\nv10.1.2 - 2026-01-10\n* Added `IHCAttrContainer.setAria(Current|Disabled)`\n* Updated to prism.js 1.3.0\n* Updated to Datatables 2.3.5 + current plugins\n* Added new internal class `PhotonInternalUnparsedJS`\n* Fixed an error that `MarkdownProcessor` created nested `\u003ctd\u003e` elements\n* Made sure `UserGroupManagerJDBC` works with a single DB connection\n\nv10.1.1 - 2025-12-14\n* Updated to Jetty 12.1.5\n* Extended API of `ConstantCSSPathProvider` and `ConstantJSPathProvider`\n* Fixed an error in `PageViewExternalHTMLCleanser` that may lead to paths with two consecutive slashes (`//`)\n\nv10.1.0 - 2025-11-16\n* Updated to Jetty 12.1.4\n* Updated to ph-commons 12.1.0\n* Using JSpecify annotations\n* Made sure the `DefaultCSSClassProvider` uses a thread-safe Map internally\n\nv10.0.2 - 2025-10-23\n* Updated to Jetty 12.1.3\n* In case an application uses a custom server URL, the `StaticServerInfo` is now also using the path component from the provided URL instead of the `ServletContext` path\n\nv10.0.1 - 2025-09-19\n* Updated to Jetty 12.1.1\n* Made `JettyStarter` `ResourceFactory` customizable\n* Created new class `PhotonResourceFactory` and using it as the default in `JettyStarter`\n* Added new class `SpringBootURIToURLConverter`\n\nv10.0.0 - 2025-08-25\n* Requires Java 17 as the minimum version\n* Updated to ph-commons 12.0.0\n* Updated to Jetty 12.1.0\n* Removed all code marked as deprecated for removal\n* Made two constructors of `Tenant` and `AccountingArea` public\n* Moved the Bootstrap 4 binding to https://github.com/phax/ph-oton-bootstrap4\n\nv9.3.2 - 2025-05-31\n* Updated to Jetty 11.0.25\n* Ensuring that BigDecimals with a negative scale are correctly formatted in JS. See [#23](https://github.com/phax/ph-oton/issues/23) - thx @domids\n* Cache tab on Administration page \"Statistics\" now shows the cache hit and miss percentage\n* Read-only `AbstractHCControl` no longer set the tabindex to `-1`\n\nv9.3.1 - 2025-03-05\n* Re-added class `ChartPaletteDefault` in package `com.helger.photon.uictrls.chart`\n* Made sure that dynamically loaded JS and CSS also get the `nonce` attributes, if applicable\n\nv9.3.0 - 2025-02-26\n* Requires ph-web 10.4.0\n* Updated to Bootstrap Icons 1.11.3\n* Removed support for chart.js v1.x\n* Updated list of global attributes in `IHCElement`\n* `PhotonWorkerPool` now has a silent mode option\n* The `InternalErrorBuilder` can now deal with custom email settings. See [#21](https://github.com/phax/ph-oton/issues/21)\n* The default administration page `Statistics` got a \"Download\" buttons. See [#22](https://github.com/phax/ph-oton/issues/22)\n* Moved classes `CSRFManager` and `CSRFSessionManager`  to submodule `ph-oton-app`\n* Class `CSRFManager` now creates nonces with 32 instead of 64 bytes and uses Base64 instead of Base16 encoding.\n* Added builders for `ConstantJSPathProvider` and `ConstantCSSPathProvider`\n* Added classes `JSLet` and `JSConst` and using `let` by default in JS `for` and `for in` loops\n* Added class `JSParam` and using it for function params and catch clauses (instead of `JSVar`)\n\nv9.2.9 - 2025-02-03\n* Updated to ph-web 10.3.0\n* Added reusable SFTP helper classes to package `com.helger.photon.connect.sftp`\n* `AbstractLoginManager` no longer stores the user agent by default\n\nv9.2.8 - 2025-01-21\n* Added support for Google ReCaptcha v3\n* Updated to Log4J 2.24.3\n* Updated to DataTables 2.2.1\n* Updated to ph-web 10.2.x\n\nv9.2.7 - 2024-10-03\n* Updated to Jetty 11.0.24\n* Updated to Log4J 2.24.0\n* Allowed `.cjs` and `.mjs` as valid JavaScript file extensions\n* `type` attribute of `script` element was changed from `IMimeType` to `String`\n* Improved consistency of `aria-label`, `aria-labelledby`, `aria-description`, `aria-describedby`\n\nv9.2.6 - 2024-08-09\n* Updated to Jetty 11.0.22\n* Fixed an error in DataTables max page calculation if length menu with only \"all\" is present\n* Updated to DataTables 2.1.3\n\nv9.2.5 - 2024-06-30\n* Updated to Jetty 11.0.21\n* Updated to DataTables 2.0.8 and updated translations\n* Using `addAriaLabeledBy` in `connectFormControlWithLabel`. See [#18](https://github.com/phax/ph-oton/issues/18) - thx @NikovacsDev\n* API extensions for DataTables `aria-label` in pagination area\n\nv9.2.4 - 2024-04-25\n* Updated to DataTables 2.0.5 and latest plugin versions\n* Chart.js V4 API improvements \n\nv9.2.3 - 2024-04-18\n* Updated to Log4J 2.23.1\n* Updated to jQuery 3.7.1\n* Updated to moment.js 2.30.1\n* Added more charts.js v4 support\n* Moved the Bootstrap 3 binding to https://github.com/phax/ph-oton-bootstrap3\n\nv9.2.2 - 2024-03-28\n* Updated to ph-commons 11.1.5\n* Updated to Jetty 11.0.20\n* Created Java 21 compatibility\n* The default folder structure for internal errors was changed from `YYYY/MM` to `YYYY/MM/DD`\n* Added initial support for charts.js v4\n\nv9.2.1 - 2023-09-26\n* Updated to Jetty 11.0.16\n* Fixed DateTime picker error in September for en-gb locale [Java 17]\n\nv9.2.0 - 2023-08-20\n* Extracted submodule `ph-oton-io` for dependency minimized inclusion\n\nv9.1.4 - 2023-08-17\n* Updated to DataTables 1.13.6 and latest plugin versions\n* Updated to ph-web 10.1.5\n* Avoid Exception on \"Delete all\" in failed mail page with Bootstrap4 UI\n\nv9.1.3 - 2023-07-31\n* Updated to ph-commons 11.1\n\nv9.1.2 - 2023-07-24\n* Updated to DataTables 1.13.5 and latest plugin versions\n* Updated to jQuery 3.7.0\n* Updated to ph-web 10.1.2\n\nv9.1.1 - 2023-05-03\n* Updated to Jetty 11.0.15\n* Updated to jQuery 3.6.4\n* Added new enumeration `EHCAutoComplete` and the possibility to use in the HC edits\n* Updated to DataTables 1.13.4 and latest plugin versions\n\nv9.1.0 - 2023-02-24\n* Using Servlet API 5.0.0 as the baseline: **JakartaEE 9, Java 11+, Apache Tomcat v10.0.x, Jetty 11.x**\n* Switched all namespaces from `javax.servlet` to `jakarta.servlet`\n* Updated to Jetty 11.0.13\n* Updated to Log2J 2.20.0\n* Updated to Jetty 11.0.13\n* Incorporated UserToken JDBC manager from v8.4.5\n\nv9.0.1 - 2025-05-06 [backport]\n* Updated to ph-commons 11.2.1\n* Updated to ph-web 10.0.2\n* Updated to Jetty 10.0.25\n* Moved the Bootstrap 3 binding to https://github.com/phax/ph-oton-bootstrap3\n\nv9.0.0 - 2023-02-14\n* Using Java 11 as the baseline\n* Updated to ph-commons 11\n* Using **Servlet API 4.0.1** as the baseline: **JakartaEE 8, Java 11+, Apache Tomcat v9.x, Jetty 10.0.x**\n* Updated to Jetty 10.0.13\n* Updated from `org.apache.logging.log4j:log4j-slf4j-impl` to `org.apache.logging.log4j:log4j-slf4j2-impl` for SLF4J 2.x\n\nv8.4.5 - 2023-02-23\n* Updated to Jetty 9.4.50\n* Updated to Log2J 2.20.0\n* Fixed default caching option for non GET requests\n* Extended some API to adopt to the new UserToken requirements \n* Added UserToken manager for JDBC\n\nv8.4.4 - 2023-01-23\n* Updated to jQuery 3.6.3\n* Updated to DataTables 1.13.1 and latest plugin versions\n* Added methods `setAriaRequired`, `addToAriaDescribedBy` and `setAriaInvalid` to class `IHCAttrContainer`\n* Added method `IHCElement.withCustomAttrs`\n* Made some general accessibility improvements\n\nv8.4.3 - 2022-10-04\n* Updated to Jetty 9.4.49\n* Updated to Log2J 2.19.0\n* Extended the interface `ISystemMessageRenderer` with a display text\n* Renamed Java method `var` to `variable` in `JS*` classes\n* Fixed a potential NPE when trying to login with a non-existing user\n* Fixed an issue in chartjs v1 CSS\n* Changed chart.js package from `com.helger.photon.uictrls.chart` to `com.helger.photon.uictrls.chart.v1` (backwards incompatible change)\n\nv8.4.2 - 2022-09-07\n* Updated to jQuery 3.6.1\n* Updated to jQuery Migrate 3.4.0\n* Updated to js-cookie v3.0.1\n* Updated to js-storage v1.0.4\n* Updated to Moment.js 2.29.4\n* Updated PDFObject to v2.2.8\n* Integrated ph-oton-jdbc submodule\n* The default minimum password length changed from 6 to 8\n* Deprecated `HCSWFObject`\n\nv8.4.1 - 2022-08-17\n* Updated to Apache HttpClient 5.x\n* Updated to Bootstrap 4.6.2\n* Updated to Jetty 9.4.48\n* Updated to Log2J 2.18.0\n* Updated to ph-web 9.7.1\n* Made class `DoNothingAuditor` final\n* Added class `DoNothingAuditManager`\n* Class `AbstractLoginManager` now has the possibility to specify a waiting time in case of a failed login\n* Deprecated classes `HCUniversalAnalytics` and `HCGoogleAnalytics`\n* Added support for Google Analytics V4\n* Fixed an error in the MarkDown \"safe mode\" processing\n* The `UITextFormatter` and the `BootstrapSystemMessage` MarkDown renderer now use the \"safe mode\" as the default\n\nv8.4.0 - 2022-04-04\n* Updated to Jetty 9.4.46\n* Updated chart.js from 1.0.2 to 1.1.1\n* Updated to Bootstrap Icons 1.8.1\n* Updated to DataTables 1.11.5 and latest plugin versions\n* Updated the list of predefined `aria-` attributes\n* Disabled the \"directory listing\" in the JettyStarter by default\n* Disabled sending the server version and the `X-Powered-By` header in JettyStarter by default\n* Added support for HTML element `\u003cdialog\u003e`\n* Moved class `HCHgroup` from package `.deprecated` to `.section`\n* Moved class `HCMenu` from package `.interactive` to `.grouping`\n* Added classes `HCMap`, `HCArea`, `EHCReferrerPolicy`\n* Improved the overall HTML compliance according to the latest standard\n* Dropped the specific HTML 5 annotations\n* `HCMenu` now takes `HCLI` children instead of `HCMenuItem` children\n* Extended HTML accessibility API - thx to @Dafnik\n* The default script mode for inline scripts was changed from `PLAIN_TEXT_WRAPPED_IN_COMMENT` to `PLAIN_TEXT_NO_ESCAPE`\n* Dropped support for Internet Explorer\n\nv8.3.6 - 2022-01-04\n* Updated Log2J to 2.17.1 - fixes CVE-2021-44832 - see https://logging.apache.org/log4j/2.x/security.html\n* Made redirect URL after login customizable in `AbstractLoginManager`\n\nv8.3.5 - 2021-12-21\n* Updated Log2J to 2.17.0 - fixes CVE-2021-45105 - see https://logging.apache.org/log4j/2.x/security.html\n\nv8.3.4 - 2021-12-14\n* Updated Log2J to 2.16.0 - fixes CVE-2021-45046 - see https://www.lunasec.io/docs/blog/log4j-zero-day/\n* Corrected error in DataTables 1.11.3 integration that lead to CSP errors because too much was included\n\nv8.3.3 - 2021-12-13\n* Updated Log2J to 2.15.0 - fixes CVE-2021-44228 - see https://www.lunasec.io/docs/blog/log4j-zero-day/\n* Updated DataTables to 1.11.3\n\nv8.3.2 - 2021-11-24\n* Updated to Bootstrap 4.6.1\n* Updated to FineUploader 5.16.2\n* Updated to Jetty 9.4.44\n* Updated to ph-commons 10.1.4\n* Made the `IAuditManager` customizable in the PhotonSecurityManager\n* Added built-in Base64 encode and decode pages in the \"Utilities\" menu area\n* Added class `CountingSftpProgressMonitor`\n* Fixed some SonarQube issues - nothing serious\n\nv8.3.1 - 2021-08-05\n* Updated to Jetty 9.4.43\n* Updated to ph-web 9.6.1\n* Updated DataTables to 1.10.24\n* Updated Bootstrap4 DateTimePicker to 5.39.0\n* Updated FontAwesome to 5.15.4\n* Added Bootstrap Icons 1.5.0 in ph-oton-icon\n* Improved the way, Jetty dependencies are handled in the POM\n* `BootstrapForm` and `BootstrapViewForm` handle splitting with negative values for certain grid elements\n* Made the `BootstrapFileUpload` placeholder label customizable\n* Added the possibility to add an ID on the `BootstrapNav` of a `BootstrapTabBox`\n* Made class `BootstrapCardCollapsible` more customizable\n* Added custom jQuery function `setReadOnly`\n* Made the BootstrapDateTimePicker default icon customizable - [#9](https://github.com/phax/ph-oton/issues/9)\n* Hiding environment variables that start with `SECRET_` - see [#10](https://github.com/phax/ph-oton/issues/10)\n\nv8.3.0 - 2021-03-22\n* Updated to Apache commons-net 3.8.0\n* Updated to Bootstrap 4.6.0\n* Updated to Jetty 9.4.36\n* Updated to jQuery 3.6.0\n* Updated to ph-commons 10\n* The name of the WebFragment `ph-oton-bootstrap3-stub` changed to `ph_oton_bootstrap4_stub`\n* The name of the WebFragment `ph-oton-bootstrap4-stub` changed to `ph_oton_bootstrap3_stub`\n* Extended `HCExtImg` to correctly remove the servlet context if it is present\n* Added `BootstrapSelect2` as a Bootstrap 4 theme of Select2\n* Added new predefined page to change the log level at runtime (when using Log4J 2.x)\n\nv8.2.9 - 2020-11-18\n* Updated to Apache commons-net 3.7.2\n* Updated to Bootstrap 4.5.3\n* Updated to Jetty 9.4.34\n* Updated to Log4j 2.14.0\n* Improved handling of generic children for HTML tables\n* Added new sanity method `BootstrapFormGroup.setLabelForCheckBox`\n* Added CSS classes to `ELabelType` directly\n\nv8.2.8 - 2020-09-17\n* Updated to Jakarta JAXB 2.3.3\n\nv8.2.7 - 2020-09-15\n* Updated to ph-commons 9.4.8\n* Improved long running job error handling\n* Extended `ConfigurationFileManager` API\n* Using Popper UMD JS instead of the default distribution\n\nv8.2.6 - 2020-08-20\n* Updated animate.css to 4.1.0\n* Updated to Apache commons-net 3.7\n* Updated to autoNumeric 1.9.46\n* Updated to Bootstrap 4.5.2\n* Updated to CookieConsent 3.1.1\n* Updated to Jetty 9.4.31\n* Updated to popper.js 1.16.1-lts\n* Updated to PrismJS 1.2.1\n* Updated to Select2 4.0.13\n* Removed autosize 1.8\n* Improved customizability of `ExporterExcel`\n* Fixed XML serialization of long running job data\n* Reworked the PrismJS API and made the plugins more customizable\n* Extended the Long running job API\n* Added new class `PhotonWorkerPool` as a shared worker pool\n* Improved coding style thanks to Sonar\n\nv8.2.5 - 2020-05-26\n* Changed Maven groupId to `com.helger.photon`\n* Updated to ph-web 9.3.0 (new Maven groupId)\n\nv8.2.4 - 2020-05-25\n* Updated to Bootstrap 4.5.0\n* Updated to Jetty 9.4.29\n* Updated to jQuery 3.5.1\n* Updated to Log4j 2.13.3\n* Updated to ph-commons 9.4.4\n* Added new classes `SessionBackedRequestFieldBoolean` and `SessionBackedRequestFieldBooleanMultiValue`\n* Added new configuration file syntax `JSON`\n* Fixed an issue with the configuration file ID for the tab\n* Extracted `IRoleManager` from `RoleManager`\n* Extracted `IUserManager` from `UserManager`\n* Extracted `IUserGroupManager` from `UserGroupManager`\n* Made `PhotonUnifiedResponse` chainable\n\nv8.2.3 - 2020-02-19\n* Fixed an error with the temporary directory name creation in `JettyStarter`\n* Updated to ph-web 9.1.10\n* Made `HttpClientSettings` configurable for `ReCaptchaServerSideValidator`\n* Improved API to be more sensitive on encoded and decoded URI paths\n* Added different date time representations to the default `InternalErrorMetadata`\n* Added a new Admin page for performing a remote HTTP client call\n* Extended traits interfaces `IHCTrait` and `IHCBootstrap4Trait`\n\nv8.2.2 - 2020-02-12\n* Updated to Jetty 9.4.26\n* Updated to Bootstrap 4.4.1\n* Updated to log4j 2.13.0\n* Made a `StubObject` constructor public\n* Added a version number constant to access information at runtime\n* Extended `JettyStarter` to create multiple contexts\n* Added possibility to add \"redirects\" to the menu tree to allow to change the URLs of existing items without breaking existing bookmarks\n* Extracted `IUserTokenManager` interface\n* Added possibility to globally configure if internal errors should be send as email and/or saved as XML\n* Unified the `WebPageActionHandler` API (backwards incompatible change)\n* Added traits interfaces `IHCTrait` and `IHCBootstrap4Trait` as syntactic sugar\n* Added a new system page showing the content of the System Truststore (cacerts)\n\nv8.2.1 - 2019-10-08\n* Updated to log4j 2.12.1\n* Updated to Jetty 9.4.21\n* Updated to ph-web 9.1.4\n* Updated to ph-commons 9.3.7\n* Fixed the automatic module name of project `ph-oton-bootstrap4-pages`\n* `BootstrapLoginHTMLProvider` now uses a form URL without the leading hostname\n* Updated to HandleBars 4.x\n\nv8.2.0 - 2019-06-24\n* Improved B4 InputGroup API for easier extension\n* Updated to Jetty 9.4.19\n* Improved Bootstrap 4 inline form UI creation\n* Improved API path ambiguity resolution API (interface `IAPIPathAmbiguityResolver` et. al.)\n* Added new API Interface `IAPIRegistry` and let `GlobalAPIInvoker` implement it\n* Clearly separate between `AjaxRegistry` and `AjaxInvoker` similar to new API API \n* Reworked module structure (created `ph-oton-app`, `ph-oton-audit`, `ph-oton-ajax`, `ph-oton-api`, removed `ph-oton-basic`)\n* Updated to jQuery 3.4.1\n* Requires ph-commons 9.3.3\n* Requires ph-web 9.1.2\n* `CheckDiskUsableSpaceJob` can now be scheduled more than once for different paths\n* Application startup time is now displayed in the \"System Properties\" Administration page\n* Added support for `loading` attribute in `HCImg` and `HCIFrame`\n* Started extending audit library to be more flexible and efficient - not used yet\n\nv8.1.3 - 2019-02-18\n* Updated to Bootstrap 4.3.1\n* Updated to Bootstrap 3.4.1\n* Bootstrap 4 `BootstrapInputGroup` API was reworked, so that the parent/child relationship holds true (incompatible)\n* Updated to log4j 2.11.2\n* `ISimpleWebExecutionContext` was extended with the `LoggedInUser`\n* API API was extended to support only different MIME types\n* Added an exception mapper to the API handling\n* Requires ph-web 9.1.1\n\nv8.1.2 - 2019-01-07\n* Added B4 tooltips, Jumbotron and Modal dialog\n* Added class `BootstrapPageRenderer` for consistent page rendering\n* Added B4 collapsible Card\n* Small improvement in rendering memory consumption and speed\n* Extracted `IDataTablesLengthMenu` interface\n* Added B4 file upload control\n* B4 `BootstrapHelper` became `BootstrapFormHelper`\n\nv8.1.1 - 2018-11-25\n* Fixed error in quoting of B3 user group management page\n* Added special CSS Class to B4 `BootstrapPageHeader`\n* Changed B4 `BootstrapDateTimePicker` initialization to correctly handle the default values\n* Extended `FavoriteManager` API\n* Updated to Jetty 9.4.14\n* Changed B4 `BootstrapDateTimePicker` to not use currentDate by default \n* Requires ph-commons 9.2.0\n\nv8.1.0 - 2018-10-25\n* Extended the `Favorite` APIs\n* Initial versions of the subproject `ph-oton-bootstrap4-uictrls` is available \n* Initial versions of the subproject `ph-oton-bootstrap4-pages` is available \n* Initial versions of the subproject `ph-oton-bootstrap4-demo` is available \n* Internal errors are stored in an additional \"month\" sub-directory\n* Internal error storage paths are now customizable  \n* Added FontAwesome 5.2.0 free icons\n* Improved state API slightly\n* User group and role user interfaces were improved\n* Updated to ph-web 9.0.5\n* Updated to popper 1.14.4\n* Added bulk export format \"JSON (simple)\" to have one without type information\n* Added a new Bootstrap 4 DateTime picker UI ctrl\n* Updated to Jetty 9.4.12\n* Updated to TinyMCE 4.8.2\n* Separated `HCPrismJS` and `TypeaheadEdit` in Bootstrap 3 and 4 versions\n* Dropped jQuery 1.x and 2.x files\n* Updated DataTables to 1.10.18\n* Added new base page \"Port checker\"\n* Improved JettyStarter customizability\n\nv8.0.2 - 2018-07-25\n* Updated to Bootstrap 4.1.3\n* Reworked meta element API so that `\u003cmeta charset=\"...\"\u003e` can be handled\n* Fixed OSGI ServiceProvider configuration\n* Updated to Jetty 9.4.11\n* Updated to ph-commons 9.1.3\n* Updated to ph-web 9.0.2\n* Extended `*HCSelect` APIs for multi values\n* The \"Change log\" page was removed\n* Extended `JSSwitch` API\n* Improved signatures of `AbstractJSBlock` (binary incompatible)\n* Updated to ph-masterdata 6.1.0\n\nv8.0.1 - 2018-04-18\n* Updated to Jetty 9.4.9\n* Updated to Bootstrap 4.0.0\n* Bootstrap3Panel type can be changed\n* Replaced some `StubjObject` with `IBusinessObject`\n\nv8.0.0 - 2018-01-05\n* Updated to ph-commons 9.0.0\n* Renamed 'Client' to 'Tenant' and moved to ph-tenancy in ph-masterdata project\n* Updated to Bootstrap 4.0.0-beta\n* Updated to TinyMCE 4.6.6\n* Updated to Jetty 9.4.8\n* Extracted ph-oton-atom\n* Initial versions of the subproject `ph-oton-bootstrap4-stub` is available \n\nv7.1.2 - 2017-07-19\n* Fixed an error with path handling of resource bundles when deployed as JAR\n\nv7.1.1 - 2017-07-18\n* Requires ph-commons 8.6.6\n* ServletContext base path can now be any URL (instead of a mandatory File)\n* Made `ServletStatusManager` non-static\n* Improved JS API (better Json support)\n\nv7.1.0 - 2017-07-05\n* Updated to ph-web 8.8.x\n* Improved rendering speed through internal optimizations\n* Updated to Bootstrap Datetime picker 2.4.4\n* Updated to Jetty 9.4.6\n* `CharacterEncodingFilter` more flexible\n* Updated to DataTables 1.10.15\n\nv7.0.5 - 2017-03-30\n* Updated to Jetty 9.4.3\n* Updated to ph-schedule 3.6.1\n* Improved SystemMessage API\n\nv7.0.4 - 2017-03-09\n* Updated to Jetty 9.4.2\n* API extensions\n* Updated to Apache commons-net 3.6\n* Improved internal error handling API\n* Internal changes in the ph-oton jobs.\n* Removed some deprecated methods\n\nv7.0.3 - 2017-01-10\n* Integrated ph-html into ph-oton\n* Binds to ph-commons 8.6.0\n\nv7.0.2 - 2017-01-03\n* Updated to Jetty 9.4.0\n* Binds to ph-commons 8.5.6\n* Binds to ph-web 8.7.0\n* Improved default request parameter handling customizability\n* New artefact `ph-oton-icon`\n\nv7.0.1 - 2016-11-14\n* Improvements in request tracking logging\n* Misc small improvements in different areas\n* Updated to Jetty 9.3.14.v20161028\n\nv7.0.0 - 2016-10-24\n* Requires ph-commons 8.5.2\n\nv7.0.0-beta3 - 2016-09-22\n* Based on ph-commons 8.5.x\n\nv7.0.0-beta2 - 2016-08-31\n* Based on ph-commons 8.4.x\n\nv7.0.0-beta1 - 2016-07-27\n* Updated to Java 1.8\n* Based on ph-commons 8.2.x\n\nv6.2.0 - 2015-12-03 \n* extracted security module\n* added support for app and user token management\n* Last release for Java 1.7\n\nv6.1.0 - 2015-10-02 \n* merged web actions and ajax functions\n\nv6.0.0 - 2015-09-14 \n* first ph-oton release based on old webbasics and webctrls etc.\n* requires ph-commons 6.x\n\n---\n\nMy personal [Coding Styleguide](https://github.com/phax/meta/blob/master/CodingStyleguide.md) |\nIt is appreciated if you star the GitHub project if you like it.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphax%2Fph-oton","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphax%2Fph-oton","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphax%2Fph-oton/lists"}