@webwriter/quiz 1.0.5 → 1.0.7

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 (128) hide show
  1. package/LICENSE +6 -6
  2. package/custom.d.ts +175 -175
  3. package/dist/widgets/webwriter-choice-item.css +1 -1
  4. package/dist/widgets/webwriter-choice-item.js +1886 -802
  5. package/dist/widgets/webwriter-choice.css +1 -1
  6. package/dist/widgets/webwriter-choice.js +1943 -846
  7. package/dist/widgets/webwriter-cloze-gap.css +1 -1
  8. package/dist/widgets/webwriter-cloze-gap.js +1988 -902
  9. package/dist/widgets/webwriter-cloze.css +1 -1
  10. package/dist/widgets/webwriter-cloze.js +1833 -748
  11. package/dist/widgets/webwriter-mark.css +1 -1
  12. package/dist/widgets/webwriter-mark.js +1848 -762
  13. package/dist/widgets/webwriter-order-item.css +1 -1
  14. package/dist/widgets/webwriter-order-item.js +1884 -799
  15. package/dist/widgets/webwriter-order.css +1 -1
  16. package/dist/widgets/webwriter-order.js +1882 -790
  17. package/dist/widgets/webwriter-pairing-item.css +1 -1
  18. package/dist/widgets/webwriter-pairing-item.js +1718 -614
  19. package/dist/widgets/webwriter-pairing.css +1 -1
  20. package/dist/widgets/webwriter-pairing.js +1873 -781
  21. package/dist/widgets/webwriter-quiz.css +1 -1
  22. package/dist/widgets/webwriter-quiz.js +2241 -1026
  23. package/dist/widgets/webwriter-speech.css +1 -1
  24. package/dist/widgets/webwriter-speech.js +2179 -961
  25. package/dist/widgets/webwriter-task-explainer.css +1 -1
  26. package/dist/widgets/webwriter-task-explainer.js +1704 -600
  27. package/dist/widgets/webwriter-task-hint.css +1 -1
  28. package/dist/widgets/webwriter-task-hint.js +1695 -591
  29. package/dist/widgets/webwriter-task-prompt.css +1 -1
  30. package/dist/widgets/webwriter-task-prompt.js +1670 -566
  31. package/dist/widgets/webwriter-task.css +1 -1
  32. package/dist/widgets/webwriter-task.js +2361 -1143
  33. package/dist/widgets/webwriter-text.css +1 -1
  34. package/dist/widgets/webwriter-text.js +1876 -770
  35. package/icon.svg +1 -0
  36. package/lit-localize.json +15 -0
  37. package/localization/bg.xlf +54 -0
  38. package/localization/cs.xlf +54 -0
  39. package/localization/da.xlf +54 -0
  40. package/localization/de.xlf +54 -0
  41. package/localization/el.xlf +54 -0
  42. package/localization/es.xlf +54 -0
  43. package/localization/et.xlf +54 -0
  44. package/localization/fi.xlf +54 -0
  45. package/localization/fr.xlf +54 -0
  46. package/localization/generated/bg.ts +25 -0
  47. package/localization/generated/cs.ts +25 -0
  48. package/localization/generated/da.ts +25 -0
  49. package/localization/generated/de.ts +25 -0
  50. package/localization/generated/el.ts +25 -0
  51. package/localization/generated/es.ts +25 -0
  52. package/localization/generated/et.ts +25 -0
  53. package/localization/generated/fi.ts +25 -0
  54. package/localization/generated/fr.ts +25 -0
  55. package/localization/generated/hu.ts +25 -0
  56. package/localization/generated/id.ts +25 -0
  57. package/localization/generated/index.js +3 -0
  58. package/localization/generated/it.ts +25 -0
  59. package/localization/generated/ja.ts +25 -0
  60. package/localization/generated/ko.ts +25 -0
  61. package/localization/generated/locale-codes.js +79 -0
  62. package/localization/generated/lt.ts +25 -0
  63. package/localization/generated/lv.ts +25 -0
  64. package/localization/generated/nb.ts +25 -0
  65. package/localization/generated/nl.ts +25 -0
  66. package/localization/generated/pl.ts +25 -0
  67. package/localization/generated/pt-BR.ts +25 -0
  68. package/localization/generated/pt-PT.ts +25 -0
  69. package/localization/generated/ro.ts +25 -0
  70. package/localization/generated/ru.ts +25 -0
  71. package/localization/generated/sk.ts +25 -0
  72. package/localization/generated/sl.ts +25 -0
  73. package/localization/generated/sv.ts +25 -0
  74. package/localization/generated/tr.ts +25 -0
  75. package/localization/generated/uk.ts +25 -0
  76. package/localization/generated/zh-hans.ts +25 -0
  77. package/localization/hu.xlf +54 -0
  78. package/localization/id.xlf +54 -0
  79. package/localization/it.xlf +54 -0
  80. package/localization/ja.xlf +54 -0
  81. package/localization/ko.xlf +54 -0
  82. package/localization/lt.xlf +54 -0
  83. package/localization/lv.xlf +54 -0
  84. package/localization/nb.xlf +54 -0
  85. package/localization/nl.xlf +54 -0
  86. package/localization/pl.xlf +54 -0
  87. package/localization/pt-BR.xlf +54 -0
  88. package/localization/pt-PT.xlf +54 -0
  89. package/localization/ro.xlf +54 -0
  90. package/localization/ru.xlf +54 -0
  91. package/localization/sk.xlf +54 -0
  92. package/localization/sl.xlf +54 -0
  93. package/localization/sv.xlf +54 -0
  94. package/localization/tr.xlf +54 -0
  95. package/localization/uk.xlf +54 -0
  96. package/localization/zh-hans.xlf +54 -0
  97. package/package.json +281 -193
  98. package/src/lib/combobox.ts +455 -455
  99. package/src/lib/highlighter-fill.svg +5 -5
  100. package/src/snippets/Beispiel-Choice.html +57 -0
  101. package/src/snippets/Beispiel-Mark.html +14 -0
  102. package/src/snippets/Beispiel-Order.html +52 -0
  103. package/src/snippets/Beispiel-Text.html +20 -0
  104. package/src/snippets/choice.html +7 -7
  105. package/src/snippets/cloze.html +3 -3
  106. package/src/snippets/mark.html +3 -3
  107. package/src/snippets/order.html +7 -7
  108. package/src/snippets/pairing.html +9 -9
  109. package/src/snippets/speech.html +3 -3
  110. package/src/snippets/text.html +3 -3
  111. package/src/snippets/wordsearch.html +3 -3
  112. package/src/widgets/webwriter-choice-item.ts +250 -250
  113. package/src/widgets/webwriter-choice.ts +314 -309
  114. package/src/widgets/webwriter-cloze-gap.ts +215 -216
  115. package/src/widgets/webwriter-cloze.ts +135 -135
  116. package/src/widgets/webwriter-mark.ts +431 -434
  117. package/src/widgets/webwriter-order-item.ts +437 -436
  118. package/src/widgets/webwriter-order.ts +284 -279
  119. package/src/widgets/webwriter-pairing-item.ts +160 -155
  120. package/src/widgets/webwriter-pairing.ts +192 -187
  121. package/src/widgets/webwriter-quiz.ts +281 -280
  122. package/src/widgets/webwriter-speech.ts +272 -267
  123. package/src/widgets/webwriter-task-explainer.ts +42 -37
  124. package/src/widgets/webwriter-task-hint.ts +22 -16
  125. package/src/widgets/webwriter-task-prompt.ts +23 -17
  126. package/src/widgets/webwriter-task.ts +546 -543
  127. package/src/widgets/webwriter-text.ts +135 -130
  128. package/tsconfig.json +6 -6
