@tacc/core-styles 0.10.0 → 1.0.0

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 (275) hide show
  1. package/README.md +107 -85
  2. package/dist/branding_logos.css +1 -1
  3. package/dist/components/README.css +1 -1
  4. package/dist/components/bootstrap/bootstrap--form.demo.css +1 -0
  5. package/dist/components/bootstrap/bootstrap--modal.demo.css +1 -0
  6. package/dist/components/bootstrap/demo.css +1 -0
  7. package/dist/components/bootstrap.container.css +1 -1
  8. package/dist/components/bootstrap.css +1 -0
  9. package/dist/components/bootstrap.figure.css +1 -1
  10. package/dist/components/bootstrap.form.css +1 -1
  11. package/dist/components/bootstrap.modal.css +1 -1
  12. package/dist/components/bootstrap.pagination.css +1 -1
  13. package/dist/components/c-button/demo.css +1 -0
  14. package/dist/components/c-button.css +1 -1
  15. package/dist/components/c-callout.css +1 -1
  16. package/dist/components/c-card.css +1 -1
  17. package/dist/components/c-data-list.css +1 -1
  18. package/dist/components/c-footer.css +1 -1
  19. package/dist/components/c-form.css +1 -0
  20. package/dist/components/c-image-map.css +1 -1
  21. package/dist/components/c-image-map.skin.css +1 -1
  22. package/dist/components/c-image-map.structure.css +1 -1
  23. package/dist/components/c-message.css +1 -1
  24. package/dist/components/c-nav.css +1 -1
  25. package/dist/components/c-page.css +1 -1
  26. package/dist/components/c-recognition.css +1 -1
  27. package/dist/components/c-see-all-link.css +1 -1
  28. package/dist/components/c-show-more.css +1 -1
  29. package/dist/components/cortal.icon.css +1 -1
  30. package/dist/components/cortal.icon.font.css +1 -1
  31. package/dist/components/django-cms-forms.css +1 -0
  32. package/dist/components/django-cms-forms.hacks.css +1 -0
  33. package/dist/components/mui.tabs.css +1 -0
  34. package/dist/core-styles.base.css +4 -0
  35. package/dist/core-styles.cms.css +2 -0
  36. package/dist/core-styles.demo.css +2 -0
  37. package/dist/core-styles.header.css +2 -0
  38. package/dist/core-styles.portal.css +2 -0
  39. package/dist/core-styles.settings.css +3 -0
  40. package/dist/elements/README.css +1 -1
  41. package/dist/elements/bootstrap.css +1 -1
  42. package/dist/elements/demo.css +1 -0
  43. package/dist/elements/form.cms.css +1 -1
  44. package/dist/elements/html-elements.cms.css +1 -1
  45. package/dist/elements/html-elements.css +1 -0
  46. package/dist/elements/links/demo.css +1 -0
  47. package/dist/elements/links.css +1 -1
  48. package/dist/elements/table--basic.css +1 -1
  49. package/dist/elements/table--nested.css +1 -1
  50. package/dist/elements/table.css +1 -1
  51. package/dist/elements/tacc-search-bar.css +1 -1
  52. package/dist/fonts/BentonSans-Black.otf +0 -0
  53. package/dist/fonts/BentonSans-RegularItalic.otf +0 -0
  54. package/dist/fractal.server.refresh.css +1 -1
  55. package/dist/generics/README.css +1 -1
  56. package/dist/generics/fonts.css +1 -1
  57. package/dist/objects/README.css +1 -1
  58. package/dist/objects/o-fixed-header-table/demo.css +1 -0
  59. package/dist/objects/o-fixed-header-table.css +1 -1
  60. package/dist/objects/o-flex-item-table-wrap/demo.css +1 -0
  61. package/dist/objects/o-flex-item-table-wrap.css +1 -1
  62. package/dist/objects/o-float-content.css +1 -1
  63. package/dist/objects/o-grid.css +1 -1
  64. package/dist/objects/o-offset-content.css +1 -1
  65. package/dist/objects/o-section.css +1 -1
  66. package/dist/objects/o-site.css +1 -1
  67. package/dist/objects/o-table-wrap/demo.basic.css +1 -0
  68. package/dist/objects/o-table-wrap/demo.extra.css +1 -0
  69. package/dist/objects/o-table-wrap/extra.flexible-horz.css +1 -0
  70. package/dist/objects/o-table-wrap/extra.overflow-hidden.css +1 -0
  71. package/dist/objects/o-table-wrap/extra.overflow-scroll.css +1 -0
  72. package/dist/objects/o-table-wrap/o-table-wrap--flexible-horz.css +1 -0
  73. package/dist/objects/o-table-wrap/o-table-wrap--flexible-vert.css +1 -0
  74. package/dist/objects/o-table-wrap/o-table-wrap--overflow-hidden.css +1 -0
  75. package/dist/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.css +1 -0
  76. package/dist/objects/o-table-wrap/o-table-wrap--overflow-scroll.css +1 -0
  77. package/dist/objects/o-table-wrap.css +1 -0
  78. package/dist/settings/README.css +1 -1
  79. package/dist/settings/border.css +1 -1
  80. package/dist/settings/color.css +1 -1
  81. package/dist/settings/font.css +1 -1
  82. package/dist/settings/max-width.css +1 -1
  83. package/dist/settings/space.css +1 -1
  84. package/dist/tools/README.css +1 -1
  85. package/dist/tools/media-queries.css +1 -1
  86. package/dist/tools/x-article-link.css +1 -1
  87. package/dist/tools/x-center.css +1 -1
  88. package/dist/tools/x-fake-border.css +1 -1
  89. package/dist/tools/x-grid.css +1 -1
  90. package/dist/tools/x-layout.css +1 -1
  91. package/dist/tools/x-link/demo.css +1 -0
  92. package/dist/tools/x-link.css +1 -1
  93. package/dist/tools/x-mailto-text-replace.css +1 -1
  94. package/dist/tools/x-overlay.css +1 -1
  95. package/dist/tools/x-truncate.css +1 -1
  96. package/dist/trumps/README.css +1 -1
  97. package/dist/trumps/s-affixed-input-wrapper/demo.css +1 -0
  98. package/dist/trumps/s-affixed-input-wrapper.css +1 -1
  99. package/dist/trumps/s-article-list.css +1 -1
  100. package/dist/trumps/s-article-preview.css +1 -1
  101. package/dist/trumps/s-blockquote.css +1 -1
  102. package/dist/trumps/s-breadcrumbs.css +1 -1
  103. package/dist/trumps/s-cms-nav.css +1 -1
  104. package/dist/trumps/s-document.css +1 -1
  105. package/dist/trumps/s-footer.css +1 -1
  106. package/dist/trumps/s-guide-doc.css +1 -1
  107. package/dist/trumps/s-header.bootstrap.css +1 -0
  108. package/dist/trumps/s-header.css +1 -1
  109. package/dist/trumps/s-inline-dl.css +1 -1
  110. package/dist/trumps/s-irregular-links.css +1 -1
  111. package/dist/trumps/s-portal-nav.css +1 -1
  112. package/dist/trumps/s-style-guide.css +1 -1
  113. package/dist/trumps/s-system-specs.css +1 -1
  114. package/dist/trumps/tacc-search-bar.css +1 -1
  115. package/dist/trumps/u-empty.css +1 -1
  116. package/dist/trumps/u-hide.css +1 -1
  117. package/dist/trumps/u-mailto-text-replace.css +1 -1
  118. package/dist/trumps/u-nested-text-content.css +1 -1
  119. package/docs/index.md +10 -5
  120. package/docs/shortcuts/tables.md +7 -0
  121. package/fractal.config.js +33 -17
  122. package/package.json +11 -7
  123. package/src/.postcssrc.base.yml +11 -2
  124. package/src/bin/build.js +0 -1
  125. package/src/lib/_imports/_partials/text-of-one-paragraph.hbs +1 -0
  126. package/src/lib/_imports/_partials/text-of-one-sentence.hbs +1 -0
  127. package/src/lib/_imports/_preview.hbs +95 -42
  128. package/src/lib/_imports/branding_logos.css +0 -2
  129. package/src/lib/_imports/components/bootstrap/{bootstrap.container/bootstrap.container.hbs → bootstrap--container.hbs} +0 -0
  130. package/src/lib/_imports/components/bootstrap/{bootstrap.container/readme.md → bootstrap--container.readme.md} +0 -0
  131. package/src/lib/_imports/components/bootstrap/{portal/bootstrap.form/docs.css → bootstrap--form.demo.css} +0 -0
  132. package/src/lib/_imports/components/bootstrap/{portal/bootstrap.form/bootstrap.form.hbs → bootstrap--form.hbs} +0 -2
  133. package/src/lib/_imports/components/bootstrap/{portal/bootstrap.form/readme.md → bootstrap--form.readme.md} +0 -0
  134. package/src/lib/_imports/components/bootstrap/{bootstrap.modal/docs.css → bootstrap--modal.demo.css} +0 -0
  135. package/src/lib/_imports/components/bootstrap/{bootstrap.modal/bootstrap.modal.hbs → bootstrap--modal.hbs} +0 -2
  136. package/src/lib/_imports/components/bootstrap/{bootstrap.modal/readme.md → bootstrap--modal.readme.md} +4 -0
  137. package/src/lib/_imports/components/bootstrap/bootstrap.hbs +6 -0
  138. package/src/lib/_imports/components/bootstrap/bootstrap.readme.md +14 -0
  139. package/src/lib/_imports/components/bootstrap/config.yml +12 -0
  140. package/src/lib/_imports/components/bootstrap/demo.css +7 -0
  141. package/src/lib/_imports/components/bootstrap.container.css +0 -1
  142. package/src/lib/_imports/components/bootstrap.css +3 -0
  143. package/src/lib/_imports/components/bootstrap.form.css +0 -1
  144. package/src/lib/_imports/components/bootstrap.modal.css +3 -0
  145. package/src/lib/_imports/components/c-button/c-button.hbs +12 -18
  146. package/src/lib/_imports/components/c-button/{docs.css → demo.css} +0 -5
  147. package/src/lib/_imports/components/c-button.css +15 -6
  148. package/src/lib/_imports/components/c-form/c-form.hbs +362 -0
  149. package/src/lib/_imports/components/c-form/config.yml +2 -0
  150. package/src/lib/_imports/components/c-form/readme.md +14 -0
  151. package/src/lib/_imports/components/c-form/toggle-field-errors.js +101 -0
  152. package/src/lib/_imports/components/c-form/toggle-required-fields.js +85 -0
  153. package/src/lib/_imports/components/c-form.css +176 -0
  154. package/src/lib/_imports/components/c-message.css +61 -24
  155. package/src/lib/_imports/components/cortal.icon.css +15 -6
  156. package/src/lib/_imports/components/django-cms-forms/config.yml +5 -0
  157. package/src/lib/_imports/components/django-cms-forms/django-cms-forms.hbs +404 -0
  158. package/src/lib/_imports/components/django-cms-forms/readme.md +20 -0
  159. package/src/lib/_imports/components/django-cms-forms.css +187 -0
  160. package/src/lib/_imports/components/django-cms-forms.hacks.css +59 -0
  161. package/src/lib/_imports/components/mui.tabs.css +30 -0
  162. package/src/lib/_imports/core-styles.base.css +54 -0
  163. package/src/lib/_imports/core-styles.cms.css +34 -0
  164. package/src/lib/_imports/core-styles.demo.css +23 -0
  165. package/src/lib/_imports/core-styles.header.css +37 -0
  166. package/src/lib/_imports/core-styles.portal.css +25 -0
  167. package/src/lib/_imports/core-styles.settings.css +9 -0
  168. package/src/lib/_imports/elements/demo.css +59 -0
  169. package/src/lib/_imports/elements/form.cms/readme.md +16 -0
  170. package/src/lib/_imports/elements/form.cms.css +5 -23
  171. package/src/lib/_imports/elements/html-elements.cms.css +6 -53
  172. package/src/lib/_imports/elements/html-elements.css +67 -0
  173. package/src/lib/_imports/elements/links/config.yml +3 -0
  174. package/src/lib/_imports/elements/links/links.hbs +0 -2
  175. package/src/lib/_imports/elements/links.css +3 -3
  176. package/src/lib/_imports/elements/table/config.yml +146 -0
  177. package/src/lib/_imports/elements/table/readme.md +12 -0
  178. package/src/lib/_imports/elements/table/table--nested.readme.md +12 -0
  179. package/src/lib/_imports/elements/table/table--paragraph.readme.md +12 -0
  180. package/src/lib/_imports/elements/table/table.hbs +52 -0
  181. package/src/lib/_imports/elements/table--basic.css +113 -0
  182. package/src/lib/_imports/elements/table--nested.css +61 -0
  183. package/src/lib/_imports/elements/table.css +2 -0
  184. package/src/lib/_imports/generics/fonts.css +21 -7
  185. package/src/lib/_imports/objects/o-fixed-header-table/config.yml +60 -0
  186. package/src/lib/_imports/objects/o-fixed-header-table/demo.css +18 -0
  187. package/src/lib/_imports/objects/o-fixed-header-table/o-fixed-header-table.hbs +3 -0
  188. package/src/lib/_imports/objects/o-fixed-header-table/readme.md +18 -0
  189. package/src/lib/_imports/objects/o-fixed-header-table.css +1 -27
  190. package/src/lib/_imports/objects/o-flex-item-table-wrap/config.yml +27 -0
  191. package/src/lib/_imports/objects/o-flex-item-table-wrap/demo.css +7 -0
  192. package/src/lib/_imports/objects/o-flex-item-table-wrap/o-flex-item-table-wrap.hbs +7 -0
  193. package/src/lib/_imports/objects/o-flex-item-table-wrap/readme.md +22 -0
  194. package/src/lib/_imports/objects/o-flex-item-table-wrap.css +0 -34
  195. package/src/lib/_imports/objects/o-float-content.css +0 -1
  196. package/src/lib/_imports/objects/o-section.css +0 -1
  197. package/src/lib/_imports/objects/o-site.css +1 -0
  198. package/src/lib/_imports/objects/o-table-wrap/config.yml +82 -0
  199. package/src/lib/_imports/objects/o-table-wrap/demo.basic.css +18 -0
  200. package/src/lib/_imports/objects/o-table-wrap/demo.extra.css +31 -0
  201. package/src/lib/_imports/objects/o-table-wrap/extra.flexible-horz.css +23 -0
  202. package/src/lib/_imports/objects/o-table-wrap/extra.overflow-hidden.css +7 -0
  203. package/src/lib/_imports/objects/o-table-wrap/extra.overflow-scroll.css +7 -0
  204. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-horz.css +4 -0
  205. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-horz.hbs +5 -0
  206. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-horz.readme.md +20 -0
  207. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-vert.css +3 -0
  208. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-vert.hbs +5 -0
  209. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--flexible-vert.readme.md +18 -0
  210. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-hidden.css +3 -0
  211. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-hidden.hbs +5 -0
  212. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-hidden.readme.md +14 -0
  213. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.css +2 -0
  214. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.hbs +18 -0
  215. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll-extra.readme.md +18 -0
  216. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll.css +5 -0
  217. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll.hbs +5 -0
  218. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap--overflow-scroll.readme.md +20 -0
  219. package/src/lib/_imports/objects/o-table-wrap/o-table-wrap.hbs +11 -0
  220. package/src/lib/_imports/objects/o-table-wrap/readme.md +24 -0
  221. package/src/lib/_imports/objects/o-table-wrap.css +5 -0
  222. package/src/lib/_imports/settings/color.css +29 -11
  223. package/src/lib/_imports/settings/font.css +2 -0
  224. package/src/lib/_imports/{elements/links/docs.css → tools/x-link/demo.css} +0 -0
  225. package/src/lib/_imports/tools/x-link/x-link.hbs +13 -2
  226. package/src/lib/_imports/tools/x-link.css +20 -3
  227. package/src/lib/_imports/trumps/s-affixed-input-wrapper/{readme.md → README.md} +0 -0
  228. package/src/lib/_imports/trumps/s-affixed-input-wrapper/config.yml +3 -2
  229. package/src/lib/_imports/trumps/s-affixed-input-wrapper/s-affixed-input-wrapper.hbs +26 -26
  230. package/src/lib/_imports/trumps/s-affixed-input-wrapper.css +9 -11
  231. package/src/lib/_imports/trumps/s-cms-nav.css +11 -0
  232. package/src/lib/_imports/trumps/s-header.bootstrap.css +30 -0
  233. package/src/lib/_imports/trumps/s-header.css +1 -0
  234. package/src/lib/_imports/trumps/s-inline-dl.css +1 -0
  235. package/src/lib/_imports/trumps/s-irregular-links/config.yml +1 -5
  236. package/src/lib/_imports/trumps/s-irregular-links.css +7 -12
  237. package/src/lib/_imports/trumps/s-portal-nav.css +11 -1
  238. package/src/lib/_imports/trumps/u-empty.css +4 -0
  239. package/src/lib/_imports/trumps/u-mailto-text-replace/config.yml +0 -3
  240. package/src/lib/_imports/trumps/u-mailto-text-replace/readme.md +1 -1
  241. package/src/lib/fonts/BentonSans-Black.otf +0 -0
  242. package/src/lib/fonts/BentonSans-RegularItalic.otf +0 -0
  243. package/dist/components/bootstrap/bootstrap.modal/docs.css +0 -1
  244. package/dist/components/bootstrap/portal/bootstrap.form/docs.css +0 -1
  245. package/dist/components/c-button/docs.css +0 -1
  246. package/dist/elements/links/docs.css +0 -1
  247. package/dist/elements/table/docs.css +0 -1
  248. package/dist/elements/table/table.docs.css +0 -1
  249. package/dist/elements/table copy.css +0 -1
  250. package/dist/fonts/fonts/BentonSans-Bold.otf +0 -0
  251. package/dist/fonts/fonts/BentonSans-Medium.otf +0 -0
  252. package/dist/fonts/fonts/BentonSans-MediumItalic.otf +0 -0
  253. package/dist/fonts/fonts/BentonSans-Regular.otf +0 -0
  254. package/dist/fractal.server.css +0 -1
  255. package/dist/fractal.server.reload.css +0 -1
  256. package/dist/tools/x-link/docs.css +0 -1
  257. package/dist/trumps/icon.css +0 -1
  258. package/dist/trumps/icon.fonts.css +0 -1
  259. package/src/lib/_imports/_partials/bootstrap.css.hbs +0 -1
  260. package/src/lib/_imports/_partials/bootstrap.js.hbs +0 -2
  261. package/src/lib/_imports/_partials/cms.css.hbs +0 -3
  262. package/src/lib/_imports/_partials/css.hbs +0 -27
  263. package/src/lib/_imports/_preview.bootstrap-cms.hbs +0 -5
  264. package/src/lib/_imports/_preview.bootstrap.hbs +0 -5
  265. package/src/lib/_imports/_preview.cms.hbs +0 -3
  266. package/src/lib/_imports/components/bootstrap/bootstrap.container/config.yml +0 -3
  267. package/src/lib/_imports/components/bootstrap/bootstrap.modal/config.yml +0 -2
  268. package/src/lib/_imports/components/bootstrap/portal/bootstrap.form/config.yml +0 -3
  269. package/src/lib/_imports/tools/x-link/docs.css +0 -6
  270. package/src/lib/_imports/trumps/icon.css +0 -31
  271. package/src/lib/_imports/trumps/icon.fonts.css +0 -316
  272. package/src/lib/_tests/README.md +0 -38
  273. package/src/lib/_tests/postcss-extend.css +0 -80
  274. package/src/lib/_tests/postcss-preset-env.css +0 -75
  275. package/src/lib/_tests.css +0 -12
