Compare commits

..

331 commits

Author SHA1 Message Date
ab7c1a4c1c
Bump year of the copyright notice
All checks were successful
Release / release (push) Successful in 49s
2025-03-01 19:36:14 +01:00
e37c4ad69b
Replace all repo URLs pointing to GitHub 2025-03-01 19:35:55 +01:00
cbcdb22670
Escape HTML elements in commit messages 2025-03-01 17:59:17 +01:00
babf14a8d2
Do not publish the archives with the Antville source code
These sources are included in the release files, anyway.
2025-03-01 17:47:13 +01:00
bae8079268
Switch to GZIP compression, BZIP2 still looking unpopular 2025-03-01 17:46:31 +01:00
cf5405478f
Add intermediate directory to archive files 2025-03-01 17:44:47 +01:00
31029a8cac
Bump Helma version
All checks were successful
Release / release (push) Successful in 46s
2025-03-01 16:47:25 +01:00
7821dd0142
Add release notes generated with git-cliff
All checks were successful
Release / release (push) Successful in 57s
2025-03-01 16:42:17 +01:00
12023e23e0
Fix issue with modern Servlet API 2025-02-15 21:06:27 +01:00
c9853f6217
Use correct GH_TOKEN and distribution files
All checks were successful
Release / build (push) Successful in 43s
2025-02-15 20:01:54 +01:00
5a6f1d14c2
Merge remote-tracking branch 'origin/main'
Some checks failed
Release / build (push) Failing after 42s
2025-02-15 19:59:13 +01:00
4d62d2083a
Also create a GitHub release using the gh client at the runner 2025-02-15 19:58:34 +01:00
6364067bac
Use tag in release title 2025-02-15 19:58:16 +01:00
542beb0c67 Update dependency generate-license-file to v3.7.0 2025-02-15 17:26:40 +00:00
8a9dc51b73 Merge pull request 'Update dependency less to v4.2.2' (#485) from renovate/less-4.x into main
Reviewed-on: #485
2025-02-15 17:23:40 +00:00
12d827ae67 Update dependency less to v4.2.2 2025-02-15 17:23:29 +00:00
b8ae49178c Merge pull request 'Update dependency gradle to v8.12.1' (#486) from renovate/gradle-8.x into main
Reviewed-on: #486
2025-02-15 17:22:45 +00:00
461c481607 Update dependency gradle to v8.12.1 2025-02-15 17:21:15 +00:00
24d1d29944
Initial commit
All checks were successful
Release / build (push) Successful in 41s
2025-02-15 17:34:58 +01:00
a51e2557c9
Use name and URL of actual production environment 2025-02-15 15:24:43 +01:00
8f0887ac8d
Remove obsolete workflows 2025-02-15 13:48:17 +01:00
8ba66866e2 Merge pull request 'Update dependency npm-run-all2 to v7' (#482) from renovate/npm-run-all2-7.x into main
Reviewed-on: #482
2025-01-03 21:55:39 +00:00
358ad425b8 Update dependency npm-run-all2 to v7
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2025-01-03 21:43:25 +00:00
5ffc647e64
Fix NPM version string; needs to be semver 🙄 2025-01-03 22:34:30 +01:00
ef572aa7f8
Update repository and download URLs 2025-01-03 22:34:24 +01:00
6c54afad92 Merge pull request 'Replace dependency npm-run-all with npm-run-all2 5.0.0' (#464) from renovate/npm-run-all-replacement into main
Reviewed-on: #464
2025-01-03 21:31:11 +00:00
8df5414e6e
Merge remote-tracking branch 'origin/main' into renovate/npm-run-all-replacement 2025-01-03 22:30:46 +01:00
ae550148d4 Merge pull request 'Update dependency browserify to v17.0.1' (#465) from renovate/browserify-17.x into main
Reviewed-on: #465
2025-01-03 21:22:11 +00:00
ff30bc43a3
Merge remote-tracking branch 'origin/main' into renovate/browserify-17.x 2025-01-03 22:20:44 +01:00
bdcaf06d8d Merge pull request 'Update dependency codemirror to v5.65.18' (#466) from renovate/codemirror-5.x into main
Reviewed-on: #466
2025-01-03 21:19:16 +00:00
9f5e19bfcf
Merge remote-tracking branch 'origin/main' into renovate/codemirror-5.x 2025-01-03 22:18:53 +01:00
318fd04ff7 Merge pull request 'Update dependency jsdoc to v4.0.4' (#467) from renovate/jsdoc-4.x into main
Reviewed-on: #467
2025-01-03 21:12:56 +00:00
f723404f96
Merge branch 'main' into renovate/jsdoc-4.x 2025-01-03 22:08:38 +01:00
6114af4cc6 Merge pull request 'Update dependency less to v4.2.1' (#468) from renovate/less-4.x into main
Reviewed-on: #468
2025-01-03 21:05:01 +00:00
9b5fe093b0 Merge branch 'main' into renovate/less-4.x 2025-01-03 21:04:45 +00:00
c336fc1f97 Merge pull request 'Update dependency alpinejs to v3.14.8' (#469) from renovate/alpinejs-3.x into main
Reviewed-on: #469
2025-01-03 20:52:28 +00:00
38b0667d2b Merge branch 'main' into renovate/alpinejs-3.x 2025-01-03 20:52:16 +00:00
9c9f8317b2 Merge pull request 'Update dependency generate-license-file to v3.6.0' (#470) from renovate/generate-license-file-3.x into main
Reviewed-on: #470
2025-01-03 20:44:25 +00:00
9ad65bbae5 Merge branch 'main' into renovate/generate-license-file-3.x 2025-01-03 20:44:16 +00:00
ffe73e0e5a Update dependency less to v4.2.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2025-01-03 20:43:26 +00:00
f258bbc81f Update dependency browserify to v17.0.1
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2025-01-03 20:43:15 +00:00
72286377df Replace dependency npm-run-all with npm-run-all2 5.0.0 2025-01-03 20:43:09 +00:00
dee6227989 Merge pull request 'Update dependency less-plugin-clean-css to v1.6.0' (#472) from renovate/less-plugin-clean-css-1.x into main
Reviewed-on: #472
2025-01-03 20:41:12 +00:00
29bf38aab2 Merge branch 'main' into renovate/less-plugin-clean-css-1.x 2025-01-03 20:41:04 +00:00
b6004b3a31
Update CommonMark packages to v0.24.0 2025-01-03 21:31:13 +01:00
a53ff1b03c
Update dependency org.jsoup:jsoup to v1.18.3 2025-01-03 21:31:13 +01:00
95aa91f33b
Update plugin com.github.jk1.dependency-license-report to v2.9 2025-01-03 21:28:39 +01:00
583f27f95d
Update plugin com.github.node-gradle.node to v7.1.0 2025-01-03 21:28:39 +01:00
4df9ce571a Merge pull request 'Update dependency gradle to v8.12' (#471) from renovate/gradle-8.x into main
Reviewed-on: #471
2025-01-03 19:31:36 +00:00
c9f7ce7b1a Merge branch 'main' into renovate/gradle-8.x 2025-01-03 18:48:37 +00:00
41f3d384c5
Merge remote-tracking branch 'remotes/origin/main' into origin/main 2025-01-03 19:35:24 +01:00
d25965a116 Enable manual trigger of Renovate workflow 2025-01-03 18:26:40 +00:00
45603d8794 Update Renovate workflow according to changes in antville/helma 2025-01-03 15:36:42 +00:00
3aeb363485 Update dependency alpinejs to v3.14.8
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2024-12-26 15:43:05 +00:00
02d566809c Update dependency gradle to v8.12 2024-12-20 16:43:27 +00:00
c7386c4ef2 Update dependency less-plugin-clean-css to v1.6.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2024-12-08 19:44:10 +00:00
31e86e0af9 Update dependency generate-license-file to v3.6.0
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2024-12-08 19:44:02 +00:00
8e38572d31 Update dependency jsdoc to v4.0.4
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2024-12-08 19:43:29 +00:00
fcb6b286f3 Update dependency codemirror to v5.65.18
All checks were successful
renovate/stability-days Updates have met minimum release age requirement
2024-12-08 19:43:20 +00:00
14e3c538ff
Migrate Renovate setup to setup at Antville.org 2024-11-01 16:28:12 +01:00
83b02c7eb6 Add .github/workflows/test.yml 2024-10-30 16:35:07 +00:00
16448dab95
Add EditorConfig for *.skin files 2024-09-21 13:45:39 +02:00
0e21a8adb6
Align the size of the button link with the button
It needs a border, though a transparent one.
2024-08-08 21:46:35 +02:00
45cafda543
Give Linux some font love 2024-08-08 21:44:40 +02:00
b774c997da
Copy during execution phase 2024-08-08 20:22:50 +02:00
19b99919d2
Merge remote-tracking branch 'origin/main' 2024-08-08 19:33:00 +02:00
c5f556a901
Update URL of stage environment 2024-08-08 19:31:50 +02:00
95aa3009dc
Initialize collection with a default value
This prevents it from being null and not iterable in the for..of loop, and Helma from throwing an exception.
2024-08-04 09:14:01 +02:00
d03e0b2987
Fix definition for CSS font shorthard property 2024-06-23 23:52:11 +02:00
998025b55c
Merge pull request #395 from antville/renovate/lock-file-maintenance
Lock file maintenance
2024-06-15 23:40:12 +02:00
42fa5a1c6d
Switch to tasks.register() to define custom tasks 2024-06-15 23:29:53 +02:00
renovate[bot]
b20a7ca05c
Lock file maintenance 2024-06-15 20:49:02 +00:00
6e085b82cb
Revert version bump; let’s release 1.6 before adding a decimal 2024-06-15 22:46:51 +02:00
e26760bdc4
Adapt version output to changes in Helma 2024-06-15 22:46:50 +02:00
508c193c50
Bump Node.js version 2024-06-15 22:41:54 +02:00
da393c74f0
Replace Gradle Git plugin with direct Git commands 2024-06-15 22:41:34 +02:00
88b8391673
No need to add the Gson library as long as it is bundles with Helma 2024-06-15 15:07:09 +02:00
1e071fd0cc
Revert CSS display of <summary> element
Otherwise the triangle to open/close a <details> element is not shown.
2024-06-11 23:05:45 +02:00
63bfe34e35
Move <p> element to customizable skin 2024-06-11 23:05:04 +02:00
6f632e9d4f
Add information about the JVM to the health page 2024-06-11 21:16:49 +02:00
81c442d5b0
Add links to dependencies listed under versions 2024-06-02 20:45:27 +02:00
893b8f98a8
Add deployment workflow 2024-06-02 02:24:27 +02:00
7db39d5c5b
Use action for setting up SSH agent 2024-06-01 19:51:44 +02:00
d74547ce41
Rsync files more specifically 2024-06-01 19:13:07 +02:00
e44539454f
Slightly reword workflow names 2024-05-31 12:30:07 +02:00
49ee8ace0d
Merge pull request #422 from antville/add-versions-to-health-output
Add version information for most important dependencies
2024-05-31 12:22:16 +02:00
6960102a81
Add version information for most important dependencies 2024-05-31 12:13:31 +02:00
dafab7f85f
Bump versions 2024-05-31 02:11:52 +02:00
23923fd694
Merge pull request #420 from antville/fix-error-in-health-action
Fix error in health action during first minutes after startup
2024-05-31 02:10:52 +02:00
f20e5d36a6
Use more reasonable defaults 2024-05-31 02:08:51 +02:00
d4bb902410
Merge remote-tracking branch 'origin/main' into fix-error-in-health-action 2024-05-31 02:03:41 +02:00
aec7a9195b
Merge pull request #421 from antville/remove-extra-git-checkout
Run tasks in project directory
2024-05-31 02:02:56 +02:00
56aff15a70
Run tasks in project directory 2024-05-31 01:51:19 +02:00
264ac59cbe
Fix error in health action during first minutes after startup
TypeError: Cannot read property "errorsPerUnit" from undefined (/home/helma/./apps/antville/code/Root/Root.js#278)
2024-05-31 00:04:38 +02:00
f2fa11cfca
Java is not needed for staging 2024-05-30 23:50:30 +02:00
dbd0071bc9
Arm GitHub workflow 2024-05-30 23:44:28 +02:00
3bd9f96c6c
Do not delete when transferring static content 2024-05-30 23:43:34 +02:00
3cf01e6bf5
Tansfer specific static files only 2024-05-30 23:38:48 +02:00
8abb8c8efd
Merge pull request #419 from antville/add-stage-workflow
Add stage workflow
2024-05-30 23:25:55 +02:00
91921c809f
Add stage workflow 2024-05-30 23:25:30 +02:00
6eeb0e12b6
Merge pull request #417 from antville/group-renovate-updates
Group Renovate updates
2024-05-30 21:56:36 +02:00
eb58b19791
Group CommonMark packages 2024-05-30 21:55:55 +02:00
a558d8c78f
Merge pull request #398 from antville/renovate/gradle-8.x
Update dependency gradle to v8.7
2024-05-30 21:44:16 +02:00
118fcf23b6
Merge pull request #416 from antville/remove-custom-codeql-config
Remove custom CodeQL workflow
2024-05-30 21:06:08 +02:00
c7d2e99de3
Remove custom CodeQL workflow 2024-05-30 21:02:42 +02:00
1e2cb8a3e3
Merge pull request #415 from antville/414-fix-code-scanning-alert-bad-html-filtering-regexp
Match also uppercase script tags in regex
2024-05-30 20:51:58 +02:00
b1869dc000
Parse also --!> as an HTML comment end tag 2024-05-30 20:48:50 +02:00
806d2b6cfd
Match also uppercase script tags in regex 2024-05-30 20:47:19 +02:00
c7822b9fc2
Update renovate.json 2024-03-24 13:51:42 +01:00
renovate[bot]
6467b38d04
Update dependency gradle to v8.7 2024-03-24 12:45:13 +00:00
187cbba693 Update renovate.json 2024-03-24 13:42:26 +01:00
09384070f9 Merge remote-tracking branch 'origin/main' 2024-03-23 23:10:49 +01:00
c0cf251e97 Add work-around for issue with CommonMark erroneously encoding HTML entities
See <https://github.com/commonmark/commonmark-java/issues/307>
2024-02-20 21:01:07 +01:00
7e17ff6f78 Remove cumbersome and obsolete mangling of strings in Story.linebreak_filter
Remove unused Story.code_filter
2024-02-20 20:13:45 +01:00
b2e5fbbe9d Correctly load and initialize Alpine.js 2024-02-20 20:11:58 +01:00
b9e557e6b8 Update changelog 2024-01-13 20:31:00 +01:00
4396dd2b44 Fix errors in the client-side code filtering the referrers 2024-01-13 20:21:38 +01:00
9ffc935ded Fix new choices being added to an existing poll at the wrong position 2024-01-13 19:55:16 +01:00
5bd5e0a5e4 Add missing URL encoding 2024-01-13 18:21:51 +01:00
763594b3ec Update changelog 2024-01-07 00:13:17 +01:00
cd35c1c26d Enable fancy console output of Gradle 2024-01-07 00:11:45 +01:00
6a8f1f2813 Fix output of non-semantic version string 2024-01-07 00:10:19 +01:00
7bf5dafec5
Merge pull request #384 from antville/renovate/lock-file-maintenance
Lock file maintenance
2024-01-06 23:31:44 +01:00
renovate[bot]
2fbf09911f
Lock file maintenance 2024-01-06 22:28:56 +00:00
5ab37a5227
Merge pull request #383 from antville/renovate/codemirror-5.x
Update dependency codemirror to v5.65.16
2024-01-06 23:27:10 +01:00
renovate[bot]
7bec2586fb
Update dependency codemirror to v5.65.16 2024-01-06 22:23:11 +00:00
44037fb22d
Merge pull request #389 from antville/renovate/alpinejs-3.x
Update dependency alpinejs to v3.13.3
2024-01-06 23:22:47 +01:00
renovate[bot]
fa8c56144a
Update dependency alpinejs to v3.13.3 2024-01-06 22:17:56 +00:00
dc551a972f
Merge pull request #386 from antville/renovate/js-md5-0.x
Update dependency js-md5 to v0.8.3
2024-01-06 23:17:29 +01:00
renovate[bot]
4070dcf19f
Update dependency js-md5 to v0.8.3 2024-01-06 21:56:39 +00:00
8bd1dad245
Merge pull request #387 from antville/renovate/com.github.node-gradle.node-7.x
Update plugin com.github.node-gradle.node to v7.0.1
2024-01-06 22:55:23 +01:00
renovate[bot]
dd14305803
Update plugin com.github.node-gradle.node to v7.0.1 2024-01-06 21:48:29 +00:00
5fee872830 Fix output path for licenses of Java libraries 2024-01-06 22:45:23 +01:00
4593e66e55 Use more fitting labels for Renovate PRs 2024-01-06 22:45:23 +01:00
38d18dc8c2 Don’t leak user data via API 2024-01-06 22:45:23 +01:00
48adee4823 Set dummy date to Antville’s birthday 2024-01-06 22:45:23 +01:00
renovate[bot]
68e2197d24 Update dependency gradle to v8.5 2024-01-06 22:45:23 +01:00
renovate[bot]
d3630b919b Update dependency generate-license-file to v3 2024-01-06 22:45:23 +01:00
renovate[bot]
78d151f5ea Update dependency org.jsoup:jsoup to v1.17.2 2024-01-06 22:45:23 +01:00
renovate[bot]
4291709620 Update actions/checkout action to v4 2024-01-06 22:45:23 +01:00
0edd1e2bff
Merge pull request #391 from antville/renovate/org.ajoberstar.grgit-5.x
Update plugin org.ajoberstar.grgit to v5.2.1
2024-01-06 22:14:13 +01:00
renovate[bot]
9c3c69fd07
Update plugin org.ajoberstar.grgit to v5.2.1 2024-01-06 20:44:22 +00:00
786208c09e
Merge pull request #393 from antville/renovate/actions-stale-9.x
Update actions/stale action to v9
2024-01-06 21:42:04 +01:00
e11eafa795
Merge pull request #394 from antville/renovate/github-codeql-action-3.x
Update github/codeql-action action to v3
2024-01-06 21:41:22 +01:00
renovate[bot]
8fbb19a349
Update github/codeql-action action to v3 2023-12-30 18:15:55 +00:00
renovate[bot]
9f8737ed3d
Update actions/stale action to v9 2023-12-30 18:15:22 +00:00
1db17b29ae Add support for images in webp format 2023-12-30 19:13:13 +01:00
c38ed1e1b4 Add NVM config file 2023-12-30 19:13:00 +01:00
2147f68168 Fix import of markdown library 2023-12-30 19:12:52 +01:00
a7d60cd0e7 Catch error where Site#trollFilter is not a string 2023-10-24 19:19:27 +02:00
772d06b3ef
Update renovate.json 2023-08-28 20:56:32 +02:00
dcf1821398
Update renovate.json 2023-08-28 20:45:40 +02:00
726dd77649
Update renovate.json 2023-08-28 20:44:49 +02:00
a0ec7b148b
Merge pull request #381 from antville/p3k-patch-1
Update renovate.json
2023-08-28 20:44:22 +02:00
eb62053bf4
Update renovate.json 2023-08-28 20:44:05 +02:00
2dda30ed75
Merge pull request #363 from antville/renovate/org.jsoup-jsoup-1.x
Update dependency org.jsoup:jsoup to v1.16.1
2023-08-28 20:10:30 +02:00
3d85327afe Sync renamed Jsoup namespace 2023-08-28 20:10:06 +02:00
6256e83f9e
Merge pull request #373 from antville/renovate/com.github.node-gradle.node-7.x
Update plugin com.github.node-gradle.node to v7
2023-08-28 20:05:54 +02:00
renovate[bot]
3134a0053f
Update plugin com.github.node-gradle.node to v7 2023-08-28 18:03:03 +00:00
ba2e3199cb
Merge pull request #367 from antville/renovate/org.ajoberstar.grgit-5.x
Update plugin org.ajoberstar.grgit to v5.2.0
2023-08-28 19:56:53 +02:00
renovate[bot]
65d3631194
Update plugin org.ajoberstar.grgit to v5.2.0 2023-08-28 17:56:37 +00:00
d344903d40
Merge pull request #379 from antville/renovate/jquery-3.x
Update dependency jquery to v3.7.1
2023-08-28 19:56:10 +02:00
renovate[bot]
1619fc5675
Update dependency jquery to v3.7.1 2023-08-28 17:54:04 +00:00
e33f92b07a
Merge pull request #364 from antville/renovate/com.github.jk1.dependency-license-report-2.x
Update plugin com.github.jk1.dependency-license-report to v2.5
2023-08-28 19:53:38 +02:00
b92c0f9c50 Sync JSoup version number 2023-08-28 17:52:03 +00:00
4529c9c372 Remove Dependabot configuration 2023-08-28 19:45:37 +02:00
renovate[bot]
27d1ee65d9
Update plugin com.github.jk1.dependency-license-report to v2.5 2023-08-27 18:17:39 +00:00
renovate[bot]
748825e40c
Update dependency org.jsoup:jsoup to v1.16.1 2023-08-27 18:17:35 +00:00
renovate[bot]
29cee882c0 Update actions/checkout action to v3 2023-08-27 20:16:49 +02:00
renovate[bot]
934735e15d Update actions/stale action to v8 2023-08-27 20:16:49 +02:00
3f554e1266
Merge pull request #362 from antville/renovate/configure
Configure Renovate
2023-08-27 13:00:45 +02:00
renovate[bot]
ff1d283448
Add renovate.json 2023-08-27 10:57:52 +00:00
fe83d13b48
Merge pull request #361 from antville/gradle-8-upgrade
Gradle 8 upgrade
2023-08-27 12:33:40 +02:00
32c56b5c9d Upgrade Gradle to latest version 2023-08-27 12:27:04 +02:00
5f45255c24 Update changelog 2023-08-27 12:26:14 +02:00
1a5d2d8a13
Merge pull request #360 from antville/rewrite-for-each-with-for-of
Replace `for…each` loops with `for…of`
2023-08-27 12:14:16 +02:00
69e46539d0 Merge branch 'main' into rewrite-for-each-with-for-of 2023-08-27 00:16:47 +02:00
5fc1852035
The JavaExecSpec.main property has been deprecated
This is scheduled to be removed in Gradle 9.0. Please use the mainClass property instead. For more information, please refer to https://docs.gradle.org/8.3/dsl/org.gradle.process.JavaExecSpec.html#org.gradle.process.JavaExecSpec:main in the Gradle documentation.
2023-08-27 00:14:28 +02:00
d2501c2d3a Replace for..each loops with for..of
💡 Needs Helma with enabled ES6 features in Rhino
2023-08-27 00:09:17 +02:00
8c5cbde7b5
Fix reference to upgraded GSON package 2023-08-26 23:39:18 +02:00
fd517885f8
Remove references to unsocial networks 2023-08-26 23:13:39 +02:00
b196d285cd
Fix wrong name for a JSDoc option 2023-08-26 22:58:52 +02:00
c4f7a7991a
Merge pull request #323 from antville/dependabot/gradle/org.ajoberstar.grgit-5.0.0
build(deps): bump org.ajoberstar.grgit from 4.1.1 to 5.0.0
2023-08-26 21:24:02 +02:00
816c7151ab
Merge branch 'main' into dependabot/gradle/org.ajoberstar.grgit-5.0.0 2023-08-26 21:23:42 +02:00
18c80b047d Merge pull request #352 from antville/dependabot/gradle/org.commonmark-commonmark-ext-autolink-0.21.0
build(deps): bump commonmark-ext-autolink from 0.18.1 to 0.21.0
2023-08-26 21:10:28 +02:00
fab5fa2e14
Merge pull request #353 from antville/dependabot/gradle/com.github.node-gradle.node-3.5.1
build(deps): bump com.github.node-gradle.node from 3.1.1 to 3.5.1
2023-08-26 20:53:48 +02:00
b8a87576c0 Merge remote-tracking branch 'origin/main' 2023-08-26 20:18:47 +02:00
9e371e7012
Merge pull request #317 from antville/dependabot/gradle/com.github.jk1.dependency-license-report-2.1
build(deps): bump com.github.jk1.dependency-license-report from 2.0 to 2.1
2023-08-26 20:17:56 +02:00
70d0b51c92 Remove script for running JSDoc again 2023-08-26 20:15:20 +02:00
e9d1014e3f Rewrite Gradle scripts for using NPM instead of Yarn 2023-08-26 19:43:50 +02:00
413e5ca70d Rename some NPM scripts and increase the verbosity of some arguments 2023-08-26 18:42:23 +02:00
7d91d5bcf7 Add build script for all scripts prefixed with “build:” 2023-08-26 18:25:36 +02:00
8a2d0a3209 Update changelog 2023-08-26 18:15:57 +02:00
a9e5c204fe Upgrade CodeMirror package to latest version 5.x 2023-08-26 18:14:42 +02:00
e59635f4ae Upgrade Less.js package to the latest version 2023-08-26 18:14:42 +02:00
f9c8214348 Upgrade JSDoc package to the latest version 2023-08-26 18:14:42 +02:00
3e29317264 Upgrade jQuery to the latest version 2023-08-26 18:14:42 +02:00
6a12114927 Upgrade Alpine.js package to the latest version 2023-08-26 18:14:42 +02:00
c437076c49 Pin versions 2023-08-26 17:05:05 +02:00
ffa3f65f10 Rename dev scripts/prefix to watch 2023-08-26 16:58:35 +02:00
31a1cb0a86 Migrate from Yarn back to NPM 2023-08-26 16:35:10 +02:00
50ff264517 Fix version bump of GSON Java library 2023-05-21 12:42:40 +02:00
416898f83b
Merge pull request #356 from antville/355-harden-search-against-sql-injection
Harden search against SQL injection
2023-03-05 15:33:16 +01:00
f42812d771 Transform SQL search queries to support prepared statements 2023-03-05 13:28:25 +01:00
f25200f5fd Support prepared statements in Sql library 2023-03-05 13:27:19 +01:00
a55999a14c Let Sql.prepare() automagically set int and string values
Return the actual prepared statement for further processing
2023-03-05 13:26:20 +01:00
c9f25316a2 Revert to previous code
with the exception of introducing an option for prepared statements
2023-03-05 13:22:29 +01:00
ab10032de9 Merge branch 'main' into 355-harden-search-against-sql-injection 2023-03-04 00:20:19 +01:00
1356b7cb67
Merge pull request #358 from antville/357-upgrade-codeql-action
Bump CodeQL Action to version 2
2023-03-04 00:17:34 +01:00
e3dfbc704e Bump CodeQL Action to version 2 2023-03-03 23:13:29 +00:00
c7cf535652 Prevent SQL injection in search by using prepared statement 2023-03-03 17:59:59 +01:00
a5424825b8 Add Sql.prepare() method for handling prepared statements 2023-03-03 17:59:24 +01:00
dependabot[bot]
9ab30b47e8
build(deps): bump com.github.node-gradle.node from 3.1.1 to 3.5.1
Bumps com.github.node-gradle.node from 3.1.1 to 3.5.1.

---
updated-dependencies:
- dependency-name: com.github.node-gradle.node
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-12-27 16:01:51 +00:00
dependabot[bot]
04550673f9
build(deps): bump commonmark-ext-autolink from 0.18.1 to 0.21.0
Bumps [commonmark-ext-autolink](https://github.com/commonmark/commonmark-java) from 0.18.1 to 0.21.0.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.18.1...commonmark-parent-0.21.0)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark-ext-autolink
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-11-17 16:05:49 +00:00
dependabot[bot]
7852d26b6c
build(deps): bump org.ajoberstar.grgit from 4.1.1 to 5.0.0
Bumps [org.ajoberstar.grgit](https://github.com/ajoberstar/grgit) from 4.1.1 to 5.0.0.
- [Release notes](https://github.com/ajoberstar/grgit/releases)
- [Commits](https://github.com/ajoberstar/grgit/compare/4.1.1...5.0.0)

---
updated-dependencies:
- dependency-name: org.ajoberstar.grgit
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-02-11 16:10:16 +00:00
dependabot[bot]
40e1d2d6fa
build(deps): bump com.github.jk1.dependency-license-report
Bumps com.github.jk1.dependency-license-report from 2.0 to 2.1.

---
updated-dependencies:
- dependency-name: com.github.jk1.dependency-license-report
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-20 16:15:29 +00:00
af1f560c66
Merge pull request #308 from antville/dependabot/gradle/org.ajoberstar.grgit-4.1.1
build(deps): bump org.ajoberstar.grgit from 4.1.0 to 4.1.1
2021-12-11 16:03:46 +01:00
6ec7fccac9 Merge remote-tracking branch 'origin/dependabot/gradle/org.ajoberstar.grgit-4.1.1' into dependabot/gradle/org.ajoberstar.grgit-4.1.1 2021-12-11 16:00:38 +01:00
288e21a710 Merge branch 'main' into dependabot/gradle/org.ajoberstar.grgit-4.1.1 2021-12-11 15:55:53 +01:00
dependabot[bot]
b063643e2f
build(deps): bump org.ajoberstar.grgit from 4.1.0 to 4.1.1
Bumps org.ajoberstar.grgit from 4.1.0 to 4.1.1.

---
updated-dependencies:
- dependency-name: org.ajoberstar.grgit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-11 14:55:34 +00:00
81a5bac780
Merge pull request #307 from antville/dependabot/gradle/com.github.node-gradle.node-3.1.1
build(deps): bump com.github.node-gradle.node from 3.1.0 to 3.1.1
2021-12-11 15:54:56 +01:00
1f5094c165 Merge branch 'main' into dependabot/gradle/com.github.node-gradle.node-3.1.1 2021-12-11 15:50:43 +01:00
f4de3114b8
Merge pull request #306 from antville/dependabot/gradle/com.github.jk1.dependency-license-report-2.0
build(deps): bump com.github.jk1.dependency-license-report from 1.16 to 2.0
2021-12-11 15:49:59 +01:00
c9f7043a90 Merge branch 'main' into dependabot/gradle/com.github.jk1.dependency-license-report-2.0 2021-12-11 15:41:36 +01:00
b7e7645eef
Merge pull request #293 from antville/dependabot/npm_and_yarn/codemirror-5.64.0
build(deps): bump codemirror from 5.61.0 to 5.64.0
2021-12-11 15:31:51 +01:00
dependabot[bot]
0dc29460e4
build(deps): bump org.ajoberstar.grgit from 4.1.0 to 4.1.1
Bumps org.ajoberstar.grgit from 4.1.0 to 4.1.1.

---
updated-dependencies:
- dependency-name: org.ajoberstar.grgit
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-11 12:01:37 +00:00
5f4dc8b314 Merge branch 'main' into dependabot/npm_and_yarn/codemirror-5.64.0 2021-12-11 13:01:36 +01:00
dbe96d4cdd
Merge pull request #289 from antville/dependabot/npm_and_yarn/less-4.1.2
build(deps-dev): bump less from 4.1.1 to 4.1.2
2021-12-11 13:00:54 +01:00
cf4486e397 Merge branch 'main' into dependabot/npm_and_yarn/less-4.1.2 2021-12-11 12:58:01 +01:00
180d271c66 Bump Node and Yarn versions 2021-12-11 12:53:58 +01:00
71c3eec62d Merge branch 'main' into dependabot/npm_and_yarn/less-4.1.2 2021-12-11 12:44:51 +01:00
dependabot[bot]
99c9f00db4
build(deps): bump com.github.node-gradle.node from 3.1.0 to 3.1.1
Bumps com.github.node-gradle.node from 3.1.0 to 3.1.1.

---
updated-dependencies:
- dependency-name: com.github.node-gradle.node
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-11 11:42:04 +00:00
e27958fd2f
Merge pull request #288 from antville/dependabot/gradle/org.jsoup-jsoup-1.14.3
build(deps): bump jsoup from 1.13.1 to 1.14.3
2021-12-11 12:41:29 +01:00
174864b3aa Bump JSoup version in JS code 2021-12-11 12:33:58 +01:00
dependabot[bot]
adf2d4002d
build(deps): bump jsoup from 1.13.1 to 1.14.3
Bumps [jsoup](https://github.com/jhy/jsoup) from 1.13.1 to 1.14.3.
- [Release notes](https://github.com/jhy/jsoup/releases)
- [Changelog](https://github.com/jhy/jsoup/blob/master/CHANGES)
- [Commits](https://github.com/jhy/jsoup/compare/jsoup-1.13.1...jsoup-1.14.3)

---
updated-dependencies:
- dependency-name: org.jsoup:jsoup
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-11 11:29:02 +00:00
dependabot[bot]
559d95cf16
build(deps): bump com.github.jk1.dependency-license-report
Bumps com.github.jk1.dependency-license-report from 1.16 to 2.0.

---
updated-dependencies:
- dependency-name: com.github.jk1.dependency-license-report
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-12-11 11:28:36 +00:00
9c737b5552
Merge pull request #305 from antville/upgrade-commonmark-0.17.1-0.18.1
Upgrade commonmark 0.17.1 to 0.18.1
2021-12-11 12:28:17 +01:00
e82eda3252 Merge remote-tracking branch 'origin/dependabot/gradle/org.commonmark-commonmark-ext-gfm-tables-0.18.1' into upgrade-commonmark-0.17.1-0.18.1
Fix #295 #296 #297 #298
2021-12-11 12:26:25 +01:00
229209c3a3 Merge remote-tracking branch 'origin/dependabot/gradle/org.commonmark-commonmark-ext-gfm-strikethrough-0.18.1' into upgrade-commonmark-0.17.1-0.18.1 2021-12-11 12:13:06 +01:00
1d445b72f0 Merge remote-tracking branch 'origin/dependabot/gradle/org.commonmark-commonmark-ext-autolink-0.18.1' into upgrade-commonmark-0.17.1-0.18.1 2021-12-11 12:12:20 +01:00
2ec999c49d Merge remote-tracking branch 'origin/dependabot/gradle/org.commonmark-commonmark-0.18.1' into upgrade-commonmark-0.17.1-0.18.1 2021-12-11 12:09:54 +01:00
8f8a5fa341
Merge pull request #304 from antville/fix-codeql-js-incomplete-sanitization
Fix CodeQL issue js/incomplete-sanitization
2021-12-11 11:48:40 +01:00
dbec5531e8 Fix CodeQL issue js/incomplete-sanitization 2021-12-11 11:45:54 +01:00
ce68275e4e
Merge pull request #302 from antville/fix-codeql-js-useless-regexp-character-escape
Fix CodeQL issue js/useless-regexp-character-escape
2021-12-11 11:34:20 +01:00
96ca0b6690 Fix CodeQL issue js/useless-regexp-character-escape 2021-12-11 11:31:21 +01:00
e437bec53e
Merge pull request #275 from antville/dependabot/npm_and_yarn/path-parse-1.0.7
build(deps): bump path-parse from 1.0.6 to 1.0.7
2021-12-05 00:13:36 +01:00
bddbfe6547
Merge pull request #260 from antville/dependabot/npm_and_yarn/glob-parent-5.1.2
build(deps): bump glob-parent from 5.1.1 to 5.1.2
2021-12-05 00:13:10 +01:00
42799ec995 Add support for hiding elements “x-cloaked“ with AlpineJS 2021-12-04 22:58:52 +01:00
7fef2bfaa8 Improve header display across browsers 2021-12-04 22:58:05 +01:00
32e1a595eb Slightly increase top margin of main header 2021-12-04 22:28:36 +01:00
0bf402827f Format comments with Markdown by default 2021-12-04 22:14:45 +01:00
750f174508 Update URLs of Antville / Helma buttons 2021-12-04 22:13:38 +01:00
675d0c4182 Add support for lazy loading in image macro 2021-12-04 22:12:05 +01:00
dependabot[bot]
dc80cf2ccd
build(deps): bump commonmark-ext-autolink from 0.17.1 to 0.18.1
Bumps [commonmark-ext-autolink](https://github.com/commonmark/commonmark-java) from 0.17.1 to 0.18.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.17.1...commonmark-parent-0.18.1)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark-ext-autolink
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 16:11:20 +00:00
dependabot[bot]
745e594941
build(deps): bump commonmark from 0.17.1 to 0.18.1
Bumps [commonmark](https://github.com/commonmark/commonmark-java) from 0.17.1 to 0.18.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.17.1...commonmark-parent-0.18.1)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 16:11:10 +00:00
dependabot[bot]
0115e0382b
build(deps): bump commonmark-ext-gfm-strikethrough from 0.17.1 to 0.18.1
Bumps [commonmark-ext-gfm-strikethrough](https://github.com/commonmark/commonmark-java) from 0.17.1 to 0.18.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.17.1...commonmark-parent-0.18.1)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark-ext-gfm-strikethrough
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 16:11:07 +00:00
dependabot[bot]
5ba9989c93
build(deps): bump commonmark-ext-gfm-tables from 0.17.1 to 0.18.1
Bumps [commonmark-ext-gfm-tables](https://github.com/commonmark/commonmark-java) from 0.17.1 to 0.18.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.17.1...commonmark-parent-0.18.1)

---
updated-dependencies:
- dependency-name: org.commonmark:commonmark-ext-gfm-tables
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-29 16:11:03 +00:00
dependabot[bot]
233e7f1023
build(deps): bump codemirror from 5.61.0 to 5.64.0
Bumps [codemirror](https://github.com/codemirror/CodeMirror) from 5.61.0 to 5.64.0.
- [Release notes](https://github.com/codemirror/CodeMirror/releases)
- [Changelog](https://github.com/codemirror/CodeMirror/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codemirror/CodeMirror/compare/5.61.0...5.64.0)

---
updated-dependencies:
- dependency-name: codemirror
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-11-22 16:01:37 +00:00
dependabot[bot]
f73400884f
build(deps-dev): bump less from 4.1.1 to 4.1.2
Bumps [less](https://github.com/less/less.js) from 4.1.1 to 4.1.2.
- [Release notes](https://github.com/less/less.js/releases)
- [Changelog](https://github.com/less/less.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/less/less.js/commits)

---
updated-dependencies:
- dependency-name: less
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-10-04 16:01:20 +00:00
d0d0ba7ddb Modify hash for automatic login to only include one IP
Remove unused cookieLevel property
2021-09-05 15:22:25 +02:00
dependabot[bot]
d4495fa735
build(deps): bump path-parse from 1.0.6 to 1.0.7
Bumps [path-parse](https://github.com/jbgutierrez/path-parse) from 1.0.6 to 1.0.7.
- [Release notes](https://github.com/jbgutierrez/path-parse/releases)
- [Commits](https://github.com/jbgutierrez/path-parse/commits/v1.0.7)

---
updated-dependencies:
- dependency-name: path-parse
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-08-11 01:02:27 +00:00
dependabot[bot]
00be74d8dd
build(deps): bump glob-parent from 5.1.1 to 5.1.2
Bumps [glob-parent](https://github.com/gulpjs/glob-parent) from 5.1.1 to 5.1.2.
- [Release notes](https://github.com/gulpjs/glob-parent/releases)
- [Changelog](https://github.com/gulpjs/glob-parent/blob/main/CHANGELOG.md)
- [Commits](https://github.com/gulpjs/glob-parent/compare/v5.1.1...v5.1.2)

---
updated-dependencies:
- dependency-name: glob-parent
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2021-06-11 20:57:39 +00:00
6e40b1fdec Format story content in compat layer as Markdown 2021-06-06 20:45:43 +02:00
628caae82c Set default release date to Antville’s birthday 2021-06-06 20:45:03 +02:00
4276bd7862
Remove Java language
(added by mistake)
2021-05-17 14:18:45 +02:00
099f9e7fa6
Create stale.yml 2021-05-16 14:36:09 +02:00
178441ab87
Add Java language 2021-05-16 14:34:35 +02:00
8c4bf49270
Create codeql-analysis.yml 2021-05-16 14:27:52 +02:00
bf5c7e257d
Merge pull request #254 from antville/dependabot/fix-underscore-security-issue
Upgrade JSDoc dependency
2021-05-16 14:18:32 +02:00
631258b5f6 Upgrade JSDoc dependency 2021-05-16 14:15:24 +02:00
c6488102c1
Merge pull request #251 from antville/dependabot/npm_and_yarn/lodash-4.17.21
build(deps): bump lodash from 4.17.19 to 4.17.21
2021-05-16 14:02:32 +02:00
ddf7c80b3a
Merge pull request #252 from antville/dependabot/npm_and_yarn/hosted-git-info-2.8.9
build(deps): bump hosted-git-info from 2.8.8 to 2.8.9
2021-05-16 14:02:06 +02:00
fd84b89f12
Merge pull request #250 from antville/dependabot/gradle/com.github.node-gradle.node-3.1.0
build(deps): bump com.github.node-gradle.node from 3.0.1 to 3.1.0
2021-05-16 13:57:23 +02:00
ae74311d11
Merge pull request #249 from antville/dependabot/npm_and_yarn/codemirror-5.61.0
build(deps): bump codemirror from 5.60.0 to 5.61.0
2021-05-16 13:37:23 +02:00
dependabot[bot]
f6105b7476
build(deps): bump hosted-git-info from 2.8.8 to 2.8.9
Bumps [hosted-git-info](https://github.com/npm/hosted-git-info) from 2.8.8 to 2.8.9.
- [Release notes](https://github.com/npm/hosted-git-info/releases)
- [Changelog](https://github.com/npm/hosted-git-info/blob/v2.8.9/CHANGELOG.md)
- [Commits](https://github.com/npm/hosted-git-info/compare/v2.8.8...v2.8.9)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-11 19:40:39 +00:00
dependabot[bot]
75f8dfe60d
build(deps): bump lodash from 4.17.19 to 4.17.21
Bumps [lodash](https://github.com/lodash/lodash) from 4.17.19 to 4.17.21.
- [Release notes](https://github.com/lodash/lodash/releases)
- [Commits](https://github.com/lodash/lodash/compare/4.17.19...4.17.21)

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-11 09:15:27 +00:00
dependabot[bot]
b67f421edc
build(deps): bump com.github.node-gradle.node from 3.0.1 to 3.1.0
Bumps com.github.node-gradle.node from 3.0.1 to 3.1.0.

Signed-off-by: dependabot[bot] <support@github.com>
2021-05-10 09:56:47 +00:00
dependabot[bot]
9c39d75cc7
build(deps): bump codemirror from 5.60.0 to 5.61.0
Bumps [codemirror](https://github.com/codemirror/CodeMirror) from 5.60.0 to 5.61.0.
- [Release notes](https://github.com/codemirror/CodeMirror/releases)
- [Changelog](https://github.com/codemirror/CodeMirror/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codemirror/CodeMirror/compare/5.60.0...5.61.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-21 05:02:08 +00:00
0ecc3c8c8d
Merge pull request #241 from antville/dependabot/npm_and_yarn/less-4.1.1
build(deps-dev): bump less from 3.11.1 to 4.1.1
2021-04-18 18:39:08 +02:00
ad0f7e0c65 Build files initially in dev mode 2021-04-18 18:38:40 +02:00
f87eac943e Merge branch 'dependabot/npm_and_yarn/less-4.1.1' of github.com:antville/antville into dependabot/npm_and_yarn/less-4.1.1 2021-04-18 18:35:22 +02:00
dependabot[bot]
d1e605cadb
build(deps-dev): bump less from 3.11.1 to 4.1.1
Bumps [less](https://github.com/less/less.js) from 3.11.1 to 4.1.1.
- [Release notes](https://github.com/less/less.js/releases)
- [Changelog](https://github.com/less/less.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/less/less.js/compare/v3.11.1...v4.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-18 16:32:45 +00:00
d8f52a063f
Merge pull request #245 from antville/dependabot/npm_and_yarn/alpinejs-2.8.2
build(deps): bump alpinejs from 2.3.3 to 2.8.2
2021-04-18 18:31:02 +02:00
dependabot[bot]
5154650c25
build(deps): bump alpinejs from 2.3.3 to 2.8.2
Bumps [alpinejs](https://github.com/alpinejs/alpine) from 2.3.3 to 2.8.2.
- [Release notes](https://github.com/alpinejs/alpine/releases)
- [Commits](https://github.com/alpinejs/alpine/compare/v2.3.3...v2.8.2)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-18 16:21:47 +00:00
394fbe9c66
Merge pull request #243 from antville/dependabot/npm_and_yarn/jquery-3.6.0
build(deps): bump jquery from 3.5.1 to 3.6.0
2021-04-18 18:20:16 +02:00
3ec835cb73 Merge branch 'main' into dependabot/npm_and_yarn/jquery-3.6.0 2021-04-18 17:53:28 +02:00
dependabot[bot]
281232f0a9
build(deps-dev): bump less from 3.11.1 to 4.1.1
Bumps [less](https://github.com/less/less.js) from 3.11.1 to 4.1.1.
- [Release notes](https://github.com/less/less.js/releases)
- [Changelog](https://github.com/less/less.js/blob/master/CHANGELOG.md)
- [Commits](https://github.com/less/less.js/compare/v3.11.1...v4.1.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-18 15:15:23 +00:00
00cc3f780c
Merge pull request #244 from antville/dependabot/npm_and_yarn/browserify-17.0.0
build(deps-dev): bump browserify from 16.5.1 to 17.0.0
2021-04-18 17:13:36 +02:00
900fd2635c Add Gradle task setting Yarn version 2021-04-18 17:10:50 +02:00
8edd8d1dcd Merge branch 'main' into dependabot/npm_and_yarn/browserify-17.0.0 2021-04-18 16:42:27 +02:00
e7750a2281
Merge pull request #236 from antville/dependabot/gradle/com.github.node-gradle.node-3.0.1
build(deps): bump com.github.node-gradle.node from 2.2.3 to 3.0.1
2021-04-18 16:41:53 +02:00
735f580b32 Bump Yarn version 2021-04-18 16:41:29 +02:00
287df1e4ec Bump Node to latest LTS 2021-04-18 16:40:26 +02:00
1144db0434 Merge branch 'main' into dependabot/gradle/com.github.node-gradle.node-3.0.1 2021-04-18 16:37:09 +02:00
25d309fe81 Bump Gradle version 2021-04-18 16:35:22 +02:00
29d25a08ad Merge branch 'main' into dependabot/gradle/com.github.node-gradle.node-3.0.1 2021-04-18 15:56:06 +02:00
60c9f486d0 Fix error when dir already exists 2021-04-18 15:54:16 +02:00
4835eb8884 Bump commonmark version 2021-04-18 15:53:56 +02:00
a24e9681ec
Merge pull request #246 from antville/dependabot/gradle/org.commonmark-commonmark-ext-gfm-tables-0.17.1
build(deps): bump commonmark-ext-gfm-tables from 0.14.0 to 0.17.1
2021-04-18 15:29:05 +02:00
dependabot[bot]
c96fdb8c49
build(deps): bump commonmark-ext-gfm-tables from 0.14.0 to 0.17.1
Bumps [commonmark-ext-gfm-tables](https://github.com/commonmark/commonmark-java) from 0.14.0 to 0.17.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.14.0...commonmark-parent-0.17.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-18 13:29:01 +00:00
8918870bde
Merge pull request #247 from antville/dependabot/gradle/org.commonmark-commonmark-ext-gfm-strikethrough-0.17.1
build(deps): bump commonmark-ext-gfm-strikethrough from 0.14.0 to 0.17.1
2021-04-18 15:28:45 +02:00
dependabot[bot]
196bb0f435
build(deps): bump commonmark-ext-gfm-strikethrough from 0.14.0 to 0.17.1
Bumps [commonmark-ext-gfm-strikethrough](https://github.com/commonmark/commonmark-java) from 0.14.0 to 0.17.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.14.0...commonmark-parent-0.17.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-18 13:28:30 +00:00
9d53108f4f
Merge pull request #248 from antville/dependabot/gradle/org.commonmark-commonmark-ext-autolink-0.17.1
build(deps): bump commonmark-ext-autolink from 0.14.0 to 0.17.1
2021-04-18 15:27:58 +02:00
5066a6d21d Merge branch 'main' of github.com:antville/antville 2021-04-18 15:17:28 +02:00
9e0b760237 Save domains.map in static dir 2021-04-18 14:58:31 +02:00
48793c4190
Add myself as default assignee 2021-04-05 12:11:53 +02:00
dependabot[bot]
6dada559f1
build(deps): bump commonmark-ext-autolink from 0.14.0 to 0.17.1
Bumps [commonmark-ext-autolink](https://github.com/commonmark/commonmark-java) from 0.14.0 to 0.17.1.
- [Release notes](https://github.com/commonmark/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/commonmark/commonmark-java/compare/commonmark-parent-0.14.0...commonmark-parent-0.17.1)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-05 09:24:24 +00:00
dependabot[bot]
2b006cc113
build(deps-dev): bump browserify from 16.5.1 to 17.0.0
Bumps [browserify](https://github.com/browserify/browserify) from 16.5.1 to 17.0.0.
- [Release notes](https://github.com/browserify/browserify/releases)
- [Changelog](https://github.com/browserify/browserify/blob/master/changelog.markdown)
- [Commits](https://github.com/browserify/browserify/compare/v16.5.1...v17.0.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-05 05:06:17 +00:00
dependabot[bot]
4772796817
build(deps): bump jquery from 3.5.1 to 3.6.0
Bumps [jquery](https://github.com/jquery/jquery) from 3.5.1 to 3.6.0.
- [Release notes](https://github.com/jquery/jquery/releases)
- [Commits](https://github.com/jquery/jquery/compare/3.5.1...3.6.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-05 05:05:50 +00:00
82c4072160
Merge pull request #240 from antville/dependabot/npm_and_yarn/codemirror-5.60.0
build(deps): bump codemirror from 5.53.2 to 5.60.0
2021-04-04 23:26:16 +02:00
468b046104
Merge pull request #239 from antville/dependabot/npm_and_yarn/onchange-7.1.0
build(deps-dev): bump onchange from 7.0.2 to 7.1.0
2021-04-04 23:25:01 +02:00
dependabot[bot]
e317b74aba
build(deps): bump com.github.node-gradle.node from 2.2.3 to 3.0.1
Bumps com.github.node-gradle.node from 2.2.3 to 3.0.1.

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 19:10:12 +00:00
8b993edc28
Merge pull request #242 from antville/dependabot/npm_and_yarn/jsdoc-3.6.6
build(deps-dev): bump jsdoc from 3.6.4 to 3.6.6
2021-04-04 21:09:46 +02:00
94f727a993
Merge pull request #234 from antville/dependabot/gradle/org.ajoberstar.grgit-4.1.0
build(deps): bump org.ajoberstar.grgit from 4.0.2 to 4.1.0
2021-04-04 21:05:14 +02:00
8656b9be92
Merge pull request #237 from antville/dependabot/gradle/com.github.jk1.dependency-license-report-1.16
build(deps): bump com.github.jk1.dependency-license-report from 1.13 to 1.16
2021-04-04 21:04:06 +02:00
23a510d9d3
Merge pull request #235 from antville/dependabot/gradle/com.atlassian.commonmark-commonmark-0.17.0
build(deps): bump commonmark from 0.14.0 to 0.17.0
2021-04-04 20:50:18 +02:00
a4a1fc757a
Fix location of moved artifacts 2021-04-04 20:49:32 +02:00
dependabot[bot]
f2463752e5
build(deps-dev): bump jsdoc from 3.6.4 to 3.6.6
Bumps [jsdoc](https://github.com/jsdoc/jsdoc) from 3.6.4 to 3.6.6.
- [Release notes](https://github.com/jsdoc/jsdoc/releases)
- [Changelog](https://github.com/jsdoc/jsdoc/blob/master/CHANGES.md)
- [Commits](https://github.com/jsdoc/jsdoc/compare/3.6.4...3.6.6)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 18:34:58 +00:00
dependabot[bot]
2e906a8d94
build(deps): bump codemirror from 5.53.2 to 5.60.0
Bumps [codemirror](https://github.com/codemirror/CodeMirror) from 5.53.2 to 5.60.0.
- [Release notes](https://github.com/codemirror/CodeMirror/releases)
- [Changelog](https://github.com/codemirror/CodeMirror/blob/master/CHANGELOG.md)
- [Commits](https://github.com/codemirror/CodeMirror/compare/5.53.2...5.60.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 18:34:34 +00:00
dependabot[bot]
6c641f1125
build(deps-dev): bump onchange from 7.0.2 to 7.1.0
Bumps [onchange](https://github.com/Qard/onchange) from 7.0.2 to 7.1.0.
- [Release notes](https://github.com/Qard/onchange/releases)
- [Commits](https://github.com/Qard/onchange/compare/v7.0.2...v7.1.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 18:34:27 +00:00
dependabot[bot]
f59cedcea0
build(deps): bump com.github.jk1.dependency-license-report
Bumps com.github.jk1.dependency-license-report from 1.13 to 1.16.

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 18:33:36 +00:00
dependabot[bot]
cdab84b54b
build(deps): bump commonmark from 0.14.0 to 0.17.0
Bumps [commonmark](https://github.com/atlassian/commonmark-java) from 0.14.0 to 0.17.0.
- [Release notes](https://github.com/atlassian/commonmark-java/releases)
- [Changelog](https://github.com/commonmark/commonmark-java/blob/main/CHANGELOG.md)
- [Commits](https://github.com/atlassian/commonmark-java/compare/commonmark-parent-0.14.0...commonmark-parent-0.17.0)

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 18:33:34 +00:00
dependabot[bot]
c91a765a31
build(deps): bump org.ajoberstar.grgit from 4.0.2 to 4.1.0
Bumps org.ajoberstar.grgit from 4.0.2 to 4.1.0.

Signed-off-by: dependabot[bot] <support@github.com>
2021-04-04 18:33:31 +00:00
8050d7ed6c
Create dependabot.yml 2021-04-04 20:33:09 +02:00
0ec3464962 Remove obsolete code in comments 2021-04-04 14:22:49 +02:00
1e78e4da64 Still tweaking redirect after delete/cancel 2021-04-04 14:08:12 +02:00
34f61ea7d9 Use hashed filenames when saving
Refactor File.getName() method to return a string consisting of the
hashed filename, a random string and the current timestamp.

This way, there should be no more issue with unsupported characters in the
filename.

Furthermore, Helma’s internal access names are now fully decoupled from
the filename and thus, the full unicode set should be available for naming.
2021-04-04 13:46:40 +02:00
6f6b15f6a1 Merge branch 'main' of github.com:antville/antville 2021-04-04 11:24:10 +02:00
956dcec279
Merge pull request #231 from antville/dependabot/npm_and_yarn/elliptic-6.5.4
build(deps): bump elliptic from 6.5.3 to 6.5.4
2021-03-16 21:50:45 +01:00
dependabot[bot]
154aa4235b
build(deps): bump elliptic from 6.5.3 to 6.5.4
Bumps [elliptic](https://github.com/indutny/elliptic) from 6.5.3 to 6.5.4.
- [Release notes](https://github.com/indutny/elliptic/releases)
- [Commits](https://github.com/indutny/elliptic/compare/v6.5.3...v6.5.4)

Signed-off-by: dependabot[bot] <support@github.com>
2021-03-09 04:08:57 +00:00
97b2d790c7 fix: incorrect site reference when displaying timeline 2020-06-14 19:25:31 +02:00
73 changed files with 7586 additions and 3225 deletions

View file

@ -10,8 +10,8 @@ end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
[*.{java,skin}]
indent_size = 3
[*.md]
trim_trailing_whitespace = false
[*.{java}]
indent_size = 3

15
.github/workflows/deploy.yml vendored Normal file
View file

@ -0,0 +1,15 @@
name: Deploy (Production)
on: workflow_dispatch
jobs:
deploy:
runs-on: antville
environment:
name: antville.org
url: https://antville.org
steps:
- name: Copy files to production server
run: ssh staging-server deploy-antville

60
.github/workflows/release.yml vendored Normal file
View file

@ -0,0 +1,60 @@
name: Release
on:
workflow_dispatch:
push:
tags: '1.6.*'
permissions:
contents: write
jobs:
release:
runs-on: antville
env:
GH_TOKEN: ${{ secrets.GH_TOKEN }}
LC_TIME: en_US.UTF-8
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- name: Build with Gradle
run: ./gradlew assembleDist
- name: Create release notes
id: create_release_notes
run: |
release_notes=$(npx git-cliff@latest --latest)
# Write the release notes as a heredoc to the workflow output
# ⚠️ No white space around `<<` is crucial!
echo "release_notes<<.eot0x03" >> $GITHUB_OUTPUT
echo "$release_notes" >> $GITHUB_OUTPUT
echo ".eot0x03" >> $GITHUB_OUTPUT
- name: Create release
uses: actions/forgejo-release@v2
with:
direction: upload
url: https://code.host.antville.org
token: ${{ github.token }}
title: Antville ${{ github.ref_name }}
release-dir: build/distributions
release-notes: ${{ steps.create_release_notes.outputs.release_notes }}
hide-archive-link: true
verbose: true
- name: Create release at GitHub
run: |
gh release create "$GITHUB_REF_NAME" \
--repo "$GITHUB_REPOSITORY" \
--title "Antville ${{ github.ref_name }}" \
--notes "${{ steps.create_release_notes.outputs.release_notes }}"
- name: Upload release assets to GitHub
run: |
gh release upload "$GITHUB_REF_NAME" build/distributions/ant*.* \
--repo "$GITHUB_REPOSITORY" \
--clobber

41
.github/workflows/renovate.yml vendored Normal file
View file

@ -0,0 +1,41 @@
name: Run Renovate
on:
schedule:
- cron: "42 * * * *"
workflow_dispatch:
jobs:
renovate:
runs-on: antville
steps:
- uses: actions/checkout@v4
- name: Run Renovate
# See <https://docs.renovatebot.com/troubleshooting/#log-debug-levels>
# debug | info | warn | error | fatal
run: LOG_LEVEL=info npx renovate
env:
# Renovate is using this token to retrieve release notes
GITHUB_COM_TOKEN: ${{ secrets.renovate_github_com_token }}
RENOVATE_CONFIG_FILE: renovate.json
RENOVATE_ENDPOINT: ${{ github.api_url }}
RENOVATE_GIT_AUTHOR: Renovate Bot <mail+renovate@antville.org>
RENOVATE_IGNORE_PR_AUTHOR: 'true'
RENOVATE_LOG_FILE: renovate-log.ndjson
RENOVATE_LOG_FILE_LEVEL: debug
RENOVATE_PLATFORM: gitea
RENOVATE_REPOSITORIES: ${{ github.repository }}
RENOVATE_REPOSITORY_CACHE: 'enabled'
# github.token is not working here, it lacks some permissions required by Renovate
RENOVATE_TOKEN: ${{ secrets.renovate_token }}
- name: Save log file
# FIXME: v4 of this action causes an error on Forgejo (“You must configure a GitHub token”)
uses: actions/upload-artifact@v3
if: always()
with:
name: renovate-log.ndjson
path: renovate-log.ndjson

42
.github/workflows/stage.yml vendored Normal file
View file

@ -0,0 +1,42 @@
name: Deploy (Staging)
on: workflow_dispatch
jobs:
stage:
runs-on: antville
environment:
name: stage
url: ${{ vars.stage_url }}
steps:
- uses: actions/checkout@v4
- name: Build with Gradle
run: ./gradlew :build
- name: Publish to staging server
# The rsync command applies the same filters as the one in tools/extras/deploy.sh
run: |
rsync ./build/install/antville/ staging-server:./apps/antville/ \
--archive --compress --delete --verbose \
--filter '+ /claustra' \
--filter '+ /code' \
--filter '+ /compat' \
--filter '+ /db' \
--filter '+ /i18n' \
--filter '+ /lib' \
--filter '- /*'
rsync ./build/install/antville/static/ staging-server:./apps/antville/static/ \
--archive --compress --verbose \
--filter '+ /fonts' \
--filter '+ /formica.html' \
--filter '+ /img' \
--filter '+ /scripts' \
--filter '+ /styles' \
--filter '- /*'
- name: Restart Helma
run: ssh staging-server restart

1
.npmrc Normal file
View file

@ -0,0 +1 @@
save-exact = true

1
.nvmrc Normal file
View file

@ -0,0 +1 @@
lts

View file

@ -1,11 +1,37 @@
# Change Log
## May 23, 2020
## 2024 January 13
* Fix cross-site scripting vulnerability in search output
* Fix new choices being added to an existing poll at the wrong position
* Fix errors in the client-side code filtering the referrers
* Correctly load and initialize Alpine.js
## 2024 January 7
* Upgrade third-party dependencies
## 2023 December 30
* Fix initialization of MarkDown in UIKit editor
* Add support for images in webp format
## 2023 August 26
* Migrate from Yarn back to NPM
* Some major upgrades of third-party dependencies
* Rewrite `for…each` loops with `for…of` (needs enabled ES6 features in Rhino)
## 2023 March 5
* Fix SQL injection vulnerability
## 2020 May 23
* Render tables with stripes and hover colors extrapolated from layout settings
* Replaced Googles ReCaptcha with [hCaptcha](https://hcaptcha.com)
## May 17, 2020
## 2020 May 17
* Reverted Yarn scripts into Gradle tasks
* Implemented complete build system in Gradle
@ -13,13 +39,13 @@
* Replaced Node module for rendering Markdown (marked) with Java implementation ([CommonMark](https://github.com/atlassian/commonmark-java))
* Replaced Node module for sanitizing HTML (string-strip-html) with Java implementation ([jsoup](https://jsoup.org))
## May 1, 2020
## 2020 May 1
* Upgraded jQuery to version 3
* Refactored remaining cient-side jQuery code using [Alpine](https://github.com/alpinejs/alpine) (jQuery is still a dependency of UIkit, though)
* Moved code for jQuery [CollagePlus](https://github.com/antville/jquery-collagePlus) plugin into extra file
## April 13, 2020
## 2020 April 13
* Rewrote most client-side code without using jQuery
* Refactored Formica bookmarklet

View file

@ -2,7 +2,7 @@
## Helma Object Publisher
Antville needs Helma Object Publisher to be installed on the desired machine. If not already done so please [download Helma](https://github.com/antville/helma/releases) and follow the [installation instructions](https://github.com/antville/helma/#how-to-helma).
Antville needs Helma Object Publisher to be installed on the desired machine. If not already done so please [download Helma](https://code.host.antville.org/antville/helma/releases) and follow the [installation instructions](https://code.host.antville.org/antville/helma/#how-to-helma).
## SQL Database

View file

@ -1,6 +1,7 @@
# License
Copyright 2001-2020 by the Workers of Antville.
Copyright 2001-2025 by Antville Verein für Entwicklung, Betrieb und
Unterstützung freier Publishing-Software, Austria.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View file

@ -14,7 +14,7 @@ There still could be bugs hidden in Antvilles source code. If you find one pl
## System Requirements
To run Antville you need [Helma Object Publisher](https://github.com/antville/helma) and a relational database software. We tested Antville with [PostgreSQL](https://postgresql.org) and [MySQL](https://mysql.com) [MariaDB](https://mariadb.com) should work, too.
To run Antville you need [Helma Object Publisher](https://code.host.antville.org/antville/helma) and a relational database software. We tested Antville with [PostgreSQL](https://postgresql.org) and [MySQL](https://mysql.com) [MariaDB](https://mariadb.com) should work, too.
To enable Antville sending notification e-mails you need access to an SMTP server.
@ -33,8 +33,6 @@ For documentation and further information about Antville you can refer to:
Feel free to ask any question about Antville at our [support site](https://help.antville.org).
You should follow Antville on [Facebook](https://facebook.com/Antville) and [Twitter](https://twitter.com/antville_org)!
## Bug Reporting and Feature Requests
If you think you found a bug [please let us know](https://project.antville.org).
@ -45,7 +43,7 @@ Antville is open-source, and we want to encourage you to change its code accordi
## About Helma Object Publisher
[Helma Object Publisher](https://github.com/antville/helma) is an open source project providing a powerful, fast and scriptable web application server written in Java.
[Helma Object Publisher](https://code.host.antville.org/antville/helma) is an open source project providing a powerful, fast and scriptable web application server written in Java.
Define HopObjects and map them to a relational database table. Create, change and delete HopObjects at your whim using a comfortable object-container model. Manual fiddling around with database code is not necessary.

View file

@ -1,18 +1,13 @@
plugins {
id 'base'
id 'java'
id 'com.github.node-gradle.node' version '2.2.3'
id 'org.ajoberstar.grgit' version '4.0.2' apply false
id 'com.github.node-gradle.node' version '7.1.0'
}
import org.ajoberstar.grgit.Grgit
tasks.build.dependsOn 'assemble'
node {
version = '12.16.3'
yarnVersion = '1.22.4'
version = '20.9.0'
download = true
}
@ -21,21 +16,19 @@ allprojects {
repositories {
mavenCentral()
jcenter()
}
project.ext.distVersion = { ->
def json = new groovy.json.JsonSlurper()
def packageData = json.parse(file("${rootProject.projectDir}/package.json"))
return packageData.version.substring(0, packageData.version.size() - 2)
return packageData.version;
}
project.ext.antvilleBuildDir = "${rootProject.buildDir}/tmp/antville"
project.ext.antvilleInstallDir = "${rootProject.buildDir}/install/antville"
project.ext.antvilleDistFiles = copySpec {
from fileTree(antvilleBuildDir).matching {
}
from fileTree(antvilleBuildDir).matching {}
}
// Hide some purely Java-related tasks
@ -50,11 +43,11 @@ allprojects {
version = distVersion()
dependencies {
implementation 'com.atlassian.commonmark:commonmark:0.14.0'
implementation 'com.atlassian.commonmark:commonmark-ext-autolink:0.14.0'
implementation 'com.atlassian.commonmark:commonmark-ext-gfm-strikethrough:0.14.0'
implementation 'com.atlassian.commonmark:commonmark-ext-gfm-tables:0.14.0'
implementation 'org.jsoup:jsoup:1.13.1'
implementation 'org.commonmark:commonmark:0.24.0'
implementation 'org.commonmark:commonmark-ext-autolink:0.24.0'
implementation 'org.commonmark:commonmark-ext-gfm-strikethrough:0.24.0'
implementation 'org.commonmark:commonmark-ext-gfm-tables:0.24.0'
implementation 'org.jsoup:jsoup:1.18.3'
implementation 'rome:rome:1.0'
implementation('org.lesscss:lesscss:1.7.0.1.1') {
@ -64,58 +57,72 @@ dependencies {
}
}
task assemble(type: Copy, overwrite: true) {
assemble {
dependsOn 'installAntville'
dependsOn 'installJars'
dependsOn 'buildStaticFiles'
from fileTree(antvilleBuildDir).matching {
exclude 'node_modules'
exclude 'package.json'
exclude 'tests'
exclude 'tools/client'
exclude 'tools/antclick'
exclude 'yarn.lock'
} into antvilleInstallDir
doFirst {
copy {
from fileTree(antvilleBuildDir).matching {
exclude 'node_modules'
exclude 'package.json'
exclude 'tests'
exclude 'tools/client'
exclude 'tools/antclick'
exclude 'package-lock.json'
} into antvilleInstallDir
}
}
}
task installAntville {
tasks.register('installAntville') {
description 'Clone the Antville repository and remove all unnecessary files.'
group 'installation'
def tempDir = "$project.buildDir/tmp/repo"
outputs.dirs tempDir, antvilleBuildDir
doFirst {
Grgit.clone(dir: tempDir, uri: project.ext['antville.repo.url'])
}
outputs.dirs antvilleBuildDir
doLast {
def git = Grgit.open(dir: tempDir)
def hash = git.head().abbreviatedId
def date = new Date().format('d MMM yyyy')
def gitOutput = new ByteArrayOutputStream()
exec {
commandLine 'git', 'rev-parse', '--short', 'HEAD'
standardOutput = gitOutput
errorOutput = new ByteArrayOutputStream()
ignoreExitValue = true
}
def tag = gitOutput.toString().trim()
copy {
from "$tempDir/code/app.properties"
from "${project.projectDir}/code/app.properties"
into "$antvilleBuildDir/code"
filter { line -> line.replaceAll('(version =) 0.0.0', "\$1 $version.$hash")
.replaceAll('(buildDate =) 18 Oct 1971', "\$1 $date")
filter { line -> line.replaceAll('(version =) 0.0.0', "\$1 $version.$tag")
.replaceAll('(buildDate =) 18 Jun 2001', "\$1 $date")
}
}
copy {
from fileTree(tempDir).matching {
from fileTree(project.projectDir).matching {
include 'claustra/**'
include 'code/**'
exclude 'code/app.properties'
exclude '*gradle*'
exclude '.*'
include 'compat/**'
include 'db/**'
include 'i18n/**'
exclude 'i18n/*.po*'
include 'static/**'
include 'tools/**'
include 'CHANGES.md'
include 'INSTALL.md'
include 'README.md'
} into antvilleBuildDir
}
}
}
task installJars(type: Copy) {
tasks.register('installJars', Copy) {
description 'Download required JAR libraries.'
group 'installation'
dependsOn 'installAntville'
@ -128,22 +135,22 @@ task installJars(type: Copy) {
into outputDir
}
task installNodeModules(type: YarnTask) {
tasks.register('installNodeModules', NpmTask) {
description 'Download required Node modules.'
group 'build'
dependsOn 'installAntville'
inputs.files "$antvilleBuildDir/package.json"
outputs.dir "$antvilleBuildDir/node_modules"
inputs.files "${project.projectDir}/package-lock.json"
outputs.dir "${project.projectDir}/node_modules"
args = ['-s', 'install']
args = ['--silent', 'install']
execOverrides {
it.workingDir = antvilleBuildDir
}
}
task buildStaticFiles(type: Copy) {
tasks.register('buildStaticFiles', Copy) {
description 'Build fonts, client-side scripts and stylesheets.'
group 'build'
@ -156,7 +163,7 @@ task buildStaticFiles(type: Copy) {
dependsOn 'buildGalleryScript'
dependsOn 'buildLicenses'
def inputDir = "$antvilleBuildDir/node_modules/uikit/dist/fonts"
def inputDir = "${project.projectDir}/node_modules/uikit/dist/fonts"
def outputDir = "$antvilleBuildDir/static/fonts"
inputs.dir inputDir
@ -167,56 +174,69 @@ task buildStaticFiles(type: Copy) {
}
['main', 'editor', 'gallery'].each { name ->
task "build${name.capitalize()}Script" (type: YarnTask) {
tasks.register("build${name.capitalize()}Script", NpmTask) {
description "Build the ${name} client-side scripts."
group 'build'
dependsOn 'installNodeModules'
def inputFile = "tools/client/${name}.js"
def outputFile = "static/scripts/${name}.min.js"
def inputFile = "${project.projectDir}/tools/client/${name}.js"
def outputFile = "$antvilleBuildDir/static/scripts/${name}.min.js"
inputs.files "$antvilleBuildDir/$inputFile"
outputs.files "$antvilleBuildDir/$outputFile"
inputs.files inputFile
outputs.files outputFile
args = ['-s', 'browserify', inputFile, '-o', outputFile, '-g', 'uglifyify']
execOverrides {
it.workingDir = antvilleBuildDir
}
args = [
'--silent',
'exec', '--',
'browserify', inputFile,
'--outfile', outputFile,
'-g', 'uglifyify'
]
}
}
['main', 'editor'].each { name ->
task "build${name.capitalize()}Styles" (type: YarnTask) {
tasks.register("build${name.capitalize()}Styles", NpmTask) {
description "Build the ${name} stylesheet."
group 'build'
dependsOn 'installNodeModules'
def inputFile = "tools/client/${name}.less"
def outputFile = "static/styles/${name}.min.css"
def inputFile = "${project.projectDir}/tools/client/${name}.less"
def outputFile = "$antvilleBuildDir/static/styles/${name}.min.css"
inputs.files "$antvilleBuildDir/$inputFile"
outputs.files "$antvilleBuildDir/$outputFile"
inputs.files inputFile
outputs.files outputFile
args = ['-s', 'lessc', '--clean-css', inputFile, outputFile]
execOverrides {
it.workingDir = antvilleBuildDir
}
args = [
'--silent',
'exec', '--',
'lessc',
'--clean-css',
inputFile,
outputFile
]
}
}
task buildLicenses(type: YarnTask) {
description 'Build licenses file from client-side dependecies.'
tasks.register('buildLicenses', NpmTask) {
description 'Build licenses file from client-side dependencies.'
group 'build'
dependsOn 'installNodeModules'
def outputFile = "$antvilleBuildDir/static/licenses.txt"
inputs.file "$antvilleBuildDir/package.json"
inputs.file "${project.projectDir}/package-lock.json"
outputs.file outputFile
args = ['-s', 'licenses', 'generate-disclaimer']
args = [
'--silent',
'exec', '--',
'generate-license-file',
'--input', "${project.projectDir}/package.json",
'--output', outputFile,
'--overwrite',
'--eol', 'lf'
]
execOverrides {
it.workingDir = antvilleBuildDir
@ -224,7 +244,7 @@ task buildLicenses(type: YarnTask) {
}
}
task jsdoc(type: YarnTask) {
tasks.register('jsdoc', NpmTask) {
description 'Generates JavaScript API documentation for the main source code.'
group 'documentation'
dependsOn 'installNodeModules'
@ -235,14 +255,22 @@ task jsdoc(type: YarnTask) {
inputs.dir inputDir
outputs.dir outputDir
args = ['-s', 'jsdoc', '-r', '-d', outputDir, inputDir]
args = [
'--silent',
'exec', '--',
'jsdoc',
'--recurse',
'--destination',
outputDir,
inputDir
]
execOverrides {
it.workingDir = antvilleBuildDir
}
}
task assembleDist {
tasks.register('assembleDist') {
description 'Creates the Antville download packages.'
group 'distribution'
@ -251,7 +279,7 @@ task assembleDist {
dependsOn 'distTar'
}
task distZip(type: Zip) {
tasks.register('distZip', Zip) {
description 'Creates the Antville download package as Zip file.'
group 'distribution'
dependsOn 'assemble'
@ -263,25 +291,31 @@ task distZip(type: Zip) {
inputs.dir antvilleInstallDir
outputs.file "$outputDir/$outputFile"
from antvilleInstallDir
from (antvilleInstallDir) {
into "antville-${version}"
}
destinationDirectory = file(outputDir)
archiveFileName = outputFile
}
task distTar(type: Tar) {
description 'Creates the Antville download package as Bzip2 file.'
tasks.register('distTar', Tar) {
description 'Creates the Antville download package as compressed archive file.'
group 'distribution'
dependsOn 'assemble'
def version = project.distVersion()
def outputDir = "${project.buildDir}/distributions"
def outputFile = "antville-${version}.tbz"
def outputFile = "antville-${version}.tgz"
inputs.dir antvilleInstallDir
outputs.file "$outputDir/$outputFile"
from antvilleInstallDir
compression = Compression.BZIP2
from (antvilleInstallDir) {
into "antville-${version}"
}
compression = Compression.GZIP
destinationDirectory = file(outputDir)
archiveFileName = outputFile
}

52
cliff.toml Normal file
View file

@ -0,0 +1,52 @@
# git-cliff ~ default configuration file
# https://git-cliff.org/docs/configuration
#
# Lines starting with "#" are comments.
# Configuration options are organized into tables and keys.
# See documentation for more information on available options.
[changelog]
trim = true
header = "## Changes"
body = """
{% for group, commits in commits | filter(attribute="merge_commit") | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits %}
* [<tt>{{ commit.id | split(pat="") | slice(end=11) | join() }}</tt>]\
(https://code.host.antville.org/antville/antville/commit/{{ commit.id }}) \
{% if commit.breaking %}**Breaking:** {% endif %}\
{{ commit.message | split(pat="\\n") | first | upper_first | escape }}\
{% endfor %}
{% endfor %}
**Full Changelog:** [{{ previous.version }} {{ version }}]\
(https://code.host.antville.org/antville/antville/compare/\
{{ previous.version | urlencode }}..{{ version | urlencode }})\n\n
"""
footer = """
Generated by [git-cliff](https://git-cliff.org/).
"""
[git]
conventional_commits = false
filter_commits = false
filter_unconventional = false
protect_breaking_commits = false
sort_commits = "newest"
split_commits = false
topo_order = false
commit_parsers = [
{ message = "^Apply \\d+ suggestion", skip = true },
{ message = "^Merge .*(branch|dependabot|dependency|renovate)", skip = true },
{ message = "^Lock file maintenance", skip = true },
{ message = "yarn\\.lock", skip = true },
{ message = "^[Ff]ix", group = "<!-- 0 --> 🐛 Bug Fixes" },
{ field = "author.name", pattern = "[Rr]enovate|[Dd]ependabot", group = "<!-- 3 --> 📦 Dependency Updates" },
{ message = "^Merge pull request", group = "<!-- 1 --> 🔀 Merges" },
{ message = ".*", group = "<!-- 2 --> Uncategorized" },
]

View file

@ -272,7 +272,8 @@ Admin.purgeReferrers = function() {
Admin.commitRequests = function() {
var requests = app.data.requests;
app.data.requests = {};
for each (var item in requests) {
for (let key in requests) {
let item = requests[key];
switch (item.type) {
case Story:
var story = Story.getById(item.id);
@ -292,7 +293,7 @@ Admin.commitEntries = function() {
app.data.entries = [];
var history = [];
for each (var item in entries) {
for (let item of entries) {
var referrer = helma.Http.evalUrl(item.referrer);
if (!referrer) {
continue;
@ -385,7 +386,7 @@ Admin.updateDomains = function() {
}
}
var map = res.pop();
var file = new java.io.File(app.dir, 'domains.map');
var file = new java.io.File(app.appsProperties.static, 'domains.map');
var out = new java.io.BufferedWriter(new java.io.OutputStreamWriter(
new java.io.FileOutputStream(file), 'UTF-8'));
out.write(map);

View file

@ -55,10 +55,7 @@ Api.blogger._getContentParts = function(content) {
* @returns {Object} Properties: userid, nickname and url
*/
Api.blogger.getUserInfo = function(appKey, name, password) {
var user = User.getByName(name);
if (!user) {
throw Error('User ' + name + ' does not exist on this server');
}
var user = Api.getUser(name, password);
return {
userid: name,
nickname: name,
@ -115,7 +112,7 @@ Api.blogger.getRecentPosts = function(appKey, id, name, password, limit) {
var result = [];
var stories = res.handlers.membership.stories;
var max = Math.min(stories.size(), Number(limit) || Infinity, 20);
for each (var story in stories.list(0, max)) {
for (let story of stories.list(0, max)) {
result.push({
postid: story._id,
userid: story.creator.name,

View file

@ -70,7 +70,7 @@ Api.metaWeblog.getRecentPosts = function(id, name, password, limit) {
var result = [];
var stories = res.handlers.membership.stories;
var max = Math.min(stories.size(), Number(limit) || Infinity, 20);
for each (var story in stories.list(0, max)) {
for (let story of stories.list(0, max)) {
result.push(Api.metaWeblog._getStruct(story));
}
return result;
@ -182,7 +182,7 @@ Api.metaWeblog.getCategories = function(id, name, password) {
var result = [];
var tags = site.getTags('tags', Tags.ALL).list();
for each (var tag in tags) {
for (let tag of tags) {
result.push({
description: tag.name,
htmlUrl: tag.href(),

View file

@ -45,7 +45,7 @@ Api.mt.getRecentPostTitles = function(id, name, password, limit) {
var result = [];
var stories = res.handlers.membership.stories;
var max = Math.min(stories.size(), Number(limit) || Infinity, 20);
for each (var story in stories.list(0, max)) {
for (let story of stories.list(0, max)) {
result.push({
postid: story._id,
username: story.creator.name,
@ -76,7 +76,7 @@ Api.mt.getCategoryList = function(id, name, password) {
var result = [];
var tags = site.getTags('tags', Tags.ALL).list();
for each (var tag in tags) {
for (let tag of tags) {
result.push({
categoryId: tag.name, // FIXME: tag._id,
categoryName: tag.name
@ -104,7 +104,7 @@ Api.mt.getPostCategories = function(id, name, password) {
}
var result = [];
for each (var tag in story.getTags()) {
for (let tag of story.getTags()) {
result.push({
categoryId: tag,
categoryName: tag,

View file

@ -175,7 +175,7 @@ Archive.prototype.stories_macro = function() {
var site = res.handlers.site;
var offset = (page - 1) * pageSize;
var stories = site.stories.featured.list(offset, pageSize);
for each (var story in stories) {
for (let story of stories) {
renderStory(story);
};
return;

View file

@ -10,7 +10,7 @@
<div class='av-choice uk-form-row'>
<div class='uk-form-label'>#<% param.index %></div>
<div>
<input type='text' name='title' class='uk-width-1-1' value='<% choice.title %>' />
<input type='text' name='title' class='uk-width-1-1' value='<% choice.title %>' x-init="counter += 1"/>
</div>
</div>

View file

@ -23,7 +23,7 @@ markgettext('Comment');
markgettext('comment');
markgettext('a comment // accusative');
Comment.HTML_WHITELIST = Packages.org.jsoup.safety.Whitelist.relaxed();
Comment.HTML_WHITELIST = Packages.org.jsoup.safety.Safelist.relaxed();
/**
* @see defineConstants

View file

@ -26,7 +26,7 @@
</ul>
</header>
<div class='uk-comment-body'>
<% comment.text | comment.format %>
<% comment.text | comment.format markdown %>
</div>
</article>

View file

@ -65,8 +65,7 @@ File.remove = function() {
* @param {String} name
*/
File.getName = function(name) {
// TODO: Maybe return a hash if name is undefined?
return name ? String(name).replace(/[^\w\d\s,._-]/g, String.EMPTY) : null;
return String(name).md5() + '-' + String.random(16) + '-' + Date.now();
}
File.getGenericType = function (contentType) {
@ -271,27 +270,31 @@ File.prototype.update = function(data) {
if (mime.contentLength > 0) {
var mimeName = mime.normalizeFilename(mime.name);
this.contentLength = mime.contentLength;
this.contentType = mime.contentType;
this.setOrigin(origin);
if (!this.name) {
var name = File.getName(data.name) || mimeName.split('.')[0];
if (this.isTransient()) {
var name = data.name || mimeName.replace(/\.[^.]+$/, '');
this.name = this.site.files.getAccessName(name);
// Make the file persistent before proceeding with writing it to disk (also see Helma bug #607)
this.persist();
}
// Make the file persistent before proceeding with writing
// it to disk (also see Helma bug #607)
this.isTransient() && this.persist();
var extension = mimeName.substr(mimeName.lastIndexOf('.')) || String.EMPTY;
var fileName = this.name + extension;
var fileName = File.getName(this.name) + extension;
if (fileName !== this.fileName) {
// Remove existing file if the file name has changed
this.getFile().remove();
}
this.fileName = fileName;
var file = this.getFile();
mime.writeToFile(file.getParent(), file.getName());
}
@ -330,7 +333,7 @@ File.prototype.description_macro = function(param) {
} else if (param['default']) {
res.write(param['default']);
} else if (this.origin) {
var text = this.origin.replace(new RegExp('^.+:///?(?:www\.)?([^/]+).*$'), '$1');
var text = this.origin.replace(new RegExp('^.+:///?(?:www\\.)?([^/]+).*$'), '$1');
var link = html.linkAsString({href: this.origin}, text);
res.write(gettext('Source: {0}', link));
}

View file

@ -19,7 +19,7 @@
* @fileOverview Defines the Exporter namespace.
*/
app.addRepository('lib/gson-2.8.6.jar');
// This code requires the Gson Java library bundled with Helma
global.Exporter = (function() {
const gson = new JavaImporter(

View file

@ -22,7 +22,7 @@
String.ELLIPSIS = '…';
app.addRepository(app.dir + '/../lib/jdom-1.0.jar');
app.addRepository(app.dir + '/../lib/jsoup-1.13.1.jar');
app.addRepository(app.dir + '/../lib/jsoup-1.18.3.jar');
app.addRepository(app.dir + '/../lib/lesscss-1.7.0.1.1.jar');
app.addRepository(app.dir + '/../lib/rome-1.0.jar');
@ -47,7 +47,7 @@ app.addRepository('modules/jala/code/Utilities.js');
// Adding i18n message files as repositories
(function() {
var dir = new helma.File(app.dir, '../i18n');
for each (let fname in dir.list()) {
for (let fname of dir.list()) {
fname.endsWith('.js') && app.addRepository(app.dir + '/../i18n/' + fname);
}
})();
@ -682,7 +682,8 @@ function list_macro(param, id, limit) {
return;
}
var skin, collection;
var skin;
var collection = [];
var max = Math.min(limit || 25, 100);
if (id === 'sites') {
@ -768,7 +769,7 @@ function list_macro(param, id, limit) {
break;
}
}
for each (var item in collection) {
for (let item of collection) {
item && item.renderSkin(param.skin || skin);
}
return;
@ -998,7 +999,7 @@ function json_filter(value, param) {
function script_filter(value, param) {
// Remove <script> element and comments (order in brackets is crucial)
return value.replace(/\s*(?:<!--|-->|<\/?script[^>]*>)\s*/g, String.EMPTY);
return value.replace(/\s*(?:<!--|--!?>|<\/?script[^>]*>)\s*/gi, String.EMPTY);
}
/**
@ -1077,7 +1078,7 @@ function validateUrl(str) {
function quote(str, pattern) {
str = String(str);
if (!pattern || RegExp(pattern).test(str) || /['"]/.test(str)) {
str = "'" + str.replace(/("|')/g, '\\$1') + "'";
str = "'" + str.replace(/('|"|\\)/g, '\\$1') + "'";
}
return str;
}
@ -1307,7 +1308,7 @@ function getTimeZones(language) {
locale = getLocale(language),
ids = java.util.TimeZone.getAvailableIDs();
for each (let id in ids) {
for (let id of ids) {
// Exclude confusing time zones
if (id.length < 4 || !id.contains('/') ||
id.startsWith('Etc') || id.startsWith('System')) {

View file

@ -41,7 +41,7 @@ var Sql = function(options) {
}
this.next = function() {
for each (var key in columns) {
for (let key of columns) {
this.values[key] = result.getColumnItem(key);
}
return;
@ -92,6 +92,32 @@ var Sql = function(options) {
return sql;
}
const prepare = function(args) {
const sql = args[0];
if (args.length > 1) {
const values = Array.prototype.splice.call(args, 1);
const connection = db.getMetaData().getConnection();
const statement = connection.prepareStatement(sql);
for (let index = 1, limit = values.length; index <= limit; index += 1) {
let value = values[index - 1];
switch (typeof value) {
case 'number':
statement.setInt(index, value);
break;
case 'string':
statement.setString(index, value);
default:
statement.setString(index, String(value));
}
}
}
return statement;
};
/**
* Executes an SQL command.
* @param {String} sql The SQL command.
@ -118,6 +144,9 @@ var Sql = function(options) {
* @returns {String}
*/
this.retrieve = function() {
if (options.prepared === true) {
return query = prepare(arguments);
}
return log.info(query = resolve(arguments));
}
@ -126,7 +155,14 @@ var Sql = function(options) {
* @param {Function} callback The callback function executed for each record.
*/
this.traverse = function(callback) {
var rows = db.executeRetrieval(query);
let rows;
if (query instanceof java.sql.PreparedStatement) {
rows = db.executePreparedRetrieval(query);
} else {
rows = db.executeRetrieval(query);
}
if (rows && rows.next()) {
do {
var sql = new SqlData(rows);
@ -176,9 +212,9 @@ Sql.PURGEREFERRERS = "delete from log where action = 'main' and " +
* SQL query for searching stories.
* @constant
*/
Sql.STORY_SEARCH = "select content.id from content, site, metadata, account as creator, account as modifier where site.id = $0 and content.prototype = 'Story' and site.id = content.site_id and content.status in ('public', 'shared', 'open') and content.creator_id = creator.id and content.modifier_id = modifier.id and creator.status <> 'deleted' and modifier.status <> 'deleted' and content.prototype = metadata.parent_type and content.id = metadata.parent_id and metadata.name in ('title', 'text') and lower(metadata.value) like lower('%$1%') group by content.id, content.created order by content.created desc limit $2";
Sql.STORY_SEARCH = "select content.id from content, site, metadata, account as creator, account as modifier where site.id = ? and content.prototype = 'Story' and site.id = content.site_id and content.status in ('public', 'shared', 'open') and content.creator_id = creator.id and content.modifier_id = modifier.id and creator.status <> 'deleted' and modifier.status <> 'deleted' and content.prototype = metadata.parent_type and content.id = metadata.parent_id and metadata.name in ('title', 'text') and lower(metadata.value) like lower(?) group by content.id, content.created order by content.created desc limit ?";
Sql.COMMENT_SEARCH = "select comment.id from content as comment, content as story, site, metadata, account as creator, account as modifier where site.id = $0 and comment.prototype = 'Comment' and site.id = comment.site_id and comment.story_id = story.id and story.status in ('public', 'shared', 'open') and story.comment_mode in ('open') and comment.creator_id = creator.id and comment.modifier_id = modifier.id and creator.status <> 'deleted' and modifier.status <> 'deleted' and comment.prototype = metadata.parent_type and comment.id = metadata.parent_id and metadata.name in ('title', 'text') and lower(metadata.value) like lower('%$1%') group by comment.id, comment.created order by comment.created desc limit $2";
Sql.COMMENT_SEARCH = "select comment.id from content as comment, content as story, site, metadata, account as creator, account as modifier where site.id = ? and comment.prototype = 'Comment' and site.id = comment.site_id and comment.story_id = story.id and story.status in ('public', 'shared', 'open') and story.comment_mode in ('open') and comment.creator_id = creator.id and comment.modifier_id = modifier.id and creator.status <> 'deleted' and modifier.status <> 'deleted' and comment.prototype = metadata.parent_type and comment.id = metadata.parent_id and metadata.name in ('title', 'text') and lower(metadata.value) like lower(?) group by comment.id, comment.created order by comment.created desc limit ?";
/**
* SQL query for searching accounts which are not already members of the desired site.

View file

@ -70,7 +70,7 @@ app.addRepository('modules/helma/Aspects.js');
}
var prototypes = app.__app__.getPrototypes().toArray();
for each (var prototype in prototypes) {
for (let prototype of prototypes) {
if (prototype.name in global) {
global[prototype.name].prototype.onCodeUpdate = function() {
this.__renderSkin__ = this.renderSkin;

View file

@ -41,7 +41,7 @@ Root.prototype.extractMessages = function(script, scanDirs, potFile) {
return res.pop();
}
var args = ['-o', potFile, '-e', 'utf-8'];
for each (var dir in scanDirs.split(' ')) {
for (let dir of scanDirs.split(' ')) {
args.push(app.dir + '/../' + dir);
}
var file = new helma.File(script);

View file

@ -1,8 +1,8 @@
app.addRepository(app.dir + '/../lib/autolink-0.10.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-0.14.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-ext-autolink-0.14.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-ext-gfm-strikethrough-0.14.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-ext-gfm-tables-0.14.0.jar');
app.addRepository(app.dir + '/../lib/autolink-0.11.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-0.24.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-ext-autolink-0.24.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-ext-gfm-strikethrough-0.24.0.jar');
app.addRepository(app.dir + '/../lib/commonmark-ext-gfm-tables-0.24.0.jar');
var renderMarkdown = (function() {
const commonMark = new JavaImporter(
@ -41,8 +41,15 @@ var renderMarkdown = (function() {
.extensions(extensions)
.build();
// Save HTML entities like `&#150;` from being erroneously encoded
// See <https://github.com/commonmark/commonmark-java/issues/307>
const entityRegex = /&(#\d+;)/g;
const entityMarker = "<ampersand/>";
const entityMarkerRegex = new RegExp(entityMarker + entityRegex.source.substring(1), 'g');
return function(str) {
str = str.replace(entityRegex, entityMarker + '$1');
const document = parser.parse(str);
return renderer.render(document);
return renderer.render(document).replace(entityMarkerRegex, '&$1');
};
})();

View file

@ -186,8 +186,9 @@ HopObject.prototype.delete_action = function() {
var parent = this._parent;
var type = this._prototype;
var url = this.constructor.remove.call(this, req.postParams) || parent.href();
res.message = gettext('{0} was successfully deleted.', gettext(type));
res.redirect(User.getLocation() || url);
res.redirect(url);
} catch(ex) {
redirectUrl = session.data.referer;
res.message = ex;
@ -195,8 +196,13 @@ HopObject.prototype.delete_action = function() {
}
}
if (req.data.http_get_remainder === 'safemode') { res.skinpath = [app.dir]; }
if (!res.data.action) { res.data.action = this.href(req.action); }
if (req.data.http_get_remainder === 'safemode') {
res.skinpath = [app.dir];
}
if (!res.data.action) {
res.data.action = this.href(req.action);
}
res.data.title = gettext('Confirm Deletion');
session.data.location = redirectUrl;
@ -305,7 +311,7 @@ HopObject.prototype.setTags = function(tags) {
for (var i in tags) {
// Trim and remove troublesome characters (like ../.. etc.)
// We call getAccessName with a virgin HopObject to allow most names
tag = tags[i] = this.getAccessName.call(new HopObject, File.getName(tags[i]));
tag = tags[i] = this.getAccessName.call(new HopObject, tags[i]);
if (tag && diff[tag] == null) {
diff[tag] = 1;
}

View file

@ -56,7 +56,7 @@ Image.add = function(data, parent, user) {
user || (user = session.user);
var image = new Image;
if (data) {
for each (var key in Image.KEYS) {
for (let key of Image.KEYS) {
image[key] = data[key];
}
}
@ -94,8 +94,6 @@ Image.getFileExtension = function(type) {
type = type.substr(0, index);
}
switch (type.toLowerCase()) {
//case 'image/x-icon':
//return '.ico';
case 'image/gif':
return '.gif';
case 'image/jpg':
@ -105,6 +103,8 @@ Image.getFileExtension = function(type) {
case 'image/png':
case 'image/x-png':
return '.png';
case 'image/webp':
return '.webp';
}
return null;
}
@ -301,8 +301,8 @@ Image.prototype.update = function(data) {
this.contentType = mime.contentType;
File.prototype.setOrigin.call(this, origin);
if (!this.name) {
var name = File.getName(data.name || mimeName.split('.')[0]);
if (this.isTransient()) {
var name = data.name || mimeName.replace(/\.[^.]+$/, '');
this.name = this.parent.images.getAccessName(name);
}
@ -313,21 +313,24 @@ Image.prototype.update = function(data) {
this.width = image.width;
this.height = image.height;
// Create a thumbnail version if the image size exceeds
// Create a thumbnail version if the image size exceeds constraints
if (this.width > Image.THUMBNAILWIDTH) {
thumbnail = this.getHelmaImage(mime, [Image.THUMBNAILWIDTH]);
this.thumbnailWidth = thumbnail.width;
this.thumbnailHeight = thumbnail.height;
} else if (this.isPersistent()) {
this.getThumbnailFile().remove();
// NOTE: delete operator won't work here due to getter/setter methods
this.deleteMetadata('thumbnailName', 'thumbnailWidth', 'thumbnailHeight');
}
// Make the image persistent before proceeding with writing files and
// setting tags (also see Helma bug #607)
if (this.isTransient()) this.persist();
var fileName = this.name + extension;
// Make the image persistent before proceeding with writing files and setting tags (also see Helma bug #607)
if (this.isTransient()) {
this.persist();
}
var fileName = File.getName(this.name) + extension;
// Remove existing image files if the file name has changed
if (fileName !== this.fileName) {
@ -335,7 +338,10 @@ Image.prototype.update = function(data) {
}
this.fileName = fileName;
if (thumbnail) this.thumbnailName = this.name + '_small' + extension;
if (thumbnail) {
this.thumbnailName = fileName.replace(/(\.[^.]+$)/, '-small$1');
}
this.writeFiles(image.data || mime, thumbnail && thumbnail.data);
this.contentLength = this.getFile().getLength();
@ -401,6 +407,7 @@ Image.prototype.thumbnail_macro = function(param) {
param.src = encodeURI(this.getUrl(this.getThumbnailFile().getName()));
if (!param.title) { param.title = encode(this.description || ''); }
param.alt = encode(param.alt || param.title);
param.loading = "lazy";
var width = param.width || this.thumbnailWidth;
var height = param.height || this.thumbnailHeight;
var style = [];
@ -423,6 +430,7 @@ Image.prototype.render_macro = function(param) {
param.src = encodeURI(this.getUrl());
if (!param.title) { param.title = encode(this.description || ''); }
param.alt = encode(param.alt || param.title);
param.loading = "lazy";
var style = [];
param.width && style.push('width:', param.width + 'px;');
param.height && style.push('height:', param.height + 'px;');

View file

@ -36,7 +36,7 @@
<script>
// Setup drag&drop for image uploads
(function() {
document.addEventListener("alpine:init", () => {
const dropElement = document.querySelector('.av-upload-drop');
const parent = location.href.lastIndexOf('/layout/images/') > -1 ? 'layout' : 'site';
const uploadUrl = '<% site.images.href upload %>?parent=' + parent;
@ -84,5 +84,5 @@
error: restoreDrop,
abort: restoreDrop
});
})();
});
</script>

View file

@ -417,7 +417,7 @@ Layout.prototype.getArchive = function(skinPath) {
/* Most likely the thumbnail file is identical to the image */
}
var image = new HopObject;
for each (var key in Image.KEYS) {
for (let key of Image.KEYS) {
image[key] = this[key];
data.images.add(image);
}
@ -507,7 +507,7 @@ Layout.prototype.values_macro = function() {
this.renderSkin('$Layout#value', {'class': 'uk-hidden'});
values.sort(new String.Sorter('key'));
for each (var pair in values) {
for (let pair of values) {
var type = getType(pair.key);
this.renderSkin('$Layout#value', {
title: pair.key.capitalize(),

View file

@ -84,7 +84,7 @@
<% poll.link . ' ' class='uk-icon-button uk-icon-link uk-text-middle' %>
</h1>
<div class='uk-article-meta'><% poll.skin $HopObject#meta %></div>
<form class='uk-margin-top uk-form uk-form-stacked' method="post" action="<% response.action %>" x-data='{ counter: 2 }'>
<form class='uk-margin-top uk-form uk-form-stacked' method="post" action="<% response.action %>" x-data='{ counter: 1 }'>
<div class='uk-form-row'>
<div class='uk-form-label'><% gettext Question %></div>
<div class='uk-form-controls'>
@ -93,9 +93,11 @@
</div>
<fieldset class='uk-margin-top'>
<legend><% gettext Choices %></legend>
<% poll.input choices %>
<div class="uk-margin-bottom">
<% poll.input choices %>
</div>
<div class='uk-text-small uk-form-row' id='av-add-choice' hidden :hidden='false'>
<a href='javascript:' @click='const choice = document.querySelectorAll(".av-choice")[counter - 1]; const clone = choice.cloneNode(true); counter += 1; clone.querySelector(".uk-form-label").innerText = "#" + counter; const input = clone.querySelector("input"); input.value = ""; choice.insertAdjacentElement("afterEnd", clone); input.focus();'>
<a href='javascript:' @click='const choice = document.querySelector(".av-choice:last-child"); const clone = choice.cloneNode(true); clone.querySelector(".uk-form-label").innerText = `#${counter}`; const input = clone.querySelector("input"); input.value = ""; choice.insertAdjacentElement("afterEnd", clone); input.focus();'>
<i class='uk-icon-plus'></i>
<% gettext "Add Choice" %>
</a>

View file

@ -187,7 +187,7 @@ Poll.prototype.status_action = function () {
*/
Poll.prototype.update = function(data) {
var choices = [];
for each (var title in data.title_array) {
for (let title of data.title_array) {
if (title = title.trim()) {
choices.push(title);
}

View file

@ -68,7 +68,7 @@
<h1><% response.title %></h1>
<div class='uk-panel uk-panel-header'>
<h3 class='uk-panel-title'><% gettext Status %></h3>
<p><% site.skin Root#status %></p>
<% site.skin Root#status %>
</div>
<div class='uk-panel uk-panel-header'>
<h3 class='uk-panel-title'><% gettext Details %></h3>
@ -85,17 +85,17 @@
<dt><% gettext Requests %></dt>
<dd>
<% gettext '{0} total' <% param.requestCount %> %>,
<% gettext '{0} in the last 5 min.' <% param.requestsPerUnit default=n.a. %> %>
<% gettext '{0} in the last 5 min.' <% param.requestsPerUnit default=0 %> %>
</dd>
<dt><% gettext 'Errors' %></dt>
<dd>
<% gettext '{0} total' <% param.errorCount %> %>,
<% gettext '{0} in the last 5 min.' <% param.errorsPerUnit default=n.a. %> %>
<% gettext '{0} in the last 5 min.' <% param.errorsPerUnit default=0 %> %>
</dd>
<dt><% gettext 'Error Ratio' %></dt>
<dd>
<% gettext '{0}% total' <% param.errorRatio %> %>,
<% gettext '{0}% in the last 5 min.' <% param.errorRatioPerUnit %> %>
<% gettext '{0}% in the last 5 min.' <% param.errorRatioPerUnit default=0 %> %>
</dd>
<dt><% gettext 'Xml-Rpc Count' %></dt>
<dd><% ngettext '{0} request' '{0} requests' <% param.xmlrpcCount %> %></dd>
@ -114,13 +114,38 @@
</dd>
<dd></dd>
<dd><% gettext '{0} log entries' <% param.entries %> %></dd>
<dt><% gettext Version %></dt>
<dd><% version %></dd>
<dt><% gettext Build %></dt>
<dd>
<% link <% version hash prefix='https://github.com/antville/antville/commit/' %> <% version hash %> %> (<% version date %>)
</dd>
<dt><% gettext 'Helma Version' %></dt>
<dd><% param.helma %></dd>
</dl>
</div>
<div class='uk-panel uk-panel-header'>
<h3 class='uk-panel-title'><% gettext Versions %></h3>
<dl class='uk-description-list-horizontal'>
<dt><% gettext Antville %></dt>
<dd title='The phinal version'>φ (<% version %>)</dd>
<dt><% gettext Commit %></dt>
<dd>
<a href='https://github.com/antville/antville/commit/<% version hash %>'>
<% version hash %>
</a>
(<% version date %>)
</dd>
<dt><% gettext "Application Server" %></dt>
<dd>
<a href='https://github.com/antville/helma/commit/<% param.helmaCommitHash %>'>
Helma <% param.helmaVersion %> <% param.helmaCommitHash %>
</a>
(<% param.helmaBuildDate %>)
</dd>
<dt><% gettext "Scripting Engine" %></dt>
<dd><a href="https://github.com/mozilla/rhino"><% param.rhino %></a></dd>
<dt><% gettext "Webserver" %></dt>
<dd><a href="https://github.com/jetty/jetty.project">Jetty <% param.jetty %></a></dd>
<dt><% gettext "Servlet Interface" %></dt>
<dd>
<a href="https://docs.oracle.com/javaee/7/api/index.html?javax/servlet/package-summary.html">
Javax <% param.servlet %>
</a>
</dd>
<dt><% gettext "Virtual Machine" %></dt>
<dd><a href="https://openjdk.org">Java <% param.java %></a></dd>
</dl>
</div>

View file

@ -24,25 +24,25 @@ Root.VERSION = (function(versionString, buildDate) {
// A valid version string is e.g. '1.2.3alpha.c0ffee'.
// Repositories could add something like '-compatible' to it,
// FIXME: This should be refactored for modular extension.
var re = /^(\d+)\.(\d+)(?:\.(\d+))?(.+)?\.([a-f0-9]+)(?:-(.*))?$/;
var re = /^(\d+)\.(\d+)(?:\.(\d+))?\.([a-f0-9]+)(?:-(.*))?$/;
var parts = re.exec(versionString);
if (parts) {
var result = {
date: buildDate,
hash: parts[4],
major: parts[1],
parts: parts,
toString: function() {return parts[0]},
major: parseInt(parts[1]),
hash: parts[5],
date: new Date(buildDate).toLocaleDateString()
toString: function() { return parts[1] }
};
result.minor = result.major + parseInt(parts[2] || 0) / 10;
result.minor = result.major + '.' + (parts[2] || 0);
result.bugfix = result.minor + '.' + (parts[3] || 0);
result.development = parts[4] || '';
result.development = parts[5] || '';
result['default'] = result[parts[3] ? 'bugfix' : 'minor'] + result.development +
(parts[6] ? '-' + parts[6] : String.EMPTY);
return result;
}
return versionString;
})(getProperty('version', '0.0.0'), getProperty('buildDate', '18 Oct 1971'));
})(getProperty('version', '0.0.0'), getProperty('buildDate', '18 Jun 2001'));
this.handleMetadata('creationDelay');
this.handleMetadata('creationScope');
@ -212,7 +212,7 @@ Root.prototype.updates_xml_action = function() {
var entries = new java.util.ArrayList();
var entry, description;
var sites = root.updates.list(0, 25);
for each (var site in sites) {
for (let site of sites) {
var story = site.stories.union.get(0);
if (!story) {
continue;
@ -254,32 +254,54 @@ Root.prototype.sitemap_xml_action = function() {
}
Root.prototype.health_action = function() {
var jvm = java.lang.Runtime.getRuntime();
var totalMemory = jvm.totalMemory() / 1024 / 1024;
var freeMemory = jvm.freeMemory() / 1024 / 1024;
const jvm = java.lang.Runtime.getRuntime();
const totalMemory = jvm.totalMemory() / 1024 / 1024;
const freeMemory = jvm.freeMemory() / 1024 / 1024;
let servletApi;
try {
const getJavaClass = Packages.java.lang.Class.forName;
servletApi = getJavaClass('jakarta.servlet.Servlet');
} catch {
// Fall back to older Servlet API
servletApi = getJavaClass('javax.servlet.Servlet');
}
var param = {
uptime: formatNumber((new Date - app.upSince.getTime()) /
Date.ONEDAY, '0.##'),
uptime: formatNumber((new Date - app.upSince.getTime()) / Date.ONEDAY, '0.##'),
freeMemory: formatNumber(freeMemory),
totalMemory: formatNumber(totalMemory),
usedMemory: formatNumber(totalMemory - freeMemory),
sessions: formatNumber(app.countSessions()),
cacheSize: formatNumber(getProperty('cacheSize')),
helma: Packages.helma.main.Server.getServer().version
helmaVersion: Packages.helma.main.Server.server.version,
helmaBuildDate: Packages.helma.main.Server.server.buildDate,
helmaCommitHash: Packages.helma.main.Server.server.commitHash,
jetty: Packages.org.eclipse.jetty.util.Jetty.VERSION,
rhino: Packages.org.mozilla.javascript.ImplementationVersion.get(),
servlet: servletApi.package.specificationVersion,
java: java.lang.System.getProperty('java.version')
};
for each (key in ['activeThreads', 'freeThreads', 'requestCount',
'errorCount', 'xmlrpcCount', 'cacheusage']) {
for (
let key of [
'activeThreads',
'freeThreads',
'requestCount',
'errorCount',
'xmlrpcCount',
'cacheusage'
]
) {
param[key] = formatNumber(app[key]);
}
param.errorRatio = formatNumber(100 * app.errorCount / app.requestCount || 0);
param.errorRatioPerUnit = formatNumber(Admin.health.errorsPerUnit / Admin.health.requestsPerUnit || 0);
if (Admin.health) {
param.requestsPerUnit = formatNumber(Admin.health.requestsPerUnit);
param.errorsPerUnit = formatNumber(Admin.health.errorsPerUnit);
param.errorRatioPerUnit = formatNumber(Admin.health.errorsPerUnit / Admin.health.requestsPerUnit || 0);
}
param.callbacks = app.data.callbacks.length;

View file

@ -1,5 +1,7 @@
<% #status %>
<% gettext 'System is up and running.' %>
<p>
<% gettext 'System is up and running.' %>
</p>
<% #urlPreview %>
<% // This snippet contains additional markup to be rendered client-side by Alpine %>

View file

@ -214,7 +214,7 @@
</form>
<script>
(function() {
document.addEventListener("alpine:init", () => {
// Group related <option> elements by inserting additional <optgroup> elements.
const dom = window;
const groups = [];
@ -246,7 +246,7 @@
// Correct the selected index
timeZone.selectedIndex = Array.from(timeZone.options).indexOf(timeZone.querySelector('option[selected]'));
});
})();
});
</script>
<% #meta %>
@ -336,7 +336,7 @@
<% if <% property search.provider %> is null then '' else <% site.skin $Site#moreResults %> %>
<% #moreResults %>
<a href='<% property search.provider %>?q=<% request.q %>+site:<% site.href %>' class='uk-button uk-align-right'>
<a href='<% property search.provider %>?q=<% request.q encoding="url" %>+site:<% site.href %>' class='uk-button uk-align-right'>
<% gettext 'Search with {0}' <% property search.provider | replace 'https?://([^/]+).*' '$1' %> %>
<i class='uk-icon uk-icon-arrow-circle-right'></i>
</a>
@ -373,8 +373,8 @@
<div><% if <% site.modified %> then <% gettext 'Last modified {0}' <% site.modified text %> %> suffix=. %></div>
</div>
<div class='uk-text-right'>
<% image /smallchaos.gif | link https://antville.org %> &
<% image /helma.png | link http://helma.org %>
<% image /smallchaos.gif | link https://project.antville.org %> &
<% image /helma.png | link https://github.com/antville/helma %>
</div>
</footer>
@ -402,7 +402,7 @@ void (function(url) {
// FIXME: compatibility
@base-font: <% value 'base font' default='Helvetica Neue, Helvetica, Arial, sans-serif' %>;
@base-font: <% value 'base font' default='Helvetica Neue, Liberation Sans, Helvetica, Arial, sans-serif' %>;
@base-font-size: <% value 'base font size' default="14px e('/') 20px" %>;
@base-font-color: <% value 'base font color' default=#444 %>;
@ -435,12 +435,12 @@ void (function(url) {
html, html.uk-notouch, body {
background-color: @background;
color: @text-color;
font-family: @text-font;
font: @text-font;
}
body.av-16, body.av-page {
max-width: 900px;
margin: auto 5%;
margin: 1em 5%;
}
h1, h2, h3, h4, h5, h6 {
@ -560,7 +560,7 @@ hr {
}
&.uk-button-link {
border: initial;
border-color: transparent;
&:link, &:visited {
color: @link-color;
@ -828,9 +828,9 @@ h4 + .uk-comment-meta li:first-child {
.av-header-bg-chaos {
width: 274px;
height: 53px;
margin-left: -54px;
margin-left: -53px;
background: url('<% image /spritesheet.png url %>');
background-position: -9px -139px;
background-position: -10px -139px;
background-repeat: no-repeat;
}
@ -845,11 +845,12 @@ h4 + .uk-comment-meta li:first-child {
.av-title {
position: absolute;
top: 13px;
top: 8px;
width: 100%;
height: 100%;
overflow-x: hidden;
white-space: nowrap;
line-height: 31px;
font-family: Verdana, Helvetica, Arial, sans-serif;
font-size: 25px;
font-weight: bold;
@ -876,7 +877,7 @@ h4 + .uk-comment-meta li:first-child {
@media (max-width: 767px) {
.av-menu {
@top: 14px;
@top: 23px;
@right: 5%;
@size: 30px;
@ -1012,6 +1013,9 @@ h4 + .uk-comment-meta li:first-child {
}
}
// AlpineJS https://alpinejs.dev/directives/cloak
[x-cloak] { display: none !important; }
// Overwriting some CSS classes for Googles custom search
.gs-webResult.gs-result a.gs-title:link,
@ -1131,7 +1135,7 @@ a.gs-title:hover {
</table>
<script>
(function() {
document.addEventListener("alpine:init", () => {
const query = new Antville.Query();
const spamFilter = new Antville.Filter(JSON.parse('<% site.spamfilter %>'));
const searchFilter = new Antville.Filter(query.filter);
@ -1224,12 +1228,12 @@ a.gs-title:hover {
if (index2 <= index) return;
if (element2.innerHTML === html) {
count += parseInt(document.querySelector('.av-referrer-count')[index2].innerText, 10);
count += parseInt(document.querySelectorAll('.av-referrer-count')[index2].innerText, 10);
element2.closest('.av-referrer-row').classList.add('av-delete');
}
});
if (count) countElement.innerHTML = parseInt(countElement.html(), 10) + count;
if (count) countElement.innerHTML = parseInt(countElement.innerHTML, 10) + count;
});
document.querySelectorAll('.av-referrer-row.av-delete').forEach(function(element) {
@ -1245,7 +1249,7 @@ a.gs-title:hover {
});
sortedRows.forEach(function(row) { table.appendChild(row); });
})();
});
</script>
<% #referrer %>

View file

@ -429,6 +429,14 @@ Site.prototype.update = function(data) {
data.maxImageWidth = Math.abs(data.maxImageWidth) || Infinity;
data.maxImageHeight = Math.abs(data.maxImageHeight) || Infinity;
let trollFilter = data.trollFilter || [];
if (typeof trollFilter === 'string') {
trollFilter = trollFilter.split(/\r\n|\r|\n/).filter(function (item) {
return item.length > 0;
});
}
this.map({
archiveMode: data.archiveMode || Site.CLOSED,
callbackMode: data.callbackMode || Site.DISABLED,
@ -444,9 +452,7 @@ Site.prototype.update = function(data) {
tagline: data.tagline || String.EMPTY,
title: stripTags(data.title) || this.name,
timeZone: data.timeZone || root.getTimeZone().getID(),
trollFilter: data.trollFilter ? data.trollFilter.split(/\r\n|\r|\n/).filter(function (item) {
return item.length > 0;
}) : []
trollFilter: trollFilter
});
if (User.require(User.PRIVILEGED)) {
@ -607,7 +613,7 @@ Site.prototype.renderXml = function(collection) {
var description;
var list = collection.constructor === Array ? collection : collection.list(0, 25);
for each (var item in list) {
for (let item of list) {
entry = new rome.SyndEntryImpl();
entry.setTitle(item.title || formatDate(item.created, 'date'));
entry.setLink(item.href());
@ -953,8 +959,8 @@ Site.prototype.search = function (type, term, limit) {
search.message = gettext('Please enter a query in the search form.');
} else if (term) {
var counter = 0;
var sql = new Sql({quote: false});
sql.retrieve(query, this._id, term, limit + 1);
var sql = new Sql({prepared: true});
sql.retrieve(query, parseInt(this._id, 10), '%' + term + '%', limit + 1);
sql.traverse(function () {
if (counter < limit) {
search.result.push(Story.getById(this.id));

View file

@ -64,7 +64,7 @@ prefix="Last update: " default="None so far" %>)</span></li>
<link rel='apple-touch-icon' href='<% image /favicon.png url %>'>
<% response.links %>
<link rel='stylesheet' href='<% site.href main.css %>'>
<script src='<% site.href main.js %>'></script>
<script defer src='<% site.href main.js %>'></script>
</head>
<body class='av-16'>
<% site.skin $Site#header %>
@ -115,7 +115,7 @@ function openPopup(img, width, height) {
<% value 'muted color' #999999 %>
<% value 'hover color' #d50000 %>
<% value 'link color' #ff4040 %>
<% value 'text font' 'Helvetica, Arial, sans-serif' %>
<% value 'title font' 'Helvetica, Arial, sans-serif' %>
<% value 'text font' 'Liberation Sans, Helvetica, Arial, sans-serif' %>
<% value 'title font' 'Liberation Sans, Helvetica, Arial, sans-serif' %>
<% #stylesheet %>

View file

@ -37,7 +37,7 @@
</form>
<script>
(function() {
document.addEventListener("alpine:init", () => {
// Setup skin editor
let mode = 'application/x-helma-skin';
@ -59,7 +59,7 @@
tabSize: 3,
viewportMargin: Infinity
});
})();
});
</script>
<% #compare %>

View file

@ -222,7 +222,7 @@ Skin.prototype.compare_action = function() {
} else {
res.push();
var param = {}, leftLineNumber = rightLineNumber = 0;
for each (let line in diff) {
for (let line of diff) {
if (line.deleted) {
param.right = encode(line.value);
param.leftStatus = 'added';

View file

@ -30,8 +30,8 @@
background-color: #f2fae3;
}
</style>
<script src='<% site.href main.js %>'></script>
<script src='<% root.static ../../scripts/editor.min.js %>'></script>
<script defer src='<% site.href main.js %>'></script>
</head>
<body>
<span class='uk-margin-right uk-float-right'>

View file

@ -128,7 +128,7 @@ Skins.prototype.all_action = function() {
res.redirect(res.handlers.layout.skins.href(req.action));
}
res.push()
for each (let set in this.getListOfSkins()) {
for (let set of this.getListOfSkins()) {
res.write(renderList(set[1], '$Skin#listItem'));
}
res.data.list = res.pop();
@ -163,12 +163,12 @@ Skins.prototype.getSkin = function(group, name) {
Skins.prototype.getListOfSkins = function() {
var result = [];
var options = Skin.getPrototypeOptions();
for each (var option in options) {
for (let option of options) {
var skins = [];
var prototype = option.value;
var skinfiles = app.getSkinfilesInPath(res.skinpath);
var skin = createSkin(skinfiles[prototype][prototype]);
for each (var name in skin.getSubskinNames()) {
for (let name of skin.getSubskinNames()) {
var subskin = this.getSkin(prototype, name);
skins.push(subskin);
}

View file

@ -62,7 +62,7 @@ else
<% #editor %>
<script>
// Load additonal scripts and styles for UIkits HTML editor plugin
(function() {
document.addEventListener("alpine:init", () => {
const _form = document.querySelector('#av-story-form');
if (!_form) return;
@ -296,5 +296,5 @@ else
scheduler();
}
})();
});
</script>

View file

@ -692,43 +692,8 @@ Story.prototype.format_filter = function(value, param, mode) {
}
Story.prototype.linebreak_filter = function (value, param, mode) {
if (mode === 'markdown') {
// FIXME: should be obsolete
var mdLineBreakMarker = new RegExp('<!--av-break-->', 'g');
var mdQuoteMarker = new RegExp('<!--av-quote-->', 'g');
var mdCodeMarker = new RegExp('<!--av-code-->', 'g');
return value
// Prevent Markdown for linebreaks (lines ending with 2 spaces) as well as
// code segments (4 spaces) to be removed by Helmas format() method
.replace(/ {2}$/gm, mdLineBreakMarker.source)
.replace(/^ {4}/gm, mdCodeMarker.source)
// Prevent Markdown for quote segments (lines starting with >)
// to be removed by Helmas format method()
.replace(/^(>+)/gm, function(item) {
return mdQuoteMarker.source.repeat(item.length);
})
// Apply Helmas format() method for good
// FIXME: This should probably be moved to the compat layer
.format(value)
// Replace trailing HTML linebreaks with Markdown ones
.replace(/<br[^>]*>$/gm, String.SPACE.repeat(2))
// Replace trailing HTML linebreaks inserted by Helmas format() method with Markdown ones
//.replace(/<br\s*class=['"]?helma-format['"]?\s*\/?>/g, String.SPACE.repeat(2))
// Restore Markdown quote segments
.replace(mdQuoteMarker, '>')
// Restore Markdown linebreaks and code segments
.replace(mdLineBreakMarker, String.SPACE.repeat(2))
.replace(mdCodeMarker, String.SPACE.repeat(4));
} else {
var parts = value.split(/(?:\n\n|\r\r|\r\n\r\n)+/);
value = format('<p>' + parts.join('</p><p>') + '</p>');
}
return value;
};
Story.prototype.code_filter = function (value, param) {
value = this.linebreak_filter(value, param);
return this.markdown_filter(value, param);
var parts = value.split(/(?:\n\n|\r\r|\r\n\r\n)+/);
return format('<p>' + parts.join('</p><p>') + '</p>');
};
/**

View file

@ -23,35 +23,37 @@
<script>
// Load additional script for Collage jQuery plugin
if ('<% tag.type parent %>' === 'Image') {
const script = document.createElement('script');
document.addEventListener("alpine:init", () => {
if ('<% tag.type parent %>' === 'Image') {
const script = document.createElement('script');
script.onload = function() {
$(function() {
let resizeTimer = null;
script.onload = function() {
$(function() {
let resizeTimer = null;
const collage = () => {
$('.av-collage').removeWhitespace().collagePlus({
allowPartialLastRow: true,
fadeSpeed: 'slow'
const collage = () => {
$('.av-collage').removeWhitespace().collagePlus({
allowPartialLastRow: true,
fadeSpeed: 'slow'
});
};
$('.av-collage').collageCaption();
$(window).bind('resize', function() {
$('.av-tagged-image').css('opacity', 0);
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(collage, 200);
});
};
$('.av-collage').collageCaption();
$(window).bind('resize', function() {
$('.av-tagged-image').css('opacity', 0);
if (resizeTimer) clearTimeout(resizeTimer);
resizeTimer = setTimeout(collage, 200);
collage();
});
};
collage();
});
};
script.src = '<% root.static ../../scripts/gallery.min.js %>';
document.head.appendChild(script);
}
script.src = '<% root.static ../../scripts/gallery.min.js %>';
document.head.appendChild(script);
}
});
</script>
<% #simple %>

View file

@ -114,37 +114,30 @@ Tag.prototype.rss_xml_action = function() {
Tag.prototype.rename_action = function() {
var tag = this;
if (req.data.name) {
// Trim and remove troublesome characters (like ../.. etc.)
// We call getAccessName with a virgin HopObject to allow most names
var name = this.getAccessName.call(new HopObject, File.getName(req.data.name));
var name = this.getAccessName.call(new HopObject, req.data.name);
tag = this.site.getTags(this.type, Tags.ALL).get(name);
if (!tag) {
tag = Tag.add(name, this.type, this.site);
}
if (tag !== this) {
this.forEach(function() {
this.tag_id = tag._id;
});
this.remove();
res.commit();
}
}
res.redirect(req.data.http_referer);
return;
// FIXME: Actually, the method should work like this but it caused a mess:
if (req.data.name) {
var name = this.getAccessName.call(new HopObject, File.getName(req.data.name));
var tag = this.site.getTags(this.type, Tags.ALL).get(name);
if (tag) {
if (tag !== this) {
// move tagged items to tag like above
}
} else {
// rename tag like: this.name = name
}
}
}
Tag.prototype.delete_action = function() {

View file

@ -143,7 +143,7 @@ Tags.prototype.list_macro = function(param, skin) {
//var list = new jala.ListRenderer(collection);
//list.render(skin || mgrlistitem);
var index = start + 1;
for each (var item in collection) {
for (let item of collection) {
// FIXME: Is there a more elegant solution?
if (item.constructor !== Tag) {
item = item.get(0);

View file

@ -308,27 +308,31 @@ User.autoLogin = function() {
if (session.user) {
return;
}
var name = req.cookies[User.COOKIE];
var hash = req.cookies[User.HASHCOOKIE];
if (!name || !hash) {
return;
}
var user = User.getByName(name);
if (!user) {
return;
}
var ip = req.data.http_remotehost.clip(getProperty('cookieLevel', '4'),
String.EMPTY, '\\.');
if ((user.hash + ip).md5() !== hash) {
if (!user || User.getAutoLoginHash(user.hash) !== hash) {
return;
}
session.login(user);
user.touch();
res.message = gettext('Welcome to {0}, {1}. Have fun!',
res.handlers.site.title, user.name);
res.message = gettext('Welcome to {0}, {1}. Have fun!', res.handlers.site.title, user.name);
return;
}
User.getAutoLoginHash = function(salt) {
const ip = req.getHeader("X-Forwarded-For") || req.data.http_remotehost;
return (salt + ip.replace(/[0-9a-fA-F]+$/, "")).md5();
}
/**
*
* @param {Object} data
@ -336,25 +340,29 @@ User.autoLogin = function() {
*/
User.login = function(data) {
var user = User.getByName(data.name);
var digest = data.digest;
if (!user) {
throw Error(gettext('Unfortunately, your login failed. Maybe a typo?'));
}
var digest = data.digest;
// Calculate digest for JavaScript-disabled browsers
if (!digest) {
app.logger.warn('Received clear text password from ' + req.data.http_referer);
digest = ((data.password + user.salt).md5() + session.data.token).md5();
}
// Check if login is correct
if (digest !== user.getDigest(session.data.token)) {
throw Error(gettext('Unfortunately, your login failed. Maybe a typo?'))
}
if (data.remember) {
// Set long running cookies for automatic login
res.setCookie(User.COOKIE, user.name, 365);
var ip = req.data.http_remotehost.clip(getProperty('cookieLevel', '4'), String.EMPTY, '\\.');
res.setCookie(User.HASHCOOKIE, (user.hash + ip).md5(), 365);
res.setCookie(User.HASHCOOKIE, User.getAutoLoginHash(user.hash), 365);
}
user.touch();
session.login(user);
return user;
@ -594,7 +602,7 @@ User.prototype.timeline_action = function() {
res.data.pager = renderPager(count, this.href(req.action), pageSize, page);
res.data.title = gettext('Timeline');
res.data.body = this.renderSkinAsString('$User#timeline');
root.renderSkin('Site#page');
res.handlers.site.renderSkin('Site#page');
};
User.prototype.delete_action = function() {

View file

@ -17,7 +17,7 @@
# The current build version and date
version = 0.0.0
buildDate = 18 Oct 1971
buildDate = 18 Jun 2001
# The root site
rootId = 1

View file

@ -187,7 +187,7 @@ Layout.convert = function(fpath) {
var convert2subskins = function(proto, dir) {
res.push();
for each (var fname in dir.list()) {
for (let fname of dir.list()) {
var file = new helma.File(dir, fname);
var name = fname.split(".")[0], skin;
if (skin = rename(proto, name)) {
@ -238,7 +238,7 @@ Layout.convert = function(fpath) {
}
var dir = new helma.File(fpath, "images");
for each (var fname in dir.list()) {
for (let fname of dir.list()) {
var file = new helma.File(dir, fname);
file.move(new helma.File(fpath, fname));
}
@ -246,7 +246,7 @@ Layout.convert = function(fpath) {
var inventory = new function() {
var dir = new helma.File(fpath);
var result = {};
for each (var fname in dir.list()) {
for (let fname of dir.list()) {
var file = new helma.File(dir, fname);
if (!file.isDirectory()) {
// Where does the "image\" prefix come from in files from layouts.antville.org?
@ -277,7 +277,7 @@ Layout.convert = function(fpath) {
dir = new helma.File(fpath, "skins");
var skin;
for each (var fname in dir.list()) {
for (let fname of dir.list()) {
file = new helma.File(dir, fname);
skin = convert2subskins(fname, file);
}
@ -286,7 +286,7 @@ Layout.convert = function(fpath) {
data.images = new HopObject;
var dir = new helma.File(fpath, "imagedata");
for each (fname in dir.list()) {
for (let fname of dir.list()) {
if (fname.endsWith(".xml")) {
file = new helma.File(dir, fname);
data.images.add(convertImage(Xml.read(file)));

View file

@ -15,14 +15,14 @@
<script>
// Load additional script for Googles custom search
(function() {
document.addEventListener("alpine:init", () => {
var cx = '008141500676255803966:bw4l-wnuz44';
var gcse = document.createElement('script');
gcse.type = 'text/javascript';
gcse.async = true;
gcse.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') +
gcse.src = (document.location.protocol === 'https:' ? 'https:' : 'http:') +
'//www.google.com/cse/cse.js?cx=' + cx;
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(gcse, s);
})();
});
</script>

View file

@ -104,7 +104,7 @@ Story.prototype.content_macro = function(param) {
// Clone param and remove non-HTML attributes from param:
var options = Object.clone.call(param, {});
var noAttr = 'as clipping delimiter fallback limit part';
for each (let key in noAttr.split(String.SPACE)) {
for (let key of noAttr.split(String.SPACE)) {
delete param[key];
}
@ -162,7 +162,7 @@ Story.prototype.getRenderedContentPart = function(name, mode) {
// Enable caching; some macros (eg. poll, storylist) will set this
// to false to prevent caching of a contentpart containing them.
res.meta.cachePart = true;
part = this.format_filter(part, {});
part = this.format_filter(part, {}, "markdown");
}
this.cache[key] = part;
if (res.meta.cachePart) {

View file

@ -1,4 +1,2 @@
org.gradle.console = plain
antville.repo.url = https://github.com/antville/antville.git
helma.download.url = https://github.com/antville/helma/releases/download/v20200614/helma-20200614.tgz
antville.repo.url = https://code.host.antville.org/github.com/antville/antville.git
helma.download.url = https://code.host.antville.org/antville/helma/releases/download/25.3.1/helma-25.3.1.tgz

Binary file not shown.

View file

@ -1,5 +1,7 @@
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1-bin.zip
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.12.1-bin.zip
networkTimeout=10000
validateDistributionUrl=true
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists

311
gradlew vendored
View file

@ -1,78 +1,129 @@
#!/usr/bin/env sh
#!/bin/sh
#
# Copyright © 2015-2021 the original authors.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# https://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# SPDX-License-Identifier: Apache-2.0
#
##############################################################################
##
## Gradle start up script for UN*X
##
#
# Gradle start up script for POSIX generated by Gradle.
#
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/HEAD/platforms/jvm/plugins-application/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
##############################################################################
# Attempt to set APP_HOME
# Resolve links: $0 may be a link
PRG="$0"
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do
ls=`ls -ld "$PRG"`
link=`expr "$ls" : '.*-> \(.*\)$'`
if expr "$link" : '/.*' > /dev/null; then
PRG="$link"
else
PRG=`dirname "$PRG"`"/$link"
fi
app_path=$0
# Need this for daisy-chained symlinks.
while
APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
[ -h "$app_path" ]
do
ls=$( ls -ld "$app_path" )
link=${ls#*' -> '}
case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
# This is normally unused
# shellcheck disable=SC2034
APP_BASE_NAME=${0##*/}
# Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036)
APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s\n' "$PWD" ) || exit
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
MAX_FD=maximum
warn () {
echo "$*"
}
} >&2
die () {
echo
echo "$*"
echo
exit 1
}
} >&2
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
case "$( uname )" in #(
CYGWIN* ) cygwin=true ;; #(
Darwin* ) darwin=true ;; #(
MSYS* | MINGW* ) msys=true ;; #(
NONSTOP* ) nonstop=true ;;
esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
JAVACMD=$JAVA_HOME/jre/sh/java
else
JAVACMD="$JAVA_HOME/bin/java"
JAVACMD=$JAVA_HOME/bin/java
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@ -81,92 +132,120 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
JAVACMD="java"
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
JAVACMD=java
if ! command -v java >/dev/null 2>&1
then
die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
MAX_FD="$MAX_FD_LIMIT"
fi
ulimit -n $MAX_FD
if [ $? -ne 0 ] ; then
warn "Could not set maximum file descriptor limit: $MAX_FD"
fi
else
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
case $MAX_FD in #(
max*)
# In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
MAX_FD=$( ulimit -H -n ) ||
warn "Could not query maximum file descriptor limit"
esac
case $MAX_FD in #(
'' | soft) :;; #(
*)
# In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked.
# shellcheck disable=SC2039,SC3045
ulimit -n "$MAX_FD" ||
warn "Could not set maximum file descriptor limit to $MAX_FD"
esac
fi
# Escape application args
save () {
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
echo " "
}
APP_ARGS=$(save "$@")
# Collect all arguments for the java command, stacking in reverse order:
# * args from the command line
# * the main class name
# * -classpath
# * -D...appname settings
# * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
# For Cygwin or MSYS, switch paths to Windows format before running java
if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")"
JAVACMD=$( cygpath --unix "$JAVACMD" )
# Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Collect all arguments for the java command:
# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments,
# and any embedded shellness will be escaped.
# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be
# treated as '${Hostname}' itself on the command line.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Stop when "xargs" is not available.
if ! command -v xargs >/dev/null 2>&1
then
die "xargs is not available"
fi
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@"

78
gradlew.bat vendored
View file

@ -1,4 +1,22 @@
@if "%DEBUG%" == "" @echo off
@rem
@rem Copyright 2015 the original author or authors.
@rem
@rem Licensed under the Apache License, Version 2.0 (the "License");
@rem you may not use this file except in compliance with the License.
@rem You may obtain a copy of the License at
@rem
@rem https://www.apache.org/licenses/LICENSE-2.0
@rem
@rem Unless required by applicable law or agreed to in writing, software
@rem distributed under the License is distributed on an "AS IS" BASIS,
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
@rem See the License for the specific language governing permissions and
@rem limitations under the License.
@rem
@rem SPDX-License-Identifier: Apache-2.0
@rem
@if "%DEBUG%"=="" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@ -9,25 +27,29 @@
if "%OS%"=="Windows_NT" setlocal
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
if "%DIRNAME%"=="" set DIRNAME=.
@rem This is normally unused
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
if %ERRORLEVEL% equ 0 goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
@ -35,48 +57,36 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
echo. 1>&2
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 1>&2
echo. 1>&2
echo Please set the JAVA_HOME variable in your environment to match the 1>&2
echo location of your Java installation. 1>&2
goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
if %ERRORLEVEL% equ 0 goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
set EXIT_CODE=%ERRORLEVEL%
if %EXIT_CODE% equ 0 set EXIT_CODE=1
if not ""=="%GRADLE_EXIT_CONSOLE%" exit %EXIT_CODE%
exit /b %EXIT_CODE%
:mainEnd
if "%OS%"=="Windows_NT" endlocal

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -39,9 +39,11 @@ global.messages['de'] = {
"All Skins": "Alle Skins",
"All of this will be deleted irreversibly.": "All das wird unwiderruflich gelöscht werden.",
"An error occurred while processing your request.": "Bei der Bearbeitung der Anfrage ist ein Fehler aufgetreten.",
"Antville": "Antville",
"Antville is an open source project aimed at the development of a simple site hosting system with many advanced <a href=\"{0}\">features</a>.": "Antville ist ein quelloffenes Projekt zum einfachen Veröffentlichen von Websites und bietet einige <a href=\"{0}\">besondere Merkmale</a>.",
"Antville itself provides a default callback URL invoking the basic ping method of the weblogs.com API.": "Antville selbst bietet eine standardmäßige Rückruf-Adresse, welche die Ping-Methode der Website weblogs.com aufruft.",
"Antville supports the following application programming interfaces:": "Antville unterstützt folgende Schnittstellen zur Anwendungsprogrammierung:",
"Application Server": "Anwendungsserver",
"Archive": "Archiv",
"Are you sure you want to add this URL to the referrer filter? Edit it below to filter a pattern only.": "Sind Sie sicher, dass Sie diesen Rückverweis filtern wollen? Sie können ihn bearbeiten, um ein Schema zu filtern.",
"Are you sure you want to proceed?": "Sind Sie sicher, dass Sie fortfahren wollen?",
@ -52,7 +54,6 @@ global.messages['de'] = {
"Blocked": "Gesperrt",
"Bookmarklet": "Bookmarklet",
"Both": "Beides",
"Build": "Gestalt",
"Cache": "Zwischenspeicher",
"Callback URL": "Rückruf-Adresse",
"Cancel": "Abbrechen",
@ -68,6 +69,7 @@ global.messages['de'] = {
"Comments": "Kommentare",
"Comments by {0}": "Kommentare von {0}",
"Comments of the story are {0}": "Kommentare zum Beitrag sind {0}",
"Commit": "Commit",
"Compare": "Vergleichen",
"Compare {0}": "Vergleichen {0}",
"Confirm Deletion": "Löschen bestätigen",
@ -149,7 +151,6 @@ global.messages['de'] = {
"Have fun!": "Viele Späße!",
"Health": "Statusmonitor",
"Hello {0}.": "Hallo {0}.",
"Helma Version": "Helma-Version",
"Hide": "Verstecken",
"I understand and accept the {0}data privacy statement{1}": "Ich verstehe und akzeptiere die {0}Datenschutzerklärung{1}",
"I understand and accept the {0}terms and conditions{1}": "Ich verstehe und akzeptiere die {0}Nutzungsbedingungen{1}",
@ -294,12 +295,14 @@ global.messages['de'] = {
"Running Polls": "Laufende Umfragen",
"Save": "Speichern",
"Save and Run": "Speichern und starten",
"Scripting Engine": "Scripting-Umgebung",
"Search": "Suche",
"Search with {0}": "Mit {0} suchen",
"Select": "Auswählen",
"Send": "Senden",
"Send Request": "Anfrage senden",
"Separated by commas": "Durch Komma getrennt",
"Servlet Interface": "Servlet-Schnittstelle",
"Sessions": "Sitzungen",
"Settings": "Einstellungen",
"Setup": "Konfiguration",
@ -360,7 +363,7 @@ global.messages['de'] = {
"The URL endpoint for each of these APIs is located at": "Die Internet-Adresse für jede dieser Schnittstellen lautet",
"The account data will be available for download from here within the next days.": "Die Kontodaten stehen demnächst hier zum Download bereit.",
"The account is queued for export.": "Der Export der Kontodaten wird vorbereitet.",
"The account {0} was deleted.": "Das Konto {0} wurde gelöscht.",
"The account {0} is being deleted.": "Das Konto {0} wird gelöscht.",
"The callback URL will be invoked as an HTTP POST request with the following parameters:": "Die Rückruf-Adresse wird mit folgenden Parametern durch die »HTTP Post«-Methode aufgerufen:",
"The changes were saved successfully.": "Die Änderungen wurden erfolgreich gespeichert.",
"The chosen name is too long. Please enter a shorter one.": "Der gewählte Name ist zu lang. Bitte geben Sie einen kürzeren ein.",
@ -438,12 +441,14 @@ global.messages['de'] = {
"Uptime": "Betriebszeit",
"User": "Konto",
"Username and e-mail address do not match.": "Für die angegebene Kombination aus Name und E-Mail-Adresse ist kein Konto registriert.",
"Version": "Version",
"Versions": "Versionen",
"Via": "Via",
"Virtual Machine": "Virtuelle Maschine",
"Vote": "Abstimmen",
"Warning!": "Warnung!",
"We are sorry to inform you that the user {0} has cancelled your membership of the site {1} at {2}.": "Wir bedauern Ihnen mitzuteilen, dass Ihre Mitgliedschaft bei der Website {1} unter {2} von {0} beendet wurde.",
"We have updated our terms and conditions. Please reaffirm you understand and accept the following:": "Wir haben unsere Nutzungsbedingungen geändert. Bitte bestätigen Sie im folgenden, dass Sie diese verstehen und akzeptieren:",
"Webserver": "Webserver",
"Welcome": "Willkommen",
"Welcome to {0}, {1}!": "Willkommen bei {0}, {1}!",
"Welcome to {0}, {1}. Have fun!": "Willkommen bei {0}, {1}. Viel Spaß!",

5978
package-lock.json generated Normal file

File diff suppressed because it is too large Load diff

View file

@ -1,6 +1,6 @@
{
"name": "antville",
"version": "1.618.0",
"version": "1.6.0",
"description": "Antville is an open source project aimed at the development of a high performance, feature rich weblog hosting software. It can easily host up to several thousands of sites (the number of weblogs is rather limited by the installation owners choice and server power than by software limitations).",
"main": "main.js",
"directories": {
@ -8,20 +8,21 @@
"test": "tests"
},
"scripts": {
"add-claustra": "tools/claustra/add-claustra.js",
"add-patch": "tools/updater/add-patch.js",
"patch": "tools/updater/run-patch.js",
"build:main.js": "browserify tools/client/main.js -o static/scripts/main.min.js",
"build:editor.js": "browserify tools/client/editor.js -o static/scripts/editor.min.js",
"build:gallery.js": "browserify tools/client/gallery.js -o static/scripts/gallery.min.js",
"claustra:add": "tools/claustra/add-claustra.js",
"build": "run-p --continue-on-error --print-label build:*",
"build:main.js": "browserify tools/client/main.js --outfile static/scripts/main.min.js",
"build:editor.js": "browserify tools/client/editor.js --outfile static/scripts/editor.min.js",
"build:gallery.js": "browserify tools/client/gallery.js --outfile static/scripts/gallery.min.js",
"build:main.css": "lessc --clean-css tools/client/main.less static/styles/main.min.css",
"build:editor.css": "lessc --clean-css tools/client/editor.less static/styles/editor.min.css",
"dev": "run-p -cl dev:*.js dev:*.css",
"dev:main.js": "onchange tools/client/main.js -- yarn build:main.js",
"dev:main.css": "onchange tools/client/main.less -- yarn build:main.css",
"dev:editor.js": "onchange tools/client/editor.js -- yarn build:editor.js",
"dev:editor.css": "onchange tools/client/editor.less -- yarn build:editor.css",
"dev:gallery.js": "onchange tools/client/gallery.js -- yarn build:gallery.js"
"patch:add": "tools/updater/add-patch.js",
"patch:apply": "tools/updater/run-patch.js",
"watch": "run-p --continue-on-error --print-label watch:*",
"watch:main.js": "onchange tools/client/main.js -- npm run build:main.js",
"watch:main.css": "onchange tools/client/main.less -- npm run build:main.css",
"watch:editor.js": "onchange tools/client/editor.js -- npm run build:editor.js",
"watch:editor.css": "onchange tools/client/editor.less -- npm run build:editor.css",
"watch:gallery.js": "onchange tools/client/gallery.js -- npm run build:gallery.js"
},
"repository": {
"type": "git",
@ -30,20 +31,21 @@
"author": "The Antville People",
"license": "Apache-2.0",
"dependencies": {
"alpinejs": "=2.3.3",
"codemirror": "^5.53.2",
"jquery": "^3.5.0",
"alpinejs": "3.14.8",
"codemirror": "5.65.18",
"jquery": "3.7.1",
"jquery-collagePlus": "github:antville/jquery-collagePlus#0.3.4",
"js-md5": "^0.7.3",
"uikit": "^2.27.4"
"js-md5": "0.8.3",
"uikit": "2.27.4"
},
"devDependencies": {
"browserify": "^16.5.1",
"jsdoc": "^3.6.4",
"less": "^3.11.1",
"less-plugin-clean-css": "^1.5.1",
"npm-run-all": "^4.1.5",
"onchange": "^7.0.2",
"uglifyify": "^5.0.2"
"browserify": "17.0.1",
"generate-license-file": "3.7.0",
"jsdoc": "4.0.4",
"less": "4.2.2",
"less-plugin-clean-css": "1.6.0",
"npm-run-all2": "7.0.2",
"onchange": "7.1.0",
"uglifyify": "5.0.2"
}
}

52
renovate.json Normal file
View file

@ -0,0 +1,52 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": [
"config:recommended",
"mergeConfidence:all-badges",
"npm:unpublishSafe",
":disableRateLimiting",
":pinVersions",
":semanticCommitsDisabled"
],
"lockFileMaintenance": { "enabled": true },
"osvVulnerabilityAlerts": true,
"vulnerabilityAlerts": {
"labels": ["security", "urgent"],
"automerge": true
},
"labels": ["dependency"],
"gitIgnoredAuthors": ["29139614+renovate[bot]@users.noreply.github.com"],
"packageRules": [
{
"description": "Label major version bumps",
"matchUpdateTypes": ["major"],
"addLabels": ["major"]
},
{
"description": "Label packages required at runtime",
"matchDepTypes": ["dependencies"],
"addLabels": ["runtime"]
},
{
"description": "Label Java packages",
"matchManagers": ["gradle", "gradle-wrapper"],
"addLabels": ["java"]
},
{
"description": "Label JavaScript packages",
"matchDatasources": ["node-version", "npm"],
"addLabels": ["javascript"]
},
{
"description": "Group CommonMark packages",
"matchPackagePrefixes": ["org.commonmark"],
"groupName": "CommonMark packages"
}
]
}

View file

@ -1,5 +1,5 @@
plugins {
id 'com.github.jk1.dependency-license-report' version '1.13'
id 'com.github.jk1.dependency-license-report' version '2.9'
}
def helmaInstallDir = "${rootProject.buildDir}/install/antclick"
@ -44,7 +44,7 @@ task downloadHelma {
}
// See https://docs.gradle.org/current/userguide/working_with_files.html#sec:unpacking_archives_example
task installHelma(type: Copy) {
tasks.register('installHelma', Copy) {
description 'Download and extract the Helma package.'
group 'installation'
dependsOn 'downloadHelma'
@ -70,10 +70,10 @@ task installHelma(type: Copy) {
} into outputDir
}
task installAntville(type: Copy) {
tasks.register('installAntville', Copy) {
description 'Install Antville as Helma application'
group 'installation'
dependsOn 'installHelma'
dependsOn ':assemble', ':installAntville', 'installHelma', 'buildLicenses'
def appsProperties = "$antvilleBuildDir/tools/antclick/apps.properties"
def outputDir = "$helmaInstallDir/apps/antville"
@ -95,7 +95,7 @@ task installAntville(type: Copy) {
}
}
task installJars(type: Copy) {
tasks.register('installJars', Copy) {
description 'Download additional JAR libraries.'
group 'Installation'
dependsOn 'installHelma'
@ -109,9 +109,10 @@ task installJars(type: Copy) {
into outputDir
}
task buildDatabase(type: JavaExec) {
tasks.register('buildDatabase', JavaExec) {
description 'Builds the H2 SQL database file.'
group 'build'
dependsOn ':assemble'
def inputFile = "$antvilleInstallDir/db/postgre.sql"
def outputDir = "$helmaInstallDir/db"
@ -124,7 +125,7 @@ task buildDatabase(type: JavaExec) {
}
classpath = files(h2Jar)
main = 'org.h2.tools.RunScript'
mainClass = 'org.h2.tools.RunScript'
args = [
'-continueOnError',
@ -138,12 +139,12 @@ task buildDatabase(type: JavaExec) {
ignoreExitValue true
}
task buildLicenses(type: Copy) {
tasks.register('buildLicenses', Copy) {
description 'Build license files from server-side dependecies.'
group 'build'
dependsOn 'installJars'
def licensesDir = "$antvilleInstallDir/licenses"
def licensesDir = "$helmaInstallDir/licenses"
inputs.files generateLicenseReport
outputs.dir licensesDir
@ -161,7 +162,7 @@ task assembleDist {
dependsOn 'distTar'
}
task runH2Console(type: JavaExec) {
tasks.register('runH2Console', JavaExec) {
description 'Runs the H2 SQL database console.'
group 'Help'
dependsOn 'installJars'
@ -182,7 +183,7 @@ task runH2Console(type: JavaExec) {
// ignoreExitValue true
}
task distZip(type: Zip) {
tasks.register('distZip', Zip) {
description 'Creates the AntClick download package as Zip file.'
group 'distribution'
dependsOn 'assemble'
@ -194,25 +195,31 @@ task distZip(type: Zip) {
inputs.dir helmaInstallDir
outputs.file "$outputDir/$outputFile"
from helmaInstallDir
from (helmaInstallDir) {
into "antclick-${version}"
}
destinationDirectory = file(outputDir)
archiveFileName = outputFile
}
task distTar(type: Tar) {
description 'Creates the AntClick download package as Bzip2 file.'
tasks.register('distTar', Tar) {
description 'Creates the AntClick download package as compressed archive file.'
group 'distribution'
dependsOn 'assemble'
def version = project.distVersion()
def outputDir = "${rootProject.buildDir}/distributions"
def outputFile = "antclick-${version}.tbz"
def outputFile = "antclick-${version}.tgz"
inputs.dir helmaInstallDir
outputs.file "$outputDir/$outputFile"
from helmaInstallDir
compression = Compression.BZIP2
from (helmaInstallDir) {
into "antclick-${version}"
}
compression = Compression.GZIP
destinationDirectory = file(outputDir)
archiveFileName = outputFile
}

View file

@ -1,5 +1,5 @@
window.CodeMirror = require('codemirror/lib/codemirror');
window.marked = require('marked/lib/marked');
window.marked = require('marked/lib/marked.cjs').marked;
require('codemirror/mode/css/css');
require('codemirror/mode/gfm/gfm');

View file

@ -1,12 +1,11 @@
window.$ = window.jQuery = require('jquery');
window.Alpine = require('alpinejs').default;
require('uikit/dist/js/uikit');
require('uikit/dist/js/components/form-password');
require('uikit/dist/js/components/tooltip');
require('uikit/dist/js/components/upload');
require('alpinejs');
const Antville = window.Antville = {};
Antville.hash = require('js-md5/src/md5');
@ -126,7 +125,7 @@ Antville.decode = function(str) {
Antville.Referrer = function(url, text, count) {
this.url = url;
const re = new RegExp('https?://(?:www\.)?');
const re = new RegExp('https?://(?:www\\.)?');
this.text = String(text).replace(re, '');
@ -262,3 +261,5 @@ Antville.http = (method, url, options) => {
httpClient.send(_data);
return this;
};
Alpine.start();

View file

@ -3,3 +3,7 @@
@import (inline) 'node_modules/uikit/dist/css/components/tooltip.almost-flat.css';
@import './sprites';
summary {
display: revert;
}

View file

@ -49,7 +49,7 @@ var ResultWrapper = function(result) {
}
this.update = function() {
for each (var key in columns) {
for (let key of columns) {
this.values[key] = result.getColumnItem(key);
}
return;
@ -303,18 +303,18 @@ var execute = function(sql /*, value1, ..., valueN */) {
var archive = function() {
var staticDir = new helma.File(app.dir + "/../static");
for each (var siteName in staticDir.list()) {
for (let siteName of staticDir.list()) {
var site = siteName !== "www" ? root.get(siteName) : root;
if (!site) {
continue;
}
var dir = new helma.File(staticDir, siteName + "/layouts");
for each (var layoutName in dir.list()) {
for (let layoutName of dir.list()) {
if (layoutName.startsWith(".")) {
continue;
}
var layout = new Layout(site);
for each (var image in dir.listRecursive(/\.(jpg|gif|png)$/)) {
for (let image of dir.listRecursive(/\.(jpg|gif|png)$/)) {
var name = image.split("/").pop().split(".")[0];
retrieve(query("archive", name, layoutName, siteName));
traverse(function() {

View file

@ -157,7 +157,7 @@ convert.layoutImages = function() {
var fpath = antville().properties.staticPath;
var files = [metadata.fileName, metadata.thumbnailName];
for each (var fname in files) {
for (let fname of files) {
var source = new helma.File(fpath + "/layouts/" +
this.parentLayout, fname);
var layoutDir = new helma.File(fpath + this.SITE_ALIAS +
@ -216,7 +216,7 @@ convert.sites = function() {
metadata.locale += "_" + metadata.country;
}
var mode = metadata.usercontrib ? 'open' : this.mode;
for each (var key in ["enableping", "usercontrib", "archive",
for (let key of ["enableping", "usercontrib", "archive",
"discussions", "days", "shortdateformat", "longdateformat",
"linkcolor", "alinkcolor", "vlinkcolor", "smallcolor",
"titlecolor", "titlefont", "textfont", "textcolor", "smallsize",
@ -459,7 +459,7 @@ convert.skins = function() {
}
destination.makeDirectory();
var files = source.list();
for each (var fname in files) {
for (let fname of files) {
(new helma.File(source, fname)).hardCopy(new helma.File(destination, fname));
}
}
@ -509,7 +509,7 @@ convert.skins = function() {
appSkins[prototype] || (appSkins[prototype] = {});
var skin = createSkin(skinfiles[prototype][prototype]);
var subskins = skin.getSubskinNames();
for each (var name in subskins) {
for (let name of subskins) {
appSkins[prototype][name] = skin.getSubskin(name).getSource();
}
}
@ -574,7 +574,7 @@ convert.skins = function() {
}
if (parent !== null && parent !== undefined) {
execute("update skin set source = '" +
clean(parent).replace(/'/g, "\\'") + "' where " +
clean(parent).replace(/('|\\)/g, "\\$1") + "' where " +
'id = ' + this.id);
}
});
@ -608,7 +608,7 @@ convert.root = function() {
}
var dir = new helma.File(staticDir, this.name);
var files = dir.list();
for each (fname in files) {
for (let fname of files) {
var source = new helma.File(dir, fname);
var dest = new helma.File(staticDir, "www/" + fname);
log("Rename " + source + " to " + dest);

View file

@ -19,7 +19,7 @@
var sql = new Sql();
var sql2 = new Sql();
for each (let table in ["file", "image", "tag"]) {
for (let table of ["file", "image", "tag"]) {
sql.retrieve("select * from $0 where name like '%?%';", table);
sql.traverse(function() {
var name = "-".repeat(this.name.count("?"));

2186
yarn.lock

File diff suppressed because it is too large Load diff