@@ -1,156 +1,161 @@
1
- import {html, css} from "lit"
2
- import {LitElementWw, option} from "@webwriter/lit"
3
- import {customElement, property} from "lit/decorators.js"
4
- import "@shoelace-style/shoelace/dist/themes/light.css"
5
-
6
- declare global {interface HTMLElementTagNameMap {
7
- "webwriter-pairing-item": WebwriterPairingItem;
8
- }}
9
-
10
- @customElement("webwriter-pairing-item")
11
- export class WebwriterPairingItem extends LitElementWw {
12
-
13
- tabIndex = -1
14
-
15
- static styles = css`
16
-
17
- :host {
18
- aspect-ratio: 1;
19
- min-width: 125px;
20
- max-width: 350px;
21
- min-height: 125px;
22
- max-height: 350px;
23
- position: relative;
24
- overflow: hidden;
25
- overflow-y: auto;
26
- scrollbar-width: thin;
27
- resize: both;
28
- border: 2px solid var(--sl-color-gray-500);
29
- border-radius: 5px;
30
- background: white;
31
- }
32
-
33
- slot {
34
- width: 100%;
35
- height: 100%;
36
- display: flex;
37
- box-sizing: border-box;
38
- position: relative;
39
- font-size: 0.8em;
40
- z-index: 1;
41
- }
42
-
43
- :host([droppreview]) slot {
44
- background: lightblue;
45
- }
46
-
47
- ::slotted(*) {
48
- height: 100%;
49
- width: 100%;
50
- box-sizing: border-box;
51
- }
52
-
53
- ::slotted(:not(:is(picture, audio, video, img, iframe))) {
54
- padding: 5px !important;
55
- }
56
-
57
- #handle {
58
- box-sizing: border-box;
59
- border-radius: 2px;
60
- position: absolute;
61
- left: 1px;
62
- bottom: 1px;
63
- width: 20px;
64
- height: 30px;
65
- display: inline-block;
66
- overflow: hidden;
67
- line-height: 5px;
68
- padding: 6px 4px;
69
- cursor: move;
70
- vertical-align: middle;
71
- font-size: 12px;
72
- font-family: sans-serif;
73
- letter-spacing: 2px;
74
- color: #cccccc;
75
- text-shadow: 1px 0 1px black;
76
- font-weight: 600;
77
- opacity: 0.95;
78
- z-index: 100;
79
- }
80
- #handle::after {
81
- content: '.. .. ..';
82
- }
83
-
84
- :host(:not([contenteditable=true]):not([contenteditable=""])) .author-only {
85
- display: none !important;
86
- }
87
-
88
- #click-overlay {
89
- position: absolute;
90
- top: 0;
91
- width: 100%;
92
- height: 100%;
93
- cursor: pointer;
94
- }
95
-
96
- #click-overlay:hover {
97
- background: var(--sl-color-primary-600);
98
- opacity: 10%;
99
- }
100
-
101
- :host(.ww-selected) #click-overlay {
102
- display: none;
103
- }
104
- `
105
-
106
- @property({attribute: true, reflect: true, converter: {toAttribute: (v: boolean) => v? "true": "false", fromAttribute: (attr: string) => attr === "true"}})
107
- accessor draggable = true
108
-
109
- @property({type: Boolean, attribute: true, reflect: true})
110
- accessor dropPreview = false
111
-
112
- connectedCallback(): void {
113
- super.connectedCallback()
114
- this.addEventListener("dragstart", e => {
115
- if(e.target !== this) {
116
- e.preventDefault()
117
- }
118
- // this.dropPreview = undefined
119
- e.dataTransfer.setData("text/html", this.outerHTML)
120
- e.dataTransfer.setData("text/plain", this.id)
121
- // setTimeout(() => this.baseEl.style.visibility = "hidden")
122
- e.stopPropagation()
123
- })
124
- this.addEventListener("drop", e => {
125
- e.stopPropagation()
126
- const id = e.dataTransfer.getData("text/plain")
127
- const el = document.querySelector(`webwriter-pairing-item#${id}`)
128
- if(!el) {
129
- const html = e.dataTransfer.getData("text/html")
130
- this.parentElement.insertAdjacentHTML("beforeend", html)
131
- }
132
- else if(el && !this.contains(el)) {
133
- this.parentElement.insertAdjacentElement("beforeend", el)
134
- }
135
- this.dispatchEvent(new CustomEvent("ww-pairwith", {bubbles: true, detail: {with: id}}))
136
- }, {passive: true})
137
- this.addEventListener("dragover", e => {
138
- this.dropPreview = true
139
- e.preventDefault()
140
- e.stopImmediatePropagation()
141
- })
142
- this.addEventListener("dragleave", () => this.dropPreview = false, {passive: true})
143
- document.addEventListener("dragend", (e) => {
144
- // (e.target as HTMLElement)?.remove()
145
- this.dropPreview = false
146
- }, {passive: true})
147
- }
148
-
149
- render() {
150
- return html`
151
- <slot></slot>
152
- <div class="author-only" id="handle" @click=${() => this.dispatchEvent(new FocusEvent("focus"))}></div>
153
-
154
- `
155
- }
1
+ import {html, css} from "lit"
2
+ import {LitElementWw, option} from "@webwriter/lit"
3
+ import {customElement, property} from "lit/decorators.js"
4
+ import "@shoelace-style/shoelace/dist/themes/light.css"
5
+
6
+ import LOCALIZE from "../../localization/generated"
7
+ import {msg} from "@lit/localize"
8
+
9
+ declare global {interface HTMLElementTagNameMap {
10
+ "webwriter-pairing-item": WebwriterPairingItem;
11
+ }}
12
+
13
+ @customElement("webwriter-pairing-item")
14
+ export class WebwriterPairingItem extends LitElementWw {
15
+
16
+ localize = LOCALIZE
17
+
18
+ tabIndex = -1
19
+
20
+ static styles = css`
21
+
22
+ :host {
23
+ aspect-ratio: 1;
24
+ min-width: 125px;
25
+ max-width: 350px;
26
+ min-height: 125px;
27
+ max-height: 350px;
28
+ position: relative;
29
+ overflow: hidden;
30
+ overflow-y: auto;
31
+ scrollbar-width: thin;
32
+ resize: both;
33
+ border: 2px solid var(--sl-color-gray-500);
34
+ border-radius: 5px;
35
+ background: white;
36
+ }
37
+
38
+ slot {
39
+ width: 100%;
40
+ height: 100%;
41
+ display: flex;
42
+ box-sizing: border-box;
43
+ position: relative;
44
+ font-size: 0.8em;
45
+ z-index: 1;
46
+ }
47
+
48
+ :host([droppreview]) slot {
49
+ background: lightblue;
50
+ }
51
+
52
+ ::slotted(*) {
53
+ height: 100%;
54
+ width: 100%;
55
+ box-sizing: border-box;
56
+ }
57
+
58
+ ::slotted(:not(:is(picture, audio, video, img, iframe))) {
59
+ padding: 5px !important;
60
+ }
61
+
62
+ #handle {
63
+ box-sizing: border-box;
64
+ border-radius: 2px;
65
+ position: absolute;
66
+ left: 1px;
67
+ bottom: 1px;
68
+ width: 20px;
69
+ height: 30px;
70
+ display: inline-block;
71
+ overflow: hidden;
72
+ line-height: 5px;
73
+ padding: 6px 4px;
74
+ cursor: move;
75
+ vertical-align: middle;
76
+ font-size: 12px;
77
+ font-family: sans-serif;
78
+ letter-spacing: 2px;
79
+ color: #cccccc;
80
+ text-shadow: 1px 0 1px black;
81
+ font-weight: 600;
82
+ opacity: 0.95;
83
+ z-index: 100;
84
+ }
85
+ #handle::after {
86
+ content: '.. .. ..';
87
+ }
88
+
89
+ :host(:not([contenteditable=true]):not([contenteditable=""])) .author-only {
90
+ display: none !important;
91
+ }
92
+
93
+ #click-overlay {
94
+ position: absolute;
95
+ top: 0;
96
+ width: 100%;
97
+ height: 100%;
98
+ cursor: pointer;
99
+ }
100
+
101
+ #click-overlay:hover {
102
+ background: var(--sl-color-primary-600);
103
+ opacity: 10%;
104
+ }
105
+
106
+ :host(.ww-selected) #click-overlay {
107
+ display: none;
108
+ }
109
+ `
110
+
111
+ @property({attribute: true, reflect: true, converter: {toAttribute: (v: boolean) => v? "true": "false", fromAttribute: (attr: string) => attr === "true"}})
112
+ accessor draggable = true
113
+
114
+ @property({type: Boolean, attribute: true, reflect: true})
115
+ accessor dropPreview = false
116
+
117
+ connectedCallback(): void {
118
+ super.connectedCallback()
119
+ this.addEventListener("dragstart", e => {
120
+ if(e.target !== this) {
121
+ e.preventDefault()
122
+ }
123
+ // this.dropPreview = undefined
124
+ e.dataTransfer.setData("text/html", this.outerHTML)
125
+ e.dataTransfer.setData("text/plain", this.id)
126
+ // setTimeout(() => this.baseEl.style.visibility = "hidden")
127
+ e.stopPropagation()
128
+ })
129
+ this.addEventListener("drop", e => {
130
+ e.stopPropagation()
131
+ const id = e.dataTransfer.getData("text/plain")
132
+ const el = document.querySelector(`webwriter-pairing-item#${id}`)
133
+ if(!el) {
134
+ const html = e.dataTransfer.getData("text/html")
135
+ this.parentElement.insertAdjacentHTML("beforeend", html)
136
+ }
137
+ else if(el && !this.contains(el)) {
138
+ this.parentElement.insertAdjacentElement("beforeend", el)
139
+ }
140
+ this.dispatchEvent(new CustomEvent("ww-pairwith", {bubbles: true, detail: {with: id}}))
141
+ }, {passive: true})
142
+ this.addEventListener("dragover", e => {
143
+ this.dropPreview = true
144
+ e.preventDefault()
145
+ e.stopImmediatePropagation()
146
+ })
147
+ this.addEventListener("dragleave", () => this.dropPreview = false, {passive: true})
148
+ document.addEventListener("dragend", (e) => {
149
+ // (e.target as HTMLElement)?.remove()
150
+ this.dropPreview = false
151
+ }, {passive: true})
152
+ }
153
+
154
+ render() {
155
+ return html`
156
+ <slot></slot>
157
+ <div class="author-only" id="handle" @click=${() => this.dispatchEvent(new FocusEvent("focus"))}></div>
158
+
159
+ `
160
+ }
156
161
  }