• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

ephios-dev / ephios / 12313892613

13 Dec 2024 10:24AM UTC coverage: 83.611% (-1.3%) from 84.861%
12313892613

Pull #1348

github

web-flow
Merge 7ba1fbea3 into 481a19acc
Pull Request #1348: add vue recurrence picker

2972 of 3523 branches covered (84.36%)

Branch coverage included in aggregate %.

83 of 358 new or added lines in 9 files covered. (23.18%)

6 existing lines in 1 file now uncovered.

12078 of 14477 relevant lines covered (83.43%)

0.83 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

0.0
/ephios/extra/templates/extra/widgets/recurrence_picker.html
NEW
1
{% load i18n %}
×
NEW
2
{% load static %}
×
NEW
3

×
NEW
4
<input type="hidden" autocomplete="off" id="pick_hour" value="{{ widget.pick_hour|lower }}">
×
NEW
5
<input type="hidden" autocomplete="off" id="original_start" value="{{ widget.original_start }}">
×
NEW
6
<div id="vue_app" class="row mt-4">
×
NEW
7
    <div id="chooser" class="col-12 col-md-6 mb-2">
×
NEW
8
        <div class="input-group pb-4">
×
NEW
9
            <div class="input-group-text">{% translate "starting at" %}</div>
×
NEW
10
            <input type="date" class="form-control" v-model="DTSTART">
×
NEW
11
            <input type="time" class="form-control" v-if="pickHour" v-model="DTSTART_TIME">
×
NEW
12
        </div>
×
NEW
13
        <ul class="list-group mb-4">
×
NEW
14
            <li class="list-group-item p-3" v-for="(rule, index) in rules"
×
NEW
15
                :class="{'border-danger': !isRuleValid(rule)}">
×
NEW
16
                <div class="btn-toolbar justify-content-between overflow-auto">
×
NEW
17
                    <div class="btn-group pb-4">
×
NEW
18
                        <button type="button" class="btn btn-outline-secondary"
×
NEW
19
                                :class="{'active': rule.freq===4}" v-if="pickHour"
×
NEW
20
                                @click="changeFreq(rule, frequencies.HOURLY)">{% translate "Hourly" %}</button>
×
NEW
21
                        <button type="button" class="btn btn-outline-secondary"
×
NEW
22
                                :class="{'active': rule.freq===3}"
×
NEW
23
                                @click="changeFreq(rule, frequencies.DAILY)">{% translate "Daily" %}</button>
×
NEW
24
                        <button type="button" class="btn btn-outline-secondary"
×
NEW
25
                                :class="{'active': rule.freq===2}"
×
NEW
26
                                @click="changeFreq(rule, frequencies.WEEKLY)">{% translate "Weekly" %}</button>
×
NEW
27
                        <button type="button" class="btn btn-outline-secondary"
×
NEW
28
                                :class="{'active': rule.freq===1}"
×
NEW
29
                                @click="changeFreq(rule, frequencies.MONTHLY)">{% translate "Monthly" %}</button>
×
NEW
30
                        <button type="button" class="btn btn-outline-secondary"
×
NEW
31
                                :class="{'active': rule.freq===0}"
×
NEW
32
                                @click="changeFreq(rule, frequencies.YEARLY)">{% translate "Yearly" %}</button>
×
NEW
33
                    </div>
×
NEW
34
                    <div>
×
NEW
35
                        <button type="button" class="btn btn-danger" @click="removeRule(rule)">
×
NEW
36
                            <i class="fas fa-trash"></i><span
×
NEW
37
                                class="visually-hidden">{% translate "Remove" %}</span>
×
NEW
38
                        </button>
×
NEW
39
                    </div>
×
NEW
40
                </div>
×
NEW
41

×
NEW
42
                <div class="form-inline mb-4">
×
NEW
43
                    <span class="d-inline">{% translate "Repeat every" %}</span>
×
NEW
44
                    <input class="form-control form-control-sm d-inline-block w-25 me-2 ms-2" type="number" v-model="rule.interval" min="1">
×
NEW
45
                    <span class="">[[ frequency_strings[rule.freq] ]]</span>
×
NEW
46
                    <span v-if="rule.freq < frequencies.DAILY" class="ms-1">{% translate "on" %}</span>
×
NEW
47
                </div>
×
NEW
48

×
NEW
49
                <div class="mb-4" v-if="rule.freq===frequencies.WEEKLY">
×
NEW
50
                    <div class="form-check form-check-inline" v-for="(day, day_index) in weekdays">
×
NEW
51
                        <input :id="'weekday' + index + day_index" class="form-check-input" type="checkbox" v-model="rule.byweekday" :value="day_index"
×
NEW
52
                               :required="!rule.byweekday">
×
NEW
53
                        <label :for="'weekday' + index + day_index" class="form-check-label">[[ day.slice(0,2) ]]</label>
×
NEW
54
                    </div>
×
NEW
55
                </div>
×
NEW
56

×
NEW
57
                <div class="mb-4 p-2 card" v-if="rule.freq===frequencies.MONTHLY">
×
NEW
58
                    <div class="row align-items-center mb-2">