@@ -0,0 +1,362 @@
1
+ <form action="" method="POST" enctype="multipart/form-data" class="c-form">
2
+
3
+ <h3 class="c-form__title">Title of Form</h3>
4
+ <div class="c-form__desc">
5
+ I describe the form, but not very well.
6
+ </div>
7
+
8
+ <ul class="c-form__errors" style="display:none;">
9
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
10
+ </ul>
11
+
12
+ <div class="c-form__field has-required">
13
+ <ul class="c-form__errors" style="display:none;">
14
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
15
+ </ul>
16
+
17
+ <label for="name">
18
+ Name<span class="c-form__star">*</span>
19
+ </label>
20
+
21
+ <input
22
+ type="text"
23
+ name="name"
24
+ required=""
25
+ placeholder="Your name"
26
+ id="name"
27
+ />
28
+
29
+ <div class="c-form__help">
30
+ We use this to identify your submission.
31
+ </div>
32
+ </div>
33
+
34
+ <div class="c-form__field">
35
+ <ul class="c-form__errors" style="display:none;">
36
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
37
+ </ul>
38
+
39
+ <label for="favorite-fruit">Favorite Fruit</label>
40
+
41
+ <select name="favorite-fruit" id="favorite-fruit">
42
+ <option value="" selected="">
43
+ Please select an option
44
+ </option>
45
+ <option value="Apple">Apple</option>
46
+ <option value="Banana">Banana</option>
47
+ <option value="Cherry">Cherry</option>
48
+ <option value="Durian">Durian</option>
49
+ <option value="Other">Other</option>
50
+ <option value="Whatever">Whatever</option>
51
+ </select>
52
+
53
+ <div class="c-form__help">
54
+ Choose your favorite fruit.
55
+ </div>
56
+ </div>
57
+
58
+ <div class="c-form__field">
59
+ <ul class="c-form__errors" style="display:none;">
60
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
61
+ </ul>
62
+
63
+ <label for="wake-up-time">Wake Up Time</label>
64
+
65
+ <input
66
+ type="time"
67
+ name="wake-up-time"
68
+ id="wake-up-time"
69
+ />
70
+
71
+ <div class="c-form__help">
72
+ We use this to know when to wake you up.
73
+ </div>
74
+ </div>
75
+
76
+ <div class="c-form__field">
77
+ <ul class="c-form__errors" style="display:none;">
78
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
79
+ </ul>
80
+
81
+ <label>Radio stations</label>
82
+
83
+ <ul id="radio-stations">
84
+ <li>
85
+ <label for="radio-stations-0">
86
+ <input
87
+ type="radio"
88
+ name="radio-stations"
89
+ value="LX 1234"
90
+ id="radio-stations-0"
91
+ />
92
+ LX 1234
93
+ </label>
94
+ </li>
95
+ <li>
96
+ <label for="radio-stations-1">
97
+ <input
98
+ type="radio"
99
+ name="radio-stations"
100
+ value="LOVE 45"
101
+ id="radio-stations-1"
102
+ />
103
+ LOVE 45
104
+ </label>
105
+ </li>
106
+ <li>
107
+ <label for="radio-stations-2">
108
+ <input
109
+ type="radio"
110
+ name="radio-stations"
111
+ value="OLD 555"
112
+ id="radio-stations-2"
113
+ />
114
+ OLD 555
115
+ </label>
116
+ </li>
117
+ </ul>
118
+
119
+ <div class="c-form__help">
120
+ Which radio stations do you prefer?
121
+ </div>
122
+ </div>
123
+
124
+ <div class="c-form__field has-type-check">
125
+ <ul class="c-form__errors" style="display:none;">
126
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
127
+ </ul>
128
+
129
+ <input
130
+ type="checkbox"
131
+ name="checking-out"
132
+ id="checking-out"
133
+ />
134
+
135
+ <label for="checking-out">Checking Out?</label>
136
+
137
+ <div class="c-form__help">
138
+ Are you checking out today?
139
+ </div>
140
+ </div>
141
+
142
+ <div class="c-form__field">
143
+ <ul class="c-form__errors" style="display:none;">
144
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
145
+ </ul>
146
+
147
+ <label for="">
148
+ Which fish do you want?
149
+ </label>
150
+
151
+ <ul id="which-fish-do-you-want">
152
+ <li>
153
+ <label for="which-fish-do-you-want-0">
154
+ <input
155
+ type="checkbox"
156
+ name="which-fish-do-you-want"
157
+ value="one fish"
158
+ id="which-fish-do-you-want-0"
159
+ />
160
+ one fish
161
+ </label>
162
+ </li>
163
+ <li>
164
+ <label for="which-fish-do-you-want-1">
165
+ <input
166
+ type="checkbox"
167
+ name="which-fish-do-you-want"
168
+ value="two fish"
169
+ id="which-fish-do-you-want-1"
170
+ />
171
+ two fish
172
+ </label>
173
+ </li>
174
+ <li>
175
+ <label for="which-fish-do-you-want-2">
176
+ <input
177
+ type="checkbox"
178
+ name="which-fish-do-you-want"
179
+ value="red fish"
180
+ id="which-fish-do-you-want-2"
181
+ />
182
+ red fish
183
+ </label>
184
+ </li>
185
+ <li>
186
+ <label for="which-fish-do-you-want-3">
187
+ <input
188
+ type="checkbox"
189
+ name="which-fish-do-you-want"
190
+ value="blue fish"
191
+ id="which-fish-do-you-want-3"
192
+ />
193
+ blue fish
194
+ </label>
195
+ </li>
196
+ <li>
197
+ <label for="which-fish-do-you-want-4">
198
+ <input
199
+ type="checkbox"
200
+ name="which-fish-do-you-want"
201
+ value="all the fish"
202
+ id="which-fish-do-you-want-4"
203
+ />
204
+ all the fish
205
+ </label>
206
+ </li>
207
+ </ul>
208
+ </div>
209
+
210
+ <div class="c-form__field">
211
+ <ul class="c-form__errors" style="display:none;">
212
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
213
+ </ul>
214
+
215
+ <label for="hangry-time">Hangry Time</label>
216
+
217
+ <select name="hangry-time" id="hangry-time">
218
+ <option value="" selected="">
219
+ Please select an option
220
+ </option>
221
+ <option value="Morning">Morning</option>
222
+ <option value="Noon">Noon</option>
223
+ <option value="Afternoon">Afternoon</option>
224
+ <option value="Evening">Evening</option>
225
+ <option value="Night">Night</option>
226
+ <option value="Midnight">Midnight</option>
227
+ </select>
228
+
229
+ <div class="c-form__help">
230
+ At which time of day do you get hangry?
231
+ </div>
232
+ </div>
233
+
234
+ <div class="c-form__field">
235
+ <ul class="c-form__errors" style="display:none;">
236
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
237
+ </ul>
238
+
239
+ <label for="life-story">Life Story</label>
240
+
241
+ <textarea
242
+ name="life-story"
243
+ cols="40"
244
+ rows="10"
245
+ id="life-story"
246
+ ></textarea>
247
+
248
+ <div class="c-form__help">
249
+ Go on, tell me everything.
250
+ </div>
251
+ </div>
252
+
253
+ <div class="c-form__field">
254
+ <ul class="c-form__errors" style="display:none;">
255
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
256
+ </ul>
257
+
258
+ <label for="what-day-is-it">What day is it?</label>
259
+
260
+ <input
261
+ type="date"
262
+ name="what-day-is-it"
263
+ id="what-day-is-it"
264
+ />
265
+
266
+ <div class="c-form__help">
267
+ Please enter today's date.
268
+ </div>
269
+ </div>
270
+
271
+ <div class="c-form__field">
272
+ <ul class="c-form__errors" style="display:none;">
273
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
274
+ </ul>
275
+
276
+ <label for="your-favorite-picture">Your favorite picture</label>
277
+
278
+ <input
279
+ type="file"
280
+ name="your-favorite-picture"
281
+ id="your-favorite-picture"
282
+ />
283
+
284
+ <div class="c-form__help">
285
+ Upload your favorite image.
286
+ <small>
287
+ Supported types:
288
+ <code>.jpeg</code>,<code>.jpg</code>,<code>.gif</code>,<code>.png</code>
289
+ </small>
290
+ </div>
291
+ </div>
292
+
293
+ <div class="c-form__field has-spam-check has-required">
294
+ <ul class="c-form__errors" style="display:none;">
295
+ <li>Sample <strong>form</strong> error. <a href="#">Link.</a></li>
296
+ </ul>
297
+
298
+ <label for="recaptcha_g9y93gP8">
299
+ Are you a robot?<span class="c-form__star">*</span>
300
+ </label>
301
+
302
+ <script src="https://www.google.com/recaptcha/api.js"></script>
303
+ <script type="text/javascript">
304
+ // Submit function to be called, after reCAPTCHA was successful. var
305
+ onSubmit_9e32f28ccb9545109ff6ae891f9af324 = function(token){" "}
306
+ {console.log("reCAPTCHA validated for 'data-widget-uuid=\"9e32f28ccb9545109ff6ae891f9af324\"'")};
307
+ </script>
308
+ <div class="g-recaptcha" data-sitekey="6LeIxAcTAAAAAJcZVRqyHh71UMIEGNQ_MXjiZKhI" required="" id="recaptcha_g9y93gP8" data-widget-uuid="9e32f28ccb9545109ff6ae891f9af324" data-callback="onSubmit_9e32f28ccb9545109ff6ae891f9af324" data-size="normal"></div>
309
+ </div>
310
+
311
+ <div class="c-form__buttons">
312
+ <button class="c-form__button" type="submit">
313
+ Submit
314
+ </button>
315
+ <button id="toggle-field-errors" class="c-form__button" type="button">
316
+ Toggle Field Errors
317
+ </button>
318
+ <button id="toggle-required-fields" class="c-form__button" type="button">
319
+ Toggle Required Fields
320
+ </button>
321
+ </div>
322
+
323
+ </form>
324
+
325
+ <script type="module">
326
+ import toggleFieldErrors from '{{ path "/components/raw/c-form/toggle-field-errors.js" }}';
327
+
328
+ document.addEventListener('DOMContentLoaded', () => {
329
+ const toggle = document.getElementById('toggle-field-errors');
330
+ const form = document.querySelector('form');
331
+
332
+ toggle.addEventListener('click', () => {
333
+ toggleFieldErrors( form, '.c-form__errors');
334
+ });
335
+ });
336
+ </script>
337
+ <script type="module">
338
+ import toggleRequiredFields from '{{ path "/components/raw/c-form/toggle-required-fields.js" }}';
339
+
340
+ document.addEventListener('DOMContentLoaded', () => {
341
+ const toggle = document.getElementById('toggle-required-fields');
342
+ const form = toggle.closest('form');
343
+
344
+ toggle.addEventListener('click', () => {
345
+ toggleRequiredFields( form, 'c-form__field', 'has-required', {
346
+ shouldScrollToFirst: true
347
+ });
348
+ });
349
+ });
350
+ </script>
351
+ <script type="module">
352
+ document.addEventListener('DOMContentLoaded', () => {
353
+ const form = document.querySelector('form');
354
+
355
+ form.addEventListener('submit', event => {
356
+ event.preventDefault();
357
+
358
+ /* TODO: Show success message on form */
359
+ alert('Form was not submitted, because this is an incomplete demo.');
360
+ });
361
+ });
362
+ </script>
@@ -0,0 +1,2 @@
1
+ context:
2
+ shouldLoadCMS: true # temporary dependence, until proven to work on Portal
@@ -0,0 +1,14 @@
1
+ To style when raw [Form elements](https://developer.mozilla.org/en-US/docs/Web/HTML/Element#table_content) are insufficient.
2
+
3
+ > <details><summary><strong>✎ Inspiration</strong></summary>
4
+ >
5
+ > - [Django CMS Form Default Template](https://github.com/avryhof/djangocms-forms/blob/ab38b22/djangocms_forms/templates/djangocms_forms/form_template/default.html)
6
+ >
7
+ > </details>
8
+
9
+ <script>
10
+ /* To open external links in new window */
11
+ Array.from(document.links)
12
+ .filter(link => link.hostname != window.location.hostname)
13
+ .forEach(link => link.target = '_blank');
14
+ </script>
@@ -0,0 +1,101 @@
1
+ /** To toggle error list visibility */
2
+
3
+ /**
4
+ * @constant
5
+ * @default
6
+ * @type {object.<string,*>}
7
+ */
8
+ const DEFAULT_CLASS_NAMES = {
9
+ jsShow: 'js-show-errors',
10
+ jsHide: 'js-hide-errors'
11
+ };
12
+
13
+ /**
14
+ * @constant
15
+ * @default
16
+ * @type {object.<string,*>}
17
+ */
18
+ const DEFAULT_CALLBACKS = {
19
+ hideEach: function ( list ) {
20
+ list.style.display = 'none';
21
+ },
22
+ showEach: function ( list ) {
23
+ list.style.display = '';
24
+ },
25
+ showAll: ( lists ) => {
26
+ lists[0].scrollIntoView( false );
27
+ }
28
+ };
29
+
30
+ /**
31
+ * On each error list hide/show
32
+ * @callback onEach
33
+ * @param {HTMLElement} list
34
+ */
35
+ /**
36
+ * After all error lists are hidden/shown
37
+ * @callback afterAll
38
+ * @param {array.<HTMLElement>} lists
39
+ */
40
+
41
+ /**
42
+ * HIDE an error list
43
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
44
+ * @param {string} errorListClass - class on field's wrapper
45
+ */
46
+ function hideErrorList( list, classNames, callback ) {
47
+ list.classList.add( classNames.jsHide );
48
+ list.classList.remove( classNames.jsShow );
49
+ if ( typeof callback === 'function' ) {
50
+ callback( list );
51
+ }
52
+ }
53
+
54
+ /**
55
+ * SHOW an error list
56
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
57
+ * @param {string} errorListClass - class on field's wrapper
58
+ */
59
+ function showErrorList( list, classNames, callback ) {
60
+ list.classList.add( classNames.jsShow );
61
+ list.classList.remove( classNames.jsHide );
62
+ if ( typeof callback === 'function' ) {
63
+ callback( list );
64
+ }
65
+ }
66
+
67
+ /**
68
+ * Toggle error lists' visibility
69
+ * @param {Document|HTMLElement} [scope=document] - where to search for lists
70
+ * @param {string} [selector] - selector to find error lists
71
+ * @param {object.<string,function>} [optCallbacks]
72
+ * @param {onEach} [optCallbacks.showEach] - on each list show
73
+ * @param {onEach} [optCallbacks.hideEach] - on each list hide
74
+ * @param {afterAll} [optCallbacks.showAll] - on all lists shown
75
+ * @param {afterAll} [optCallbacks.hideAll] - on all lists hidden
76
+ */
77
+ export default function toggleErrorLists( scope, selector, optCallbacks ) {
78
+ const classNames = DEFAULT_CLASS_NAMES;
79
+ const callbacks = Object.assign( DEFAULT_CALLBACKS, optCallbacks );
80
+ const lists = scope.querySelectorAll( selector );
81
+
82
+ let didHide = false;
83
+ let didShow = false;
84
+
85
+ [ ...lists ].forEach( list => {
86
+ if ( list.classList.contains( classNames.jsShow ) ) {
87
+ hideErrorList( list, classNames, callbacks.hideEach );
88
+ didHide = true;
89
+ } else {
90
+ showErrorList( list, classNames, callbacks.showEach );
91
+ didShow = true;
92
+ }
93
+ });
94
+
95
+ if ( didHide && typeof callbacks.hideAll === 'function' ) {
96
+ callbacks.hideAll( lists );
97
+ }
98
+ if ( didShow && typeof callbacks.showAll === 'function' ) {
99
+ callbacks.showAll( lists );
100
+ }
101
+ }
@@ -0,0 +1,85 @@
1
+ /** To toggle required attribute (and classes) of fields (and field wrappers) */
2
+
3
+ /**
4
+ * @constant
5
+ * @default
6
+ * @type {object.<string,*>}
7
+ */
8
+ const DEFAULT_CLASS_NAMES = {
9
+ errorList: null,
10
+ jsIs: 'js-is-required',
11
+ jsNot: 'js-not-required'
12
+ };
13
+
14
+ /**
15
+ * @constant
16
+ * @default
17
+ * @type {object.<string,*>}
18
+ */
19
+ const DEFAULT_OPTIONS = {
20
+ shouldScrollToFirst: false
21
+ };
22
+
23
+ /**
24
+ * Make a field NOT required (and update field wrapper accordingly)
25
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
26
+ * @param {string} wrapClassRequired - class on field's wrapper
27
+ */
28
+ function unRequireField( field, classNames ) {
29
+ const wrap = field.closest('.' + classNames.wrap );
30
+
31
+ field.required = false;
32
+ field.classList.add( classNames.jsNot );
33
+ field.classList.remove( classNames.jsIs );
34
+ if ( wrap && classNames.wrapRequired ) {
35
+ wrap.classList.remove( classNames.wrapRequired );
36
+ }
37
+ }
38
+
39
+ /**
40
+ * Make a field REQUIRED (and update field wrapper accordingly)
41
+ * @param {HTMLInputElement|HTMLSelectElement|HTMLTextAreaElement} field
42
+ * @param {string} wrapClassRequired - class on field's wrapper
43
+ */
44
+ function requireField( field, classNames ) {
45
+ const wrap = field.closest('.' + classNames.wrap );
46
+
47
+ field.required = true;
48
+ field.classList.add( classNames.jsIs );
49
+ field.classList.remove( classNames.jsNot );
50
+ if ( wrap && classNames.wrapRequired ) {
51
+ wrap.classList.add( classNames.wrapRequired );
52
+ }
53
+ }
54
+
55
+ /**
56
+ * Toggle required attribute (and classes) of fields (and field wrappers)
57
+ * @param {Document|HTMLElement} [scope=document] - where to search for fields
58
+ * @param {string} [wrapClass] - class on all field wrappers
59
+ * @param {string} [wrapRequiredClass] - class on required fields' wrappers
60
+ * @param {object.<string,*>} [opts]
61
+ * @param {boolean} [opts.shouldScrollToFirst] - to scroll to first such field
62
+ */
63
+ export default function toggleRequiredFields( scope = document, wrapClass, wrapRequiredClass, opts ) {
64
+ const classNames = Object.assign( DEFAULT_CLASS_NAMES, {
65
+ wrap: wrapClass,
66
+ wrapRequired: wrapRequiredClass
67
+ });
68
+ const options = Object.assign( DEFAULT_OPTIONS, opts );
69
+ const requiredFields = scope.querySelectorAll(`
70
+ [required]:is(input, select, textarea),
71
+ .` + classNames.jsNot + `
72
+ `);
73
+
74
+ [ ...requiredFields ].forEach( field => {
75
+ if ( field.hasAttribute('required') ) {
76
+ unRequireField( field, classNames );
77
+ } else {
78
+ requireField( field, classNames );
79
+ }
80
+ });
81
+
82
+ if ( options.shouldScrollToFirst ) {
83
+ requiredFields[0].scrollIntoView( false );
84
+ }
85
+ }