hr-design-system-handlebars 1.113.11 → 1.113.12

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/assets/brand/hessenschau/conf/locatags.merged.json +1 -0
  3. package/dist/assets/brand/hr/conf/locatags.merged.json +1 -0
  4. package/dist/assets/brand/hr-bigband/conf/locatags.merged.json +1 -0
  5. package/dist/assets/brand/hr-fernsehen/conf/locatags.merged.json +1 -0
  6. package/dist/assets/brand/hr-inforadio/conf/locatags.merged.json +1 -0
  7. package/dist/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +1 -0
  8. package/dist/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +1 -0
  9. package/dist/assets/brand/hr-werbung/conf/locatags.merged.json +1 -0
  10. package/dist/assets/brand/hr1/conf/locatags.merged.json +1 -0
  11. package/dist/assets/brand/hr2/conf/locatags.merged.json +1 -0
  12. package/dist/assets/brand/hr3/conf/locatags.merged.json +1 -0
  13. package/dist/assets/brand/hr4/conf/locatags.merged.json +1 -0
  14. package/dist/assets/brand/you-fm/conf/locatags.merged.json +1 -0
  15. package/dist/assets/index.css +44 -3
  16. package/dist/assets/js/components/voting/js/votingCookieCheckerDs.feature.js +25 -0
  17. package/dist/assets/js/components/voting/js/votingDs.feature.js +214 -0
  18. package/dist/assets/js/components/voting/js/votingValidatorDs.feature.js +193 -0
  19. package/dist/views/components/forms/components/choice.hbs +2 -2
  20. package/dist/views/components/forms/components/choiceGroup.hbs +4 -2
  21. package/dist/views/components/forms/components/fields.hbs +3 -1
  22. package/dist/views/components/voting/components/voting_submit.hbs +4 -0
  23. package/dist/views/components/voting/voting.hbs +48 -7
  24. package/dist/views/components/voting/voting_result.hbs +3 -3
  25. package/dist/views_static/components/forms/components/choice.hbs +2 -2
  26. package/dist/views_static/components/forms/components/choiceGroup.hbs +4 -2
  27. package/dist/views_static/components/forms/components/fields.hbs +3 -1
  28. package/dist/views_static/components/voting/components/voting_submit.hbs +4 -0
  29. package/dist/views_static/components/voting/voting.hbs +48 -7
  30. package/dist/views_static/components/voting/voting_result.hbs +3 -3
  31. package/package.json +1 -1
  32. package/src/assets/brand/_default/conf/locatags.json +1 -0
  33. package/src/assets/brand/hessenschau/conf/locatags.merged.json +1 -0
  34. package/src/assets/brand/hr/conf/locatags.merged.json +1 -0
  35. package/src/assets/brand/hr-bigband/conf/locatags.merged.json +1 -0
  36. package/src/assets/brand/hr-fernsehen/conf/locatags.merged.json +1 -0
  37. package/src/assets/brand/hr-inforadio/conf/locatags.merged.json +1 -0
  38. package/src/assets/brand/hr-rundfunkrat/conf/locatags.merged.json +1 -0
  39. package/src/assets/brand/hr-sinfonieorchester/conf/locatags.merged.json +1 -0
  40. package/src/assets/brand/hr-werbung/conf/locatags.merged.json +1 -0
  41. package/src/assets/brand/hr1/conf/locatags.merged.json +1 -0
  42. package/src/assets/brand/hr2/conf/locatags.merged.json +1 -0
  43. package/src/assets/brand/hr3/conf/locatags.merged.json +1 -0
  44. package/src/assets/brand/hr4/conf/locatags.merged.json +1 -0
  45. package/src/assets/brand/you-fm/conf/locatags.merged.json +1 -0
  46. package/src/assets/fixtures/voting/voting.inc.json +21 -5
  47. package/src/stories/views/components/forms/components/choice.hbs +2 -2
  48. package/src/stories/views/components/forms/components/choiceGroup.hbs +4 -2
  49. package/src/stories/views/components/forms/components/fields.hbs +3 -1
  50. package/src/stories/views/components/voting/components/voting_submit.hbs +4 -0
  51. package/src/stories/views/components/voting/fixtures/voting.json +1 -1
  52. package/src/stories/views/components/voting/fixtures/voting_error.json +1 -1
  53. package/src/stories/views/components/voting/fixtures/voting_over.json +1 -1
  54. package/src/stories/views/components/voting/fixtures/voting_result_absolute.json +1 -1
  55. package/src/stories/views/components/voting/js/voteValidatorDs.js +195 -0
  56. package/src/stories/views/components/voting/js/votingCookieCheckerDs.feature.js +25 -0
  57. package/src/stories/views/components/voting/js/votingCookieCheckerDs.js +31 -0
  58. package/src/stories/views/components/voting/js/votingDs.feature.js +214 -0
  59. package/src/stories/views/components/voting/js/votingDs.js +198 -0
  60. package/src/stories/views/components/voting/js/votingValidatorDs.feature.js +193 -0
  61. package/src/stories/views/components/voting/voting.hbs +48 -7
  62. package/src/stories/views/components/voting/voting.stories.js +7 -0
  63. package/src/stories/views/components/voting/voting_result.hbs +3 -3
  64. package/src/stories/views/components/voting/voting_result.stories.js +0 -30
  65. /package/dist/views/components/voting/{voting_header.hbs → components/voting_header.hbs} +0 -0
  66. /package/dist/views_static/components/voting/{voting_header.hbs → components/voting_header.hbs} +0 -0
  67. /package/src/stories/views/components/voting/{voting_header.hbs → components/voting_header.hbs} +0 -0
@@ -0,0 +1,193 @@
1
+ import { hr$, listen } from 'hrQuery'
2
+
3
+ const VotingValidator = (context) => {
4
+ // Production steps of ECMA-262, Edition 6, 22.1.2.1
5
+ if (!Array.from) {
6
+ Array.from = (function () {
7
+ let toStr = Object.prototype.toString
8
+ let isCallable = function (fn) {
9
+ return typeof fn === 'function' || toStr.call(fn) === '[object Function]'
10
+ }
11
+ const toInteger = function (value) {
12
+ let number = Number(value)
13
+ if (isNaN(number)) {
14
+ return 0
15
+ }
16
+ if (number === 0 || !isFinite(number)) {
17
+ return number
18
+ }
19
+ return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number))
20
+ }
21
+ const maxSafeInteger = Math.pow(2, 53) - 1
22
+ const toLength = function (value) {
23
+ let len = toInteger(value)
24
+ return Math.min(Math.max(len, 0), maxSafeInteger)
25
+ }
26
+
27
+ // The length property of the from method is 1.
28
+ return function from(arrayLike /*, mapFn, thisArg */) {
29
+ // 1. Let C be the this value.
30
+ let C = this
31
+
32
+ // 2. Let items be ToObject(arrayLike).
33
+ let items = Object(arrayLike)
34
+
35
+ // 3. ReturnIfAbrupt(items).
36
+ if (arrayLike == null) {
37
+ throw new TypeError(
38
+ 'Array.from requires an array-like object - not null or undefined'
39
+ )
40
+ }
41
+
42
+ // 4. If mapfn is undefined, then let mapping be false.
43
+ const mapFn = arguments.length > 1 ? arguments[1] : void undefined
44
+ let T
45
+ if (typeof mapFn !== 'undefined') {
46
+ // 5. else
47
+ // 5. a If IsCallable(mapfn) is false, throw a TypeError exception.
48
+ if (!isCallable(mapFn)) {
49
+ throw new TypeError(
50
+ 'Array.from: when provided, the second argument must be a function'
51
+ )
52
+ }
53
+
54
+ // 5. b. If thisArg was supplied, let T be thisArg; else let T be undefined.
55
+ if (arguments.length > 2) {
56
+ T = arguments[2]
57
+ }
58
+ }
59
+
60
+ // 10. Let lenValue be Get(items, "length").
61
+ // 11. Let len be ToLength(lenValue).
62
+ const len = toLength(items.length)
63
+
64
+ // 13. If IsConstructor(C) is true, then
65
+ // 13. a. Let A be the result of calling the [[Construct]] internal method
66
+ // of C with an argument list containing the single item len.
67
+ // 14. a. Else, Let A be ArrayCreate(len).
68
+ const A = isCallable(C) ? Object(new C(len)) : new Array(len)
69
+
70
+ // 16. Let k be 0.
71
+ let k = 0
72
+ // 17. Repeat, while k < len… (also steps a - h)
73
+ let kValue
74
+ while (k < len) {
75
+ kValue = items[k]
76
+ if (mapFn) {
77
+ A[k] =
78
+ typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k)
79
+ } else {
80
+ A[k] = kValue
81
+ }
82
+ k += 1
83
+ }
84
+ // 18. Let putStatus be Put(A, "length", len, true).
85
+ A.length = len
86
+ // 20. Return A.
87
+ return A
88
+ }
89
+ })()
90
+ }
91
+
92
+ const { options } = context
93
+ const { element: rootElement } = context
94
+ const maxAnswerCount = options.maxAnswerCount,
95
+ isMultipleChoice = options.isMultipleChoice || false,
96
+ votingOptions = Array.from(hr$('input[name=multivoting]', rootElement)),
97
+ submit = hr$('input[type=submit]', rootElement)[0],
98
+ submitLabel = hr$('.js-voting-submit-button', rootElement)[0]
99
+ let counter = hr$('.js-voting-counter', rootElement),
100
+ selectedCheckboxes = 0
101
+
102
+ const countSelectedCheckboxes = function (event) {
103
+ console.log(submitLabel)
104
+ if (countCheckedCheckboxes() != 0) {
105
+ submit.disabled = false
106
+ submitLabel.classList.remove('-inactive')
107
+ } else {
108
+ submit.disabled = true
109
+ submitLabel.classList.add('-inactive')
110
+ }
111
+
112
+ if (selectedCheckboxes < maxAnswerCount) {
113
+ countSelectedCheckBoxesIfMaxHasNotReached(event)
114
+
115
+ if (selectedCheckboxes == maxAnswerCount) {
116
+ disableCheckboxesIfMaxHasReached()
117
+ }
118
+ } else {
119
+ enableCheckboxesIfMaxHasUndershot()
120
+ }
121
+ }
122
+
123
+ const isUnchecked = function (checkbox) {
124
+ return checkbox.checked == false
125
+ }
126
+
127
+ const isDisabled = function (checkbox) {
128
+ return checkbox.disabled == true
129
+ }
130
+
131
+ const isChecked = function (checkbox) {
132
+ return checkbox.checked == true
133
+ }
134
+
135
+ const countCheckedCheckboxes = function () {
136
+ let checkedOptions = votingOptions.filter(isChecked)
137
+ return checkedOptions.length
138
+ }
139
+
140
+ const countSelectedCheckBoxesIfMaxHasNotReached = function (event) {
141
+ if (event.target.checked === false) {
142
+ if (isMultipleChoice) {selectedCheckboxes = selectedCheckboxes - 1}
143
+ counter.innerHTML = '(' + selectedCheckboxes + '/' + maxAnswerCount + ')'
144
+ } else {
145
+ selectedCheckboxes = selectedCheckboxes + 1
146
+ counter.innerHTML = '(' + selectedCheckboxes + '/' + maxAnswerCount + ')'
147
+ }
148
+ }
149
+
150
+ const disableCheckboxesIfMaxHasReached = function () {
151
+ let uncheckedOptions = votingOptions.filter(isUnchecked)
152
+ uncheckedOptions.map(function (uncheckedOptions) {
153
+ if (isMultipleChoice) {
154
+ uncheckedOptions.disabled = true
155
+ let label = hr$('label[for=' + uncheckedOptions.id + ']')
156
+ label = label.item(0)
157
+ label.classList.add('-inactive')
158
+ }
159
+ })
160
+ }
161
+
162
+ const enableCheckboxesIfMaxHasUndershot = function () {
163
+ if (isMultipleChoice) {selectedCheckboxes = selectedCheckboxes - 1}
164
+ counter.innerHTML = '(' + selectedCheckboxes + '/' + maxAnswerCount + ')'
165
+ let disabledCheckboxes = votingOptions.filter(isDisabled)
166
+ disabledCheckboxes.map(function (disabledCheckboxes) {
167
+ disabledCheckboxes.disabled = false
168
+ let label = hr$('label[for=' + disabledCheckboxes.id + ']')
169
+ label = label.item(0)
170
+ label.classList.remove('-inactive')
171
+ })
172
+ }
173
+
174
+ const initVotingValidation = function () {
175
+ //if (isMultipleChoice) {
176
+ counter = counter.item(0)
177
+ submit.disabled = true
178
+
179
+ // Uncheck all checkboxes if User was faster than JS loading
180
+ for (let i = 0; i < votingOptions.length; i++) {
181
+ votingOptions[i].checked = false
182
+ }
183
+
184
+ for (let i = 0; i < votingOptions.length; i++) {
185
+ votingOptions[i].disabled = false
186
+ listen('click', countSelectedCheckboxes, votingOptions[i])
187
+ }
188
+ //}
189
+ }
190
+
191
+ initVotingValidation()
192
+ }
193
+ export default VotingValidator
@@ -9,7 +9,7 @@
9
9
  {{/if}}
10
10
  {{/unless}}
11
11
  >
12
- <div class="flex flex-row items-center w-full cursor-pointer ">
12
+ <div class="flex flex-row items-center w-full cursor-pointer{{#if _addClass}} {{_addClass}}{{/if}}">
13
13
  <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight form-checkbox"," checked:bg-white checked:border-form-highlight rounded-full form-radio",""]'}}"
14
14
  {{#if _required}}
15
15
  :class="{' border-form-highlight dark:border-form-highlight-dark': hideError(),'border-error dark:border-error-dark': hideDescription() }"
@@ -60,7 +60,7 @@
60
60
  {{/if}}
61
61
  {{/if~}}
62
62
  >
63
- <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm">
63
+ <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm{{#if _addClassLabel}} {{_addClassLabel}}{{/if}}">
64
64
  {{#if _hasBody}}
65
65
  {{decorator_body}}{{#unless _inGroup}}{{#if _required}}*{{/if}}{{/unless}}
66
66
  {{else}}
@@ -19,7 +19,7 @@
19
19
  {{/if}}
20
20
  {{/if}}
21
21
  </legend>
22
- <div class="flex flex-row flex-wrap gap-x-6 md:gap-x-7 gap-y-5" >
22
+ <div class="flex flex-row flex-wrap gap-x-6 md:gap-x-7 gap-y-5{{#if _addClassGroup}} {{_addClassGroup}}{{/if}}" >
23
23
  {{#each _items}}
24
24
  <div>
25
25
  {{> components/forms/components/choice
@@ -32,7 +32,9 @@
32
32
  _selected=this.selected
33
33
  _title=this.title
34
34
  _multipleChoice=../_multipleChoice
35
- _formId=../_formId
35
+ _formId=../_formId
36
+ _addClass=../_addClassChoice
37
+ _addClassLabel=../_addClassLabel
36
38
  }}
37
39
  </div>
38
40
  {{/each}}
@@ -66,7 +66,9 @@
66
66
  _items=this.options
67
67
  _required=this.isRequired
68
68
  _multipleChoice=../_multipleChoice
69
- _addClass=../_addClass
69
+ _addClassGroup=../_addClassGroup
70
+ _addClassLabel=../_addClassLabel
71
+ _addClassChoice=../_addClassChoice
70
72
  _errorMandatory="Bitte füllen Sie dieses Pflichtfeld aus"
71
73
  _formId=../_formId
72
74
  }}
@@ -0,0 +1,4 @@
1
+ <label class="{{#if _addClass}}{{_addClass}} {{/if}}float-right cursor-pointer has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-75 {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant='primary'}} {{> components/button/utilities/button_dimension_classes _size='lg'}}">
2
+ {{> components/base/image/icon _icon="send-ds" _addClass="w-5 h-5 fill-white dark:fill-text-dark "}}
3
+ <input type="submit" class="pl-2 cursor-pointer disabled:opacity-75 disabled:cursor-not-allowed" value="{{#if _label}}{{_label}}{{else}}{{loca 'form_button_submit'}}{{/if}}" {{#if _inactive}}disabled{{/if}}/>
4
+ </label>
@@ -1,12 +1,53 @@
1
1
  {{#with this.form}}
2
2
  {{#unless this.isVotingOver}}
3
-
4
- {{> components/voting/voting_header _title=../this.title _topline=../this.topline}}
5
-
6
- {{#if this.shorttext}}
7
- <p class="mt-4 text-base font-copy sm:text-lg sm:mt-5 dark:text-text-dark">{{this.shorttext}}</p>
8
- {{/if}}
9
-
3
+ {{#unless ../this.hasRedirect}}
4
+ <div class="js-load {{../_addClass}}"
5
+ data-hr-voting-ds='{"jsonURL":"{{this.jsonUrl}}", "errorMessages": {{this.errorMessages}} }'
6
+ data-hr-voting-validator-ds='{"isMultipleChoice": {{../this.isMultipleChoice}}, "minAnswerCount": 1, "maxAnswerCount": {{../this.maxAnswerCount}} }'
7
+ {{#if this.isSimpleSecured}}
8
+ data-hr-voting-cookie-checker-ds='{ "alreadyVotedHintText": "{{loca "votingform_already_voted_cookie_hint"}}" , "hideVotingResult": {{this.hideVotingResult}} , "votingId": "{{this.sophoraId}}" }'
9
+ id="{{this.sophoraId}}"
10
+ {{/if}}
11
+ >
12
+ {{else}}
13
+ <div class="js-load {{../_addClass}}"
14
+ {{#if this.is2FSecured}}data-hr-voting-ds='{"jsonURL":"{{this.jsonUrl}}", "errorMessages": {{this.errorMessages}} }'{{/if}}
15
+ data-hr-voting-validator-ds='{"isMultipleChoice": {{../this.isMultipleChoice}}, "minAnswerCount": 1, "maxAnswerCount": {{../this.maxAnswerCount}} }'
16
+ {{#if this.isSimpleSecured}}
17
+ data-hr-voting-cookie-checker-ds='{ "alreadyVotedHintText": "{{loca "votingform_already_voted_cookie_hint"}}" , "hideVotingResult": {{this.hideVotingResult}} , "votingId": "{{this.sophoraId}}" }'
18
+ id="{{this.sophoraId}}"
19
+ {{/if}}
20
+ >
21
+ {{/unless}}
22
+ <div class="js-voting-wrapper">
23
+ <form class="js-votingForm"
24
+ action="{{this.url}}"
25
+ method="post"
26
+ enctype="application/x-www-form-urlencoded"
27
+ accept-charset="utf-8"
28
+ autocomplete="off"
29
+ >
30
+ {{> components/voting/components/voting_header _title=../this.title _topline=../this.topline}}
31
+
32
+ <div class="c-voting-form__bottomWrapper">
33
+ {{#if this.shorttext}}
34
+ <p class="mt-4 text-base font-copy sm:text-lg sm:mt-5 dark:text-text-dark">{{this.shorttext}}</p>
35
+ {{/if}}
36
+
37
+ <div class="w-full mt-6 text-xs text-right sm:mt-12 font-headingSerif sm:text-sm text-gray-scorpion dark:text-text-dark">
38
+ {{#if ../this.isMultipleChoice}}
39
+ {{loca "votingform_open_answers_text" ../this.maxAnswerCount}}
40
+ {{else}}
41
+ {{loca "votingform_single_answer_text"}}
42
+ {{/if}}
43
+ <span class="block float-right w-8 js-voting-counter">(0/{{../this.maxAnswerCount}})</span>
44
+ </div>
45
+ {{> components/forms/components/fields _multipleChoice=../this.isMultipleChoice _addClassGroup="!flex-col mt-5" _addClassChoice="has-[input:checked]:outline outline-2 outline-blue-science-hex bg-white p-4" _addClassLabel="!text-base sm:!text-lg md:!text-lg"}}
46
+ {{> components/voting/components/voting_submit _label="Abstimmen" _addClass="-inactive js-voting-submit-button"}}
47
+ </div>
48
+ </form>
49
+ </div>
50
+ </div>
10
51
  {{else}}
11
52
  {{> components/voting/voting_result _isVotingOver=true _title=../this.title _topline=../this.topline}}
12
53
  {{/unless}}
@@ -1,5 +1,5 @@
1
1
  {{#unless _isResultOnRedirectPage}}
2
- {{> components/voting/voting_header _title=_title _topline=_topline}}
2
+ {{> components/voting/components/voting_header _title=_title _topline=_topline}}
3
3
  {{/unless}}
4
4
 
5
5
  {{#if _hideVotingResult}}
@@ -28,13 +28,13 @@
28
28
  </div>
29
29
  {{/each}}
30
30
 
31
- {{#unless this.showAbsoluteResult}}
31
+ {{!#unless this.showAbsoluteResult}}
32
32
  {{#if this.showVoteResult}}
33
33
  <p class="clear-both text-xs pt-7 sm:pt-9 font-headingSerif sm:text-sm text-gray-scorpion">
34
34
  {{loca "votingform_vote_result"}}{{this.summarizedResult}}
35
35
  </p>
36
36
  {{/if}}
37
- {{/unless}}
37
+ {{!/unless}}
38
38
  {{/if}}
39
39
 
40
40
  {{#if _isVotingOver}}
@@ -9,7 +9,7 @@
9
9
  {{/if}}
10
10
  {{/unless}}
11
11
  >
12
- <div class="flex flex-row items-center w-full cursor-pointer ">
12
+ <div class="flex flex-row items-center w-full cursor-pointer{{#if _addClass}} {{_addClass}}{{/if}}">
13
13
  <input class="relative self-start flex-shrink-0 w-6 h-6 bg-white dark:bg-black border appearance-none cursor-pointer border-form-highlight dark:border-form-highlight-dark {{~inline-switch _type '["checkbox","radio"]' '[" checked:bg-form-highlight checked:border-form-highlight form-checkbox"," checked:bg-white checked:border-form-highlight rounded-full form-radio",""]'}}"
14
14
  {{#if _required}}
15
15
  :class="{' border-form-highlight dark:border-form-highlight-dark': hideError(),'border-error dark:border-error-dark': hideDescription() }"
@@ -60,7 +60,7 @@
60
60
  {{/if}}
61
61
  {{/if~}}
62
62
  >
63
- <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm">
63
+ <label for="input{{getRandom}}" class="min-h-6 pt-0.5 items-center justify-center pl-2 cursor-pointer md:pl-3 text-text dark:text-text-dark md:text-base text-sm{{#if _addClassLabel}} {{_addClassLabel}}{{/if}}">
64
64
  {{#if _hasBody}}
65
65
  {{decorator_body}}{{#unless _inGroup}}{{#if _required}}*{{/if}}{{/unless}}
66
66
  {{else}}
@@ -19,7 +19,7 @@
19
19
  {{/if}}
20
20
  {{/if}}
21
21
  </legend>
22
- <div class="flex flex-row flex-wrap gap-x-6 md:gap-x-7 gap-y-5" >
22
+ <div class="flex flex-row flex-wrap gap-x-6 md:gap-x-7 gap-y-5{{#if _addClassGroup}} {{_addClassGroup}}{{/if}}" >
23
23
  {{#each _items}}
24
24
  <div>
25
25
  {{> components/forms/components/choice
@@ -32,7 +32,9 @@
32
32
  _selected=this.selected
33
33
  _title=this.title
34
34
  _multipleChoice=../_multipleChoice
35
- _formId=../_formId
35
+ _formId=../_formId
36
+ _addClass=../_addClassChoice
37
+ _addClassLabel=../_addClassLabel
36
38
  }}
37
39
  </div>
38
40
  {{/each}}
@@ -66,7 +66,9 @@
66
66
  _items=this.options
67
67
  _required=this.isRequired
68
68
  _multipleChoice=../_multipleChoice
69
- _addClass=../_addClass
69
+ _addClassGroup=../_addClassGroup
70
+ _addClassLabel=../_addClassLabel
71
+ _addClassChoice=../_addClassChoice
70
72
  _errorMandatory="Bitte füllen Sie dieses Pflichtfeld aus"
71
73
  _formId=../_formId
72
74
  }}
@@ -0,0 +1,4 @@
1
+ <label class="{{#if _addClass}}{{_addClass}} {{/if}}float-right cursor-pointer has-[input:disabled]:cursor-not-allowed has-[input:disabled]:opacity-75 {{> components/button/utilities/button_base_classes}} {{> components/button/utilities/button_variation_classes _variant='primary'}} {{> components/button/utilities/button_dimension_classes _size='lg'}}">
2
+ {{> components/base/image/icon _icon="send-ds" _addClass="w-5 h-5 fill-white dark:fill-text-dark "}}
3
+ <input type="submit" class="pl-2 cursor-pointer disabled:opacity-75 disabled:cursor-not-allowed" value="{{#if _label}}{{_label}}{{else}}{{loca 'form_button_submit'}}{{/if}}" {{#if _inactive}}disabled{{/if}}/>
4
+ </label>
@@ -1,12 +1,53 @@
1
1
  {{#with this.form}}
2
2
  {{#unless this.isVotingOver}}
3
-
4
- {{> components/voting/voting_header _title=../this.title _topline=../this.topline}}
5
-
6
- {{#if this.shorttext}}
7
- <p class="mt-4 text-base font-copy sm:text-lg sm:mt-5 dark:text-text-dark">{{this.shorttext}}</p>
8
- {{/if}}
9
-
3
+ {{#unless ../this.hasRedirect}}
4
+ <div class="js-load {{../_addClass}}"
5
+ data-hr-voting-ds='{"jsonURL":"{{this.jsonUrl}}", "errorMessages": {{this.errorMessages}} }'
6
+ data-hr-voting-validator-ds='{"isMultipleChoice": {{../this.isMultipleChoice}}, "minAnswerCount": 1, "maxAnswerCount": {{../this.maxAnswerCount}} }'
7
+ {{#if this.isSimpleSecured}}
8
+ data-hr-voting-cookie-checker-ds='{ "alreadyVotedHintText": "{{loca "votingform_already_voted_cookie_hint"}}" , "hideVotingResult": {{this.hideVotingResult}} , "votingId": "{{this.sophoraId}}" }'
9
+ id="{{this.sophoraId}}"
10
+ {{/if}}
11
+ >
12
+ {{else}}
13
+ <div class="js-load {{../_addClass}}"
14
+ {{#if this.is2FSecured}}data-hr-voting-ds='{"jsonURL":"{{this.jsonUrl}}", "errorMessages": {{this.errorMessages}} }'{{/if}}
15
+ data-hr-voting-validator-ds='{"isMultipleChoice": {{../this.isMultipleChoice}}, "minAnswerCount": 1, "maxAnswerCount": {{../this.maxAnswerCount}} }'
16
+ {{#if this.isSimpleSecured}}
17
+ data-hr-voting-cookie-checker-ds='{ "alreadyVotedHintText": "{{loca "votingform_already_voted_cookie_hint"}}" , "hideVotingResult": {{this.hideVotingResult}} , "votingId": "{{this.sophoraId}}" }'
18
+ id="{{this.sophoraId}}"
19
+ {{/if}}
20
+ >
21
+ {{/unless}}
22
+ <div class="js-voting-wrapper">
23
+ <form class="js-votingForm"
24
+ action="{{this.url}}"
25
+ method="post"
26
+ enctype="application/x-www-form-urlencoded"
27
+ accept-charset="utf-8"
28
+ autocomplete="off"
29
+ >
30
+ {{> components/voting/components/voting_header _title=../this.title _topline=../this.topline}}
31
+
32
+ <div class="c-voting-form__bottomWrapper">
33
+ {{#if this.shorttext}}
34
+ <p class="mt-4 text-base font-copy sm:text-lg sm:mt-5 dark:text-text-dark">{{this.shorttext}}</p>
35
+ {{/if}}
36
+
37
+ <div class="w-full mt-6 text-xs text-right sm:mt-12 font-headingSerif sm:text-sm text-gray-scorpion dark:text-text-dark">
38
+ {{#if ../this.isMultipleChoice}}
39
+ {{loca "votingform_open_answers_text" ../this.maxAnswerCount}}
40
+ {{else}}
41
+ {{loca "votingform_single_answer_text"}}
42
+ {{/if}}
43
+ <span class="block float-right w-8 js-voting-counter">(0/{{../this.maxAnswerCount}})</span>
44
+ </div>
45
+ {{> components/forms/components/fields _multipleChoice=../this.isMultipleChoice _addClassGroup="!flex-col mt-5" _addClassChoice="has-[input:checked]:outline outline-2 outline-blue-science-hex bg-white p-4" _addClassLabel="!text-base sm:!text-lg md:!text-lg"}}
46
+ {{> components/voting/components/voting_submit _label="Abstimmen" _addClass="-inactive js-voting-submit-button"}}
47
+ </div>
48
+ </form>
49
+ </div>
50
+ </div>
10
51
  {{else}}
11
52
  {{> components/voting/voting_result _isVotingOver=true _title=../this.title _topline=../this.topline}}
12
53
  {{/unless}}
@@ -1,5 +1,5 @@
1
1
  {{#unless _isResultOnRedirectPage}}
2
- {{> components/voting/voting_header _title=_title _topline=_topline}}
2
+ {{> components/voting/components/voting_header _title=_title _topline=_topline}}
3
3
  {{/unless}}
4
4
 
5
5
  {{#if _hideVotingResult}}
@@ -28,13 +28,13 @@
28
28
  </div>
29
29
  {{/each}}
30
30
 
31
- {{#unless this.showAbsoluteResult}}
31
+ {{!#unless this.showAbsoluteResult}}
32
32
  {{#if this.showVoteResult}}
33
33
  <p class="clear-both text-xs pt-7 sm:pt-9 font-headingSerif sm:text-sm text-gray-scorpion">
34
34
  {{loca "votingform_vote_result"}}{{this.summarizedResult}}
35
35
  </p>
36
36
  {{/if}}
37
- {{/unless}}
37
+ {{!/unless}}
38
38
  {{/if}}
39
39
 
40
40
  {{#if _isVotingOver}}
package/package.json CHANGED
@@ -6,7 +6,7 @@
6
6
  "license": "MIT",
7
7
  "main": "dist/index.js",
8
8
  "repository": "https://github.com/szuelch/hr-design-system-handlebars",
9
- "version": "1.113.11",
9
+ "version": "1.113.12",
10
10
  "scripts": {
11
11
  "test": "echo \"Error: no test specified\" && exit 1",
12
12
  "storybook": "storybook dev -p 6006 public",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",
@@ -196,6 +196,7 @@
196
196
  "votingform_text_error": "Ihre Stimme konnte nicht gezählt werden, weil ein Fehler aufgetreten ist. Bitte versuchen Sie es später wieder.",
197
197
  "votingform_text_success": "Ihre Stimme wurde gezählt.",
198
198
  "votingform_open_answers_text": "Bis zu {0} Antworten möglich",
199
+ "votingform_single_answer_text": "Nur eine Antwort ist möglich",
199
200
  "votingform2F_title_success": "Vielen Dank für Ihre Stimme.",
200
201
  "votingform2F_text_success": "Eine E-Mail zur Bestätigung Ihrer Abstimmung wurde Ihnen geschickt. Bitte prüfen Sie gegebenenfalls auch Ihren Spam-Ordner.",
201
202
  "votingform2F_privacy_protection_disclaimer": "Ich stimme der Verarbeitung meiner E-Mail-Adresse zum Zweck der Teilnahme sowie der <a href=\"https://hr.de/datenschutz\" class=\"{nuc https://hr.de/datenschutz nuc}link unbreakable\" target=\"_blank\"><span class=\"unbreakable\">Datenschutzerklärung<svg class=\"icon icon--primary icon--textRight\" role=\"presentation\"><use xlink:href=\"{<% hrcms.delivery.current.assetBaseUrl %>}base/icons/icons/svgmap.min.svg#extern\"/></svg></span></a> des hr zu.",