×
NEW
59
                        <div class="col-1">
×
NEW
60
                            <input class="form-check-input" type="radio" name="month_mode"
×
NEW
61
                                   v-model="rule.month_mode" value="bymonthday" required>
×
NEW
62
                        </div>
×
NEW
63
                        <div class="col-3">
×
NEW
64
                            <select class="form-select" v-model="rule.bymonthday"
×
NEW
65
                                    :required="rule.month_mode=='bymonthday'"
×
NEW
66
                                    @focus="rule.month_mode='bymonthday'">
×
NEW
67
                                <option v-for="day in 31" :value="day">[[ day ]].</option>
×
NEW
68
                            </select>
×
NEW
69
                        </div>
×
NEW
70
                    </div>
×
NEW
71

×
NEW
72
                    <div class="row align-items-center mb-2">
×
NEW
73
                        <div class="col-1">
×
NEW
74
                            <input class="form-check-input" type="radio" name="month_mode"
×
NEW
75
                                   v-model="rule.month_mode" value="bysetpos" required>
×
NEW
76
                        </div>
×
NEW
77
                        <div class="col-3">
×
NEW
78
                            <select class="form-select" v-model="rule.bysetpos"
×
NEW
79
                                    :required="rule.month_mode=='bysetpos'" @focus="rule.month_mode='bysetpos'">
×
NEW
80
                                <option :value="1">{% translate "First" %}</option>
×
NEW
81
                                <option :value="2">{% translate "Second" %}</option>
×
NEW
82
                                <option :value="3">{% translate "Third" %}</option>
×
NEW
83
                                <option :value="4">{% translate "Fourth" %}</option>
×
NEW
84
                                <option :value="-1">{% translate "Last" %}</option>
×
NEW
85
                            </select>
×
NEW
86
                        </div>
×
NEW
87
                        <div class="col-3">
×
NEW
88
                            <select class="form-select" v-model="rule.byweekday"
×
NEW
89
                                    :required="rule.month_mode=='bysetpos'" @focus="rule.month_mode='bysetpos'">
×
NEW
90
                                <option v-for="(label, weekday_index) in weekdays" :value="weekday_index">[[ label ]]</option>
×
NEW
91
                            </select>
×
NEW
92
                        </div>
×
NEW
93
                    </div>
×
NEW
94
                </div>
×
NEW
95

×
NEW
96
                <div class="mb-4 p-2 card" v-if="rule.freq===frequencies.YEARLY">
×
NEW
97
                    <div class="row align-items-center mb-2">
×
NEW
98
                        <div class="col-1">
×
NEW
99
                            <input class="form-check-input" type="radio" name="month_mode"
×
NEW
100
                                   v-model="rule.month_mode" value="bymonthday" required>
×
NEW
101
                        </div>
×
NEW
102
                        <div class="col-3">
×
NEW
103
                            <select class="form-select" v-model="rule.bymonthday"
×
NEW
104
                                    @focus="rule.month_mode='bymonthday'">
×
NEW
105
                                <option v-for="day in 31" :value="day">[[ day ]].</option>
×
NEW
106
                            </select>
×
NEW
107
                        </div>
×
NEW
108
                        <div class="col-3">
×
NEW
109
                            <select class="form-select" v-model="rule.bymonth"
×
NEW
110
                                    @focus="rule.month_mode='bymonthday'">
×
NEW
111
                                <option v-for="month in months" :value="month.id">[[ month.long ]]</option>
×
NEW
112
                            </select>
×
NEW
113
                        </div>
×
NEW
114
                    </div>
×
NEW
115

×
NEW
116
                    <div class="row align-items-center mb-2">
×
NEW
117
                        <div class="col-1">
×
NEW
118
                            <input class="form-check-input" type="radio" name="month_mode"
×
NEW
119
                                   v-model="rule.month_mode" value="bysetpos" required>
×
NEW
120
                        </div>
×
NEW
121
                        <div class="col-3">
×
NEW
122
                            <select class="form-select" v-model="rule.bysetpos"
×
NEW
123
                                    @focus="rule.month_mode='bysetpos'">
×
NEW
124
                                <option value="1">{% translate "First" %}</option>
×
NEW
125
                                <option value="2">{% translate "Second" %}</option>
×
NEW
126
                                <option value="3">{% translate "Third" %}</option>
×
NEW
127
                                <option value="4">{% translate "Fourth" %}</option>
×
NEW
128
                                <option value="-1">{% translate "Last" %}</option>
×
NEW
129
                            </select>
×
NEW
130
                        </div>
×
NEW
131
                        <div class="col-3">
×
NEW
132
                            <select class="form-select" v-model="rule.byweekday"
×
NEW
133
                                    @focus="rule.month_mode='bysetpos'">
×
NEW
134
                                <option v-for="(label, pos_index) in weekdays" :value="pos_index">[[ label ]]</option>
×
NEW
135
                            </select>
×
NEW
136
                        </div>
×
NEW
137
                        <div class="col-1">
×
NEW
138
                            <span>{% translate "in" context "month" %}</span>
×
NEW
139
                        </div>
×
NEW
140
                        <div class="col-3">
×
NEW
141
                            <select class="form-select" v-model="rule.bymonth"
×
NEW
142
                                    @focus="rule.month_mode='bysetpos'">
×
NEW
143
                                <option v-for="month in months" :value="month.id">[[ month.long ]]</option>
×
NEW
144
                            </select>
×
NEW
145
                        </div>
×
NEW
146
                    </div>
×
NEW
147
                </div>
×
NEW
148

×
NEW
149
                <div class="card p-2">
×
NEW
150
                    <div class="form-check mb-2">
×
NEW
151
                        <input :id="'until' + index" class="form-check-input mt-2" type="radio" name="end_mode" v-model="rule.end_mode"
×
NEW
152
                               value="UNTIL" required>
×
NEW
153
                        <label class="form-check-label" :for="'until' + index">
×
NEW
154
                            {% translate "until" %}
×
NEW
155
                        </label>
×
NEW
156
                        <input type="date" class="form-control w-25 d-inline-block ms-2 me-2 form-control-sm"
×
NEW
157
                               v-model="rule.until" @focus="rule.end_mode='UNTIL'"
×
NEW
158
                               :required="rule.end_mode=='UNTIL'">
×
NEW
159
                        <input v-if="pickHour" type="time" class="form-control form-control-sm d-inline-block w-25"
×
NEW
160
                               v-model="rule.UNTIL_TIME" @focus="rule.end_mode='UNTIL'">
×
NEW
161

×
NEW
162
                    </div>
×
NEW
163

×
NEW
164
                    <div class="form-check">
×
NEW
165
                        <input :id="'until' + index" class="form-check-input mt-2" type="radio" name="end_mode" v-model="rule.end_mode"
×
NEW
166
                               value="COUNT" required>
×
NEW
167
                        <label class="form-check-label" :for="'count' + index">{% translate "for" %}</label>
×
NEW
168
                        <input type="number" min="1" class="form-control form-control-sm ms-2 me-2 w-25 d-inline-block"
×
NEW
169
                               v-model="rule.count" @focus="rule.end_mode='COUNT'"
×
NEW
170
                               :required="rule.end_mode=='COUNT'">
×
NEW
171
                        <span>{% translate "occurrences" %}</span>
×
NEW
172
                    </div>
×
NEW
173
                </div>
×
NEW
174
            </li>
×
NEW
175
            <li class="list-group-item p-3" v-for="date in dates"
×
NEW
176
                :class="{'border-danger': !(date.date && (!pickHour || date.time))}">
×
NEW
177
                <div class="row align-items-center">
×
NEW
178
                    <div class="col-5">
×
NEW
179
                        <input type="date" v-model="date.date" class="form-control" required>
×
NEW
180
                    </div>
×
NEW
181
                    <div class="col-5">
×
NEW
182
                        <input type="time" v-if="pickHour" v-model="date.time" class="form-control" required>
×
NEW
183
                    </div>
×
NEW
184
                    <div class="col-1 ms-auto me-3">
×
NEW
185
                        <button type="button" class="btn btn-danger" @click="removeDate(date)">
×
NEW
186
                            <i class="fas fa-trash"></i><span
×
NEW
187
                                class="visually-hidden">{% translate "Remove" %}</span>
×
NEW
188
                        </button>
×
NEW
189
                    </div>
×
NEW
190
                </div>
×
NEW
191
            </li>
×
NEW
192
        </ul>
×
NEW
193
        <div class="form-group">
×
NEW
194
            <button class="btn btn-secondary ms-1" id="add-rule" @click.stop.prevent="addRule()"><span
×
NEW
195
                class="fa fa-plus"></span> {% translate "Add rule" %}
×
NEW
196
            </button>
×
NEW
197
            <button class="btn btn-secondary ms-1" id="add-date" @click.stop.prevent="addDate()"><span
×
NEW
198
                class="fa fa-plus"></span> {% translate "Add date" %}
×
NEW
199
            </button>
×
NEW
200
        </div>
×
NEW
201
        <input type="hidden" autocomplete="off" :value="rrule_string" name="recurrence"
×
NEW
202
               id="id_recurrence">
×
NEW
203
        {{ csrf_token }}
×
NEW
204
    </div>
×
NEW
205
    <div class="col-12 col-md-6">
×
NEW
206
        <h3>{% translate "Selected dates" %}:</h3>
×
NEW
207
        <div class="two-columns" v-if="computed_dates.length > 0">
×
NEW
208
            <ul>
×
NEW
209
                <li v-for="date in computed_dates">[[ date ]]</li>
×
NEW
210
            </ul>
×
NEW
211
        </div>
×
NEW
212
        <div v-else>
×
NEW
213
            <p>{% translate "No dates selected yet. Add dates and rules using the controls on the left." %}</p>
×
NEW
214
        </div>
×
NEW
215
    </div>
×
NEW
216
</div>
×
NEW
217
<script type="text/javascript" src="{% static "rrule/rrule.min.js" %}"></script>
×
NEW
218
<script nonce="{{ request.csp_nonce }}" type="text/javascript"
×
NEW
219
        src="{% static "ephios/js/event_copy.js" %}"></script>
×
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc