Skip to content

Commit 544b3e2

Browse files
committed
feat(pat-recurrence): Allow to enable/disable the feature to add additional dates.
Ref: plone/plone.formwidget.recurrence#66 Fixes: plone/plone.formwidget.recurrence#49
1 parent 46a1a00 commit 544b3e2

4 files changed

Lines changed: 92 additions & 2 deletions

File tree

src/pat/recurrence/README.md

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,54 @@ Show the recurrence widget.
1616

1717
## Example
1818

19-
<textarea class="pat-recurrence"></textarea>
19+
### Recurrence without additional start feature
20+
21+
<label>Recurrence start date:
22+
<input name="start-1" type="date" value="2026-01-01"/>
23+
</label>
24+
<label>Recurrence:
25+
<textarea
26+
class="pat-recurrence"
27+
data-pat-recurrence='{
28+
"startField": "[name=start-2]"
29+
}'></textarea>
30+
</label>
31+
32+
```html
33+
<textarea
34+
class="pat-recurrence"
35+
data-pat-recurrence='{
36+
"startField": "[name=start-2]"
37+
}'
38+
></textarea>
39+
```
40+
41+
### Recurrence with additional start feature
42+
43+
Note: adding additional start dates is a feature of the specification but is
44+
not supported by a number of external tools, like Google Calendar, Microsoft
45+
Outlook or Gnome Calendar.
46+
Therefore, this feature is disabled by default.
47+
However, you can enable it with the `allowAdditionalDates` feature.
48+
49+
<label>Recurrence start date:
50+
<input name="start-2" type="date" value="2026-01-01"/>
51+
</label>
52+
<label>Recurrence:
53+
<textarea
54+
class="pat-recurrence"
55+
data-pat-recurrence='{
56+
"startField": "[name=start-2]",
57+
"allowAdditionalDates": true
58+
}'></textarea>
59+
</label>
2060

2161
```html
22-
<textarea class="pat-recurrence"></textarea>
62+
<textarea
63+
class="pat-recurrence"
64+
data-pat-recurrence='{
65+
"startField": "[name=start-2]",
66+
"allowAdditionalDates": true
67+
}'
68+
></textarea>
2369
```

src/pat/recurrence/recurrence.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1393,6 +1393,7 @@ export default Base.extend({
13931393
ributtonExtraClass: "",
13941394

13951395
// INPUT CONFIGURATION
1396+
allowAdditionalDates: false,
13961397
hasRepeatForeverButton: true,
13971398

13981399
// JQUERY TEMPLATE NAMES

src/pat/recurrence/recurrence.test.js

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,4 +54,45 @@ describe("Recurrence", function () {
5454
"Cannot load the occurrences preview.",
5555
);
5656
});
57+
58+
it("Initializes without the additional dates feature.", async function () {
59+
document.body.innerHTML = `
60+
<input name="start" type="date" value="2026-01-01" />
61+
<textarea class="pat-recurrence"
62+
data-pat-recurrence='{
63+
"startField": "[name=start]"
64+
}'
65+
></textarea>
66+
`;
67+
68+
registry.scan(document.body);
69+
await utils.timeout(1);
70+
71+
const edit_btn = document.querySelector("[name=riedit]");
72+
edit_btn.click();
73+
74+
const add_occurrence = document.querySelector(".modal .riaddoccurrence");
75+
expect(add_occurrence).toBeFalsy();
76+
});
77+
78+
it("Initializes with the additional dates feature.", async function () {
79+
document.body.innerHTML = `
80+
<input name="start" type="date" value="2026-01-01" />
81+
<textarea class="pat-recurrence"
82+
data-pat-recurrence='{
83+
"startField": "[name=start]",
84+
"allowAdditionalDates": true
85+
}'
86+
></textarea>
87+
`;
88+
89+
registry.scan(document.body);
90+
await utils.timeout(1);
91+
92+
const edit_btn = document.querySelector("[name=riedit]");
93+
edit_btn.click();
94+
95+
const add_occurrence = document.querySelector(".modal .riaddoccurrence");
96+
expect(add_occurrence).toBeTruthy();
97+
});
5798
});

src/pat/recurrence/templates/form.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -291,6 +291,7 @@
291291
<div class="rioccurrences"></div>
292292

293293
<div class="rioccurrencesactions">
294+
<% if (allowAdditionalDates === true) { %>
294295
<h6><strong><%= localization.addDate %></strong></h6>
295296
<div class="riaddoccurrence ">
296297
<div class="alert alert-danger d-none"></div>
@@ -299,6 +300,7 @@
299300
<input class="btn btn-sm btn-success" type="button" name="addaction" id="addaction" value="<%= localization.add %>">
300301
</div>
301302
</div>
303+
<% } %>
302304
</div>
303305

304306
<div class="ributtons">

0 commit comments

Comments
 (0)