@ulu/frontend 0.0.3 → 0.0.5

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 (246) hide show
  1. package/package.json +11 -10
  2. package/scss/_grid.scss +0 -1
  3. package/scss/_typography.scss +0 -1
  4. package/scss/helpers/_units.scss +1 -6
  5. package/scss/stylesheets/full.scss +1 -4
  6. package/trash/js-old/deprecated/doc-ready.js +0 -28
  7. package/trash/js-old/deprecated/jquery-prototypes.js +0 -309
  8. package/trash/js-old/deprecated/mini-collapsible-popper-positioning.js +0 -126
  9. package/trash/js-old/deprecated/mini-collapsible.js +0 -607
  10. package/trash/js-old/deprecated/script-loader.js +0 -60
  11. package/trash/js-old/events/index.js +0 -42
  12. package/trash/js-old/helpers/css-breakpoint.js +0 -247
  13. package/trash/js-old/helpers/file-save.js +0 -48
  14. package/trash/js-old/helpers/node-data-manager.js +0 -74
  15. package/trash/js-old/helpers/pause-youtube-video.js +0 -42
  16. package/trash/js-old/index.js +0 -15
  17. package/trash/js-old/polyfills/element-closest.js +0 -17
  18. package/trash/js-old/ui/flipcard.js +0 -202
  19. package/trash/js-old/ui/grid.js +0 -67
  20. package/trash/js-old/ui/modals.js +0 -219
  21. package/trash/js-old/ui/programmatic-modal.js +0 -91
  22. package/trash/js-old/ui/resizer.js +0 -60
  23. package/trash/js-old/ui/slider.js +0 -469
  24. package/trash/js-old/ui/tabs.js +0 -109
  25. package/trash/js-old/ui/tooltip.js +0 -82
  26. package/trash/js-old/utils/array.js +0 -28
  27. package/trash/js-old/utils/dom.js +0 -122
  28. package/trash/js-old/utils/logger.js +0 -69
  29. package/trash/js-old/utils/object.js +0 -22
  30. package/trash/js-old/utils/performance.js +0 -43
  31. package/trash/js-old/utils/regex.js +0 -10
  32. package/trash/js-old/utils/string.js +0 -107
  33. package/trash/js-old/waypoints/README.md +0 -3
  34. package/trash/js-old/waypoints/anchor-menu.js +0 -76
  35. package/trash/js-old/waypoints/element-waypoint.js +0 -75
  36. package/trash/js-old/waypoints/examples/page-link-menu.md +0 -106
  37. package/trash/js-old/waypoints/state-in-attribute.js +0 -32
  38. package/trash/js-old-230729/deprecated/doc-ready.js +0 -28
  39. package/trash/js-old-230729/deprecated/jquery-prototypes.js +0 -309
  40. package/trash/js-old-230729/deprecated/mini-collapsible-popper-positioning.js +0 -126
  41. package/trash/js-old-230729/deprecated/mini-collapsible.js +0 -607
  42. package/trash/js-old-230729/deprecated/script-loader.js +0 -60
  43. package/trash/js-old-230729/events/index.js +0 -42
  44. package/trash/js-old-230729/helpers/css-breakpoint.js +0 -247
  45. package/trash/js-old-230729/helpers/file-save.js +0 -48
  46. package/trash/js-old-230729/helpers/node-data-manager.js +0 -74
  47. package/trash/js-old-230729/helpers/pause-youtube-video.js +0 -42
  48. package/trash/js-old-230729/helpers/scrollbar-width-property.js +0 -10
  49. package/trash/js-old-230729/index.js +0 -15
  50. package/trash/js-old-230729/polyfills/element-closest.js +0 -17
  51. package/trash/js-old-230729/ui/flipcard.js +0 -202
  52. package/trash/js-old-230729/ui/grid.js +0 -67
  53. package/trash/js-old-230729/ui/modals.js +0 -219
  54. package/trash/js-old-230729/ui/overflow-scroller-pager.js +0 -58
  55. package/trash/js-old-230729/ui/overflow-scroller.js +0 -160
  56. package/trash/js-old-230729/ui/programmatic-modal.js +0 -91
  57. package/trash/js-old-230729/ui/resizer.js +0 -60
  58. package/trash/js-old-230729/ui/slider.js +0 -468
  59. package/trash/js-old-230729/ui/tabs.js +0 -109
  60. package/trash/js-old-230729/ui/tooltip.js +0 -82
  61. package/trash/js-old-230729/utils/array.js +0 -28
  62. package/trash/js-old-230729/utils/dom.js +0 -122
  63. package/trash/js-old-230729/utils/logger.js +0 -69
  64. package/trash/js-old-230729/utils/object.js +0 -22
  65. package/trash/js-old-230729/utils/performance.js +0 -43
  66. package/trash/js-old-230729/utils/regex.js +0 -10
  67. package/trash/js-old-230729/utils/string.js +0 -107
  68. package/trash/js-old-230729/waypoints/README.md +0 -3
  69. package/trash/js-old-230729/waypoints/anchor-menu.js +0 -76
  70. package/trash/js-old-230729/waypoints/element-waypoint.js +0 -75
  71. package/trash/js-old-230729/waypoints/examples/page-link-menu.md +0 -106
  72. package/trash/js-old-230729/waypoints/state-in-attribute.js +0 -32
  73. package/trash/logo-1.svg +0 -13
  74. package/trash/logo.svg +0 -16
  75. package/trash/scss-before-cqc-update/README.md +0 -58
  76. package/trash/scss-before-cqc-update/_breakpoint.scss +0 -190
  77. package/trash/scss-before-cqc-update/_button.scss +0 -229
  78. package/trash/scss-before-cqc-update/_calculate.scss +0 -65
  79. package/trash/scss-before-cqc-update/_color.scss +0 -211
  80. package/trash/scss-before-cqc-update/_cssvar.scss +0 -116
  81. package/trash/scss-before-cqc-update/_element.scss +0 -275
  82. package/trash/scss-before-cqc-update/_index.scss +0 -29
  83. package/trash/scss-before-cqc-update/_layout.scss +0 -247
  84. package/trash/scss-before-cqc-update/_path.scss +0 -59
  85. package/trash/scss-before-cqc-update/_selector.scss +0 -82
  86. package/trash/scss-before-cqc-update/_typography.scss +0 -322
  87. package/trash/scss-before-cqc-update/_units.scss +0 -48
  88. package/trash/scss-before-cqc-update/_utility.scss +0 -13
  89. package/trash/scss-before-cqc-update/_utils.scss +0 -211
  90. package/trash/scss-before-cqc-update/base/_color.scss +0 -14
  91. package/trash/scss-before-cqc-update/base/_elements.scss +0 -189
  92. package/trash/scss-before-cqc-update/base/_index.scss +0 -63
  93. package/trash/scss-before-cqc-update/base/_keyframes.scss +0 -74
  94. package/trash/scss-before-cqc-update/base/_layout.scss +0 -88
  95. package/trash/scss-before-cqc-update/base/_normalize.scss +0 -316
  96. package/trash/scss-before-cqc-update/base/_typography.scss +0 -42
  97. package/trash/scss-before-cqc-update/components/README.md +0 -5
  98. package/trash/scss-before-cqc-update/components/README.todos +0 -15
  99. package/trash/scss-before-cqc-update/components/_button.scss +0 -96
  100. package/trash/scss-before-cqc-update/components/_grid.scss +0 -671
  101. package/trash/scss-before-cqc-update/components/_index.scss +0 -70
  102. package/trash/scss-before-cqc-update/components/_links.scss +0 -35
  103. package/trash/scss-before-cqc-update/components/_list-lines.scss +0 -74
  104. package/trash/scss-before-cqc-update/components/_list-ordered.scss +0 -17
  105. package/trash/scss-before-cqc-update/components/_list-unordered.scss +0 -22
  106. package/trash/scss-before-cqc-update/components/_rule.scss +0 -94
  107. package/trash/scss-before-cqc-update/helpers/_color.scss +0 -15
  108. package/trash/scss-before-cqc-update/helpers/_display.scss +0 -73
  109. package/trash/scss-before-cqc-update/helpers/_index.scss +0 -68
  110. package/trash/scss-before-cqc-update/helpers/_print.scss +0 -59
  111. package/trash/scss-before-cqc-update/helpers/_typography.scss +0 -73
  112. package/trash/scss-before-cqc-update/helpers/_units.scss +0 -79
  113. package/trash/scss-before-cqc-update/helpers/_utilities.scss +0 -88
  114. package/trash/scss-before-cqc-update/stylesheets/README.md +0 -3
  115. package/trash/scss-before-cqc-update/stylesheets/full.scss +0 -17
  116. package/trash/scss-old/README.md +0 -58
  117. package/trash/scss-old/_breakpoint.scss +0 -140
  118. package/trash/scss-old/_button.scss +0 -223
  119. package/trash/scss-old/_calculate.scss +0 -64
  120. package/trash/scss-old/_color.scss +0 -200
  121. package/trash/scss-old/_element.scss +0 -262
  122. package/trash/scss-old/_grid.scss +0 -558
  123. package/trash/scss-old/_index.scss +0 -25
  124. package/trash/scss-old/_layout.scss +0 -170
  125. package/trash/scss-old/_path.scss +0 -58
  126. package/trash/scss-old/_selector.scss +0 -81
  127. package/trash/scss-old/_typography.scss +0 -320
  128. package/trash/scss-old/_units.scss +0 -47
  129. package/trash/scss-old/_utility.scss +0 -12
  130. package/trash/scss-old/_utils.scss +0 -186
  131. package/trash/scss-old/base/_color.scss +0 -13
  132. package/trash/scss-old/base/_elements.scss +0 -183
  133. package/trash/scss-old/base/_index.scss +0 -62
  134. package/trash/scss-old/base/_keyframes.scss +0 -74
  135. package/trash/scss-old/base/_layout.scss +0 -81
  136. package/trash/scss-old/base/_normalize.scss +0 -316
  137. package/trash/scss-old/base/_typography.scss +0 -42
  138. package/trash/scss-old/components/README.md +0 -5
  139. package/trash/scss-old/components/README.todos +0 -15
  140. package/trash/scss-old/components/_button.scss +0 -74
  141. package/trash/scss-old/components/_index.scss +0 -63
  142. package/trash/scss-old/components/_links.scss +0 -34
  143. package/trash/scss-old/components/_list-lines.scss +0 -73
  144. package/trash/scss-old/components/_list-ordered.scss +0 -16
  145. package/trash/scss-old/components/_list-unordered.scss +0 -21
  146. package/trash/scss-old/components/_rule.scss +0 -84
  147. package/trash/scss-old/helpers/_color.scss +0 -14
  148. package/trash/scss-old/helpers/_display.scss +0 -68
  149. package/trash/scss-old/helpers/_index.scss +0 -67
  150. package/trash/scss-old/helpers/_print.scss +0 -59
  151. package/trash/scss-old/helpers/_typography.scss +0 -73
  152. package/trash/scss-old/helpers/_units.scss +0 -68
  153. package/trash/scss-old/helpers/_utilities.scss +0 -82
  154. package/trash/scss-old/packages/README.md +0 -3
  155. package/trash/scss-old/packages/everything.scss +0 -17
  156. package/trash/scss-old-2/README.md +0 -58
  157. package/trash/scss-old-2/_breakpoint.scss +0 -139
  158. package/trash/scss-old-2/_button.scss +0 -223
  159. package/trash/scss-old-2/_calculate.scss +0 -64
  160. package/trash/scss-old-2/_color.scss +0 -202
  161. package/trash/scss-old-2/_element.scss +0 -263
  162. package/trash/scss-old-2/_grid.scss +0 -558
  163. package/trash/scss-old-2/_index.scss +0 -25
  164. package/trash/scss-old-2/_layout.scss +0 -170
  165. package/trash/scss-old-2/_path.scss +0 -58
  166. package/trash/scss-old-2/_selector.scss +0 -81
  167. package/trash/scss-old-2/_typography.scss +0 -320
  168. package/trash/scss-old-2/_units.scss +0 -47
  169. package/trash/scss-old-2/_utility.scss +0 -12
  170. package/trash/scss-old-2/_utils.scss +0 -186
  171. package/trash/scss-old-2/base/_color.scss +0 -13
  172. package/trash/scss-old-2/base/_elements.scss +0 -182
  173. package/trash/scss-old-2/base/_index.scss +0 -62
  174. package/trash/scss-old-2/base/_keyframes.scss +0 -73
  175. package/trash/scss-old-2/base/_layout.scss +0 -83
  176. package/trash/scss-old-2/base/_normalize.scss +0 -315
  177. package/trash/scss-old-2/base/_typography.scss +0 -41
  178. package/trash/scss-old-2/components/README.md +0 -5
  179. package/trash/scss-old-2/components/README.todos +0 -15
  180. package/trash/scss-old-2/components/_button.scss +0 -95
  181. package/trash/scss-old-2/components/_index.scss +0 -63
  182. package/trash/scss-old-2/components/_links.scss +0 -33
  183. package/trash/scss-old-2/components/_list-lines.scss +0 -73
  184. package/trash/scss-old-2/components/_list-ordered.scss +0 -16
  185. package/trash/scss-old-2/components/_list-unordered.scss +0 -21
  186. package/trash/scss-old-2/components/_rule.scss +0 -84
  187. package/trash/scss-old-2/helpers/_color.scss +0 -14
  188. package/trash/scss-old-2/helpers/_display.scss +0 -67
  189. package/trash/scss-old-2/helpers/_index.scss +0 -67
  190. package/trash/scss-old-2/helpers/_print.scss +0 -58
  191. package/trash/scss-old-2/helpers/_typography.scss +0 -72
  192. package/trash/scss-old-2/helpers/_units.scss +0 -68
  193. package/trash/scss-old-2/helpers/_utilities.scss +0 -81
  194. package/trash/scss-old-2/packages/README.md +0 -3
  195. package/trash/scss-old-2/packages/everything.scss +0 -17
  196. package/trash/scss-old-230729/README.md +0 -58
  197. package/trash/scss-old-230729/_breakpoint.scss +0 -139
  198. package/trash/scss-old-230729/_button.scss +0 -223
  199. package/trash/scss-old-230729/_calculate.scss +0 -64
  200. package/trash/scss-old-230729/_color.scss +0 -202
  201. package/trash/scss-old-230729/_element.scss +0 -273
  202. package/trash/scss-old-230729/_grid.scss +0 -694
  203. package/trash/scss-old-230729/_index.scss +0 -25
  204. package/trash/scss-old-230729/_layout.scss +0 -193
  205. package/trash/scss-old-230729/_path.scss +0 -58
  206. package/trash/scss-old-230729/_selector.scss +0 -81
  207. package/trash/scss-old-230729/_typography.scss +0 -320
  208. package/trash/scss-old-230729/_units.scss +0 -47
  209. package/trash/scss-old-230729/_utility.scss +0 -12
  210. package/trash/scss-old-230729/_utils.scss +0 -186
  211. package/trash/scss-old-230729/base/_color.scss +0 -13
  212. package/trash/scss-old-230729/base/_elements.scss +0 -188
  213. package/trash/scss-old-230729/base/_index.scss +0 -62
  214. package/trash/scss-old-230729/base/_keyframes.scss +0 -73
  215. package/trash/scss-old-230729/base/_layout.scss +0 -83
  216. package/trash/scss-old-230729/base/_normalize.scss +0 -315
  217. package/trash/scss-old-230729/base/_typography.scss +0 -41
  218. package/trash/scss-old-230729/components/README.md +0 -5
  219. package/trash/scss-old-230729/components/README.todos +0 -15
  220. package/trash/scss-old-230729/components/_button.scss +0 -95
  221. package/trash/scss-old-230729/components/_index.scss +0 -63
  222. package/trash/scss-old-230729/components/_links.scss +0 -34
  223. package/trash/scss-old-230729/components/_list-lines.scss +0 -73
  224. package/trash/scss-old-230729/components/_list-ordered.scss +0 -16
  225. package/trash/scss-old-230729/components/_list-unordered.scss +0 -21
  226. package/trash/scss-old-230729/components/_rule.scss +0 -93
  227. package/trash/scss-old-230729/helpers/_color.scss +0 -14
  228. package/trash/scss-old-230729/helpers/_display.scss +0 -73
  229. package/trash/scss-old-230729/helpers/_index.scss +0 -67
  230. package/trash/scss-old-230729/helpers/_print.scss +0 -58
  231. package/trash/scss-old-230729/helpers/_typography.scss +0 -72
  232. package/trash/scss-old-230729/helpers/_units.scss +0 -68
  233. package/trash/scss-old-230729/helpers/_utilities.scss +0 -87
  234. package/trash/scss-old-230729/packages/README.md +0 -3
  235. package/trash/scss-old-230729/packages/everything.scss +0 -17
  236. package/trash/vue/directives/background-image-url.js +0 -12
  237. package/trash/vue/helpers/add-required-components.js +0 -14
  238. package/trash/vue/ui/CollapsibleRegion/CollapsibleRegion.vue +0 -277
  239. package/trash/vue/ui/CollapsibleRegion/Demo.vue +0 -101
  240. package/trash/vue/ui/Dropdown/Dropdown.vue +0 -184
  241. package/trash/vue/ui/Modals/components/Modal.vue +0 -49
  242. package/trash/vue/ui/Modals/components/Modals.vue +0 -103
  243. package/trash/vue/ui/Modals/plugin.js +0 -215
  244. package/trash/vue/ui/Modals/readme.note +0 -10
  245. package/trash/vue/ui/Modals/reference/example-usage.vue +0 -27
  246. package/trash/vue/ui/Modals/reference/wcag-example/dialog.js +0 -324
@@ -1,122 +0,0 @@
1
- /**
2
- * Returns an array of direct descendants
3
- * @param {Node} element
4
- * @param {String} selector
5
- * @return {Array}
6
- */
7
- export function getDirectDescandants(element, selector) {
8
- return [...element.children].filter(child => child.matches(selector));
9
- };
10
-
11
- /**
12
- * Checks if element is overflown vertically
13
- * @param {Node} element
14
- * @return {Boolean}
15
- */
16
- export function isOverflownY(element) {
17
- return element.scrollHeight > element.clientHeight;
18
- }
19
-
20
- /**
21
- * Checks if element is overflown both vertically and horizontally
22
- * @param {Node} element
23
- * @return {Boolean}
24
- */
25
- export function isOverflown(element) {
26
- return element.scrollHeight > element.clientHeight || element.scrollWidth > element.clientWidth;
27
- }
28
-
29
- /**
30
- * For a given element return the first parent that has scrollable overflow
31
- * - Helpful for debugging position sticky
32
- * @param {Node} node Node to start search for first scrollable parent
33
- * @returns {Node}
34
- * @example
35
- * const $navcontent = document.querySelector('.nav__content');
36
- * if ($navcontent) {
37
- * console.log(getScrollParent($navcontent));
38
- * }
39
- */
40
- export function getScrollParent(node) {
41
- if (node == null) {
42
- return null;
43
- }
44
- if (node.scrollHeight > node.clientHeight) {
45
- return node;
46
- } else {
47
- return getScrollParent(node.parentNode);
48
- }
49
- }
50
-
51
- /**
52
- * Returns reliable document height
53
- * @return {number}
54
- */
55
- export function documentHeight() {
56
- return Math.max(
57
- document.body.scrollHeight, document.documentElement.scrollHeight,
58
- document.body.offsetHeight, document.documentElement.offsetHeight,
59
- document.body.clientHeight, document.documentElement.clientHeight
60
- );
61
- }
62
-
63
- /**
64
- * Returns reliable window height
65
- * @return {number}
66
- */
67
- export function windowHeight() {
68
- return Math.max(document.documentElement.clientHeight, window.innerHeight || 0);
69
- }
70
-
71
- /**
72
- * Returns reliable window width
73
- * @return {number}
74
- */
75
- export function windowWidth() {
76
- return Math.max(document.documentElement.clientWidth, window.innerWidth || 0);
77
- }
78
-
79
- /**
80
- * Check browser support for position: sticky
81
- * - https://stackoverflow.com/questions/60214332/dynamically-detect-if-positionsticky-is-supported-by-the-browser
82
- * @return {Boolean}
83
- */
84
- export function browserWithPositionSticky() {
85
- var prop = 'position:';
86
- var value = 'sticky';
87
- var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
88
-
89
- var el = document.createElement('a');
90
- var mStyle = el.style;
91
- mStyle.cssText = prop + prefixes.join(value + ';' + prop).slice(0, - prop.length);
92
-
93
- return mStyle.position.indexOf(value) !== -1;
94
- }
95
-
96
- /**
97
- * Returns Node List from HTML markup string
98
- * @param {String} markup HTML markup to create into an element
99
- */
100
- export function createElementFromHtml(markup) {
101
- const doc = new DOMParser().parseFromString(markup, 'text/html');
102
- return doc.body.firstElementChild;
103
- }
104
-
105
- /**
106
- * Creates a new element with attributes and children
107
- * @param {Object} config Configuration object
108
- * @param {String} config.tag Node type (ie 'div')
109
- * @param {Object} config.attributes Attributes to add to the new element
110
- * @param {Array} config.children Array of children to append into the new element
111
- */
112
- export function composeElement(config) { // tag, attributes = {}, children
113
- const { tag, attributes, children } = config;
114
- const element = document.createElement(tag);
115
- if (attributes) {
116
- Object.entries(attributes).forEach((a, v) => element.setAttribute(a, v));
117
- }
118
- if (children) {
119
- children.forEach(c => element.appendChild(c));
120
- }
121
- return element;
122
- }
@@ -1,69 +0,0 @@
1
- // Goal: minimzing console conditions for nessasary production log statements
2
-
3
- /**
4
- * Configuration Object
5
- */
6
- const config = {
7
- debug: false,
8
- warningsAlways: true,
9
- errorsAlways: true,
10
- outputContext: false
11
- };
12
-
13
- const hasConsole = "console" in window;
14
-
15
- // If no context output only if config (global) debug is enabled
16
- function allow(context) {
17
- return hasConsole && config.debug && (context?.debug || context == null);
18
- };
19
- function getName(context) {
20
- return typeof context === "object" && context?.constructor?.name;
21
- };
22
- function output(method, context, messages) {
23
- const label = getName(context) || "Logger";
24
- console[method](label, ...messages);
25
- if (config.outputContext) {
26
- console.log('Context:\n', context);
27
- }
28
- };
29
-
30
- /**
31
- * Changes to make to configuration
32
- * @param {Object} changes
33
- */
34
- export function set(changes) {
35
- Object.assign(config, changes);
36
- }
37
-
38
- /**
39
- * Proxy Console.log
40
- * @param {Object} context Class instance (optional), will rely on classes (debug) property for output
41
- * @param {...any} messages
42
- */
43
- export function log(context, ...messages) {
44
- if (allow(context)) {
45
- output("log", context, messages);
46
- }
47
- }
48
-
49
- /**
50
- * Proxy Console.warn
51
- * @param {Object} context Class instance (optional), will rely on classes (debug) property for output
52
- * @param {...any} messages
53
- */
54
- export function logWarning(context, ...messages) {
55
- if (config.warningsAlways || allow(context)) {
56
- output("warn", context, messages);
57
- }
58
- }
59
-
60
- /**
61
- * Proxy Console.error
62
- * @param {Object} context Class instance (optional), will rely on classes (debug) property for output
63
- * @param {...any} messages
64
- */
65
- export function logError(context, ...messages) {
66
- if (config.errorsAlways || allow(context)) {
67
- output("error", context, messages);
68
- }
69
- }
@@ -1,22 +0,0 @@
1
- // Version: 1.0.0
2
-
3
- /**
4
- * Checks object has required properties
5
- * @param {array.string} required Array of properties to check for
6
- * @return {function} Function for user to use to test for props passed on objects
7
- * @example
8
- * const testProps = hasRequiredProps(["name", "date"]);
9
- * if (testProps(userConfiguration)) {
10
- * // Stuff
11
- * }
12
- */
13
- export function hasRequiredProps(required) {
14
- /**
15
- * Function used for testing on user end
16
- * @param {object} testObject Object to test on
17
- * @return {Boolean}
18
- */
19
- return function(object) {
20
- return required.every(value => object.hasOwnProperty(value));
21
- }
22
- }
@@ -1,43 +0,0 @@
1
- // Version: 1.0.0
2
-
3
- /**
4
- * Returns a function, that, as long as it continues to be invoked, will not be triggered
5
- * @param {Function} callback Function to invoke
6
- * @param {Number} wait Amount of time after (milliseconds)
7
- * @param {Boolean} immediate trigger the function on the leading edge, instead of the trailing.
8
- * @param {Object} valueThis Context for function
9
- * @author David Walsh
10
- * - https://davidwalsh.name/javascript-debounce-function
11
- */
12
- export function debounce(callback, wait, immediate, valueThis) {
13
- var timeout;
14
- return function executedFunction() {
15
- var context = valueThis || this;
16
- var args = arguments;
17
- var later = function() {
18
- timeout = null;
19
- if (!immediate) callback.apply(context, args);
20
- };
21
- var callNow = immediate && !timeout;
22
- clearTimeout(timeout);
23
- timeout = setTimeout(later, wait);
24
- if (callNow) callback.apply(context, args);
25
- };
26
- }
27
-
28
- /**
29
- * Debounces function using requestAnimationFrame()
30
- * @param {Function} callback Function to invoke, cancelled if called faster than RAF
31
- * @param {Object} context Optional context to bind to callback
32
- */
33
- export function debounceAnimationFrame(callback, context = null) {
34
- let tid;
35
- return function debounced() {
36
- const args = arguments;
37
- if (tid) window.cancelAnimationFrame(tid);
38
- tid = window.requestAnimationFrame(() => {
39
- tid = false;
40
- callback.apply(context, args);
41
- });
42
- };
43
- }
@@ -1,10 +0,0 @@
1
- // Version: 1.0.0
2
-
3
- /**
4
- * Common Regular Expression Patterns
5
- */
6
- export const patterns = {
7
- linebreaks: /(\r\n|\n|\r)/gm,
8
- multiSpace: /\s+/g,
9
- htmlTag: /<\/?[^>]+(>|$)/g
10
- };
@@ -1,107 +0,0 @@
1
- import { patterns } from "./regex.js";
2
- /**
3
- * Will return an object with the separation details
4
- * @param {[type]} string [description]
5
- * @return {object} keys: value, original, unit
6
- */
7
- export function separateCssUnit(original) {
8
- const pattern = /(px|vw|vh|%|em|rem)/i;
9
- return {
10
- original,
11
- value: original.replace(pattern, ""),
12
- unit: original.match(pattern)[0]
13
- };
14
- }
15
-
16
- /**
17
- * Removes HTML tags from string
18
- * - Note you can use document.createElement and grab textContent (but this could execute code in browser)
19
- * - The method below will just use regex without creating Nodes
20
- * @param {String} html HTML string to find/replace
21
- */
22
- export function stripTags(html) {
23
- return html.replace(patterns.htmlTag, "");
24
- }
25
-
26
- /**
27
- *
28
- * @param {String} string String to trim
29
- * @returns
30
- */
31
- export function trimDoubleSpaces(string) {
32
- return string.replace(patterns.multiSpace, "");
33
- }
34
-
35
- /**
36
- * Remove line breaks
37
- * @param {String} string String to trim
38
- * @returns {String}
39
- */
40
- export function trimLineBreaks(string) {
41
- return string.replace(patterns.linebreaks, "");
42
- }
43
-
44
- /**
45
- * Designed originally to flatten style definitions
46
- * @param {String} string String to trim
47
- * @returns {String}
48
- */
49
- export function trimWhitespace(string) {
50
- return string.replace(patterns.linebreaks, "")
51
- .replace(patterns.multiSpace, " ")
52
- .trim();
53
- }
54
-
55
- /**
56
- * Truncates string with ellipsis if over the max, note use framework function
57
- * if you need to know the effects of the truncate process (returns an object
58
- * with info instead) this function only modifies the string
59
- * @param {string} string String to possibly truncate
60
- * @param {number} max How many characters max?
61
- * @return {string}
62
- */
63
- export function truncate(string, max, overflowChar = '…') {
64
- return string.length <= max ? string : string.slice(0, max) + overflowChar;
65
- }
66
-
67
- /**
68
- * Replaces non safe characters with "-"
69
- * - Does not escape characters
70
- * - Used for id's and classnames or things that can't have anything but normal a-z 0-9
71
- */
72
- export function urlize(string) {
73
- var newString;
74
- string = string.replace(/^[^-_a-zA-Z]+/, '').replace(/^-(?:[-0-9]+)/, '-');
75
- newString = string && string.replace(/[^-_a-zA-Z0-9]+/g, '-');
76
- return newString;
77
- }
78
-
79
- /**
80
- * Converts date to abbreviated month date ie "Mar 7, 2018"
81
- * @param {String|Date} str Date or date string (passed through date constructor)
82
- * @return {String} Pretty date string
83
- */
84
- export function prettyDate(str) {
85
- const date = new Date(str);
86
- const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
87
- return `${ months[date.getMonth()] } ${ date.getDate() }, ${ date.getFullYear() }`;
88
- }
89
-
90
- /**
91
- * Generates a random string of defined length based on
92
- * a string of allowed characters.
93
- *
94
- * @param {number} length How many random characters will be in the returned string. Defaults to 10
95
- * @param {string} allowed Which characters can be used when creating the random string. Defaults to A-Z,a-z,0-9
96
- * @return {string} A string of random characters
97
- */
98
- export function randomString(
99
- length = 10,
100
- allowed = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789'
101
- ) {
102
- let result = '';
103
- for (let i = 0; i < length; i++) {
104
- result += allowed.charAt(Math.floor(Math.random() * allowed.length));
105
- }
106
- return result;
107
- }
@@ -1,3 +0,0 @@
1
- # Waypoints
2
-
3
- Plugins/scripts for waypoints
@@ -1,76 +0,0 @@
1
- /**
2
- * @todo This file is untested since conversion to module
3
- */
4
-
5
- import ElementWaypoint from "../waypoints/element-waypoint.js";
6
-
7
- export default function init(anchors, caret, options) {
8
- const defaults = {
9
- offsetTop: "20%",
10
- activeClass: "active"
11
- };
12
- options = Object.assign(defaults, options);
13
-
14
- const targets = anchors.map(a => document.getElementById(a.hash.substr(1)));
15
- const { activeClass } = options;
16
- let caretNotEntered = true;
17
- let caretVisible;
18
-
19
- targets.forEach(element => new ElementWaypoint({ offsetTop: options.offsetTop, handler, element }));
20
-
21
- function handler(entering, direction) {
22
- const { element } = this.options;
23
- const anchor = anchors[ targets.indexOf(element) ];
24
- const index = anchors.indexOf(anchor);
25
-
26
- if (entering) {
27
- removeActiveAll();
28
- activateAnchor(anchor);
29
- anchor.classList.add(activeClass);
30
- // Above the first
31
- } else if (index === 0 && direction === "up") {
32
- removeActiveAll(true);
33
- // Since we are using headlines instaed of containers we need to
34
- // activate when user is scrolling up. By finding the index of the anchor
35
- // above the recently deactivated headline target
36
- } else if (direction === "up") {
37
- removeActiveAll();
38
- activateAnchor(anchors[index - 1]);
39
- }
40
- }
41
- function removeActiveAll(hideCaret) {
42
- anchors.forEach(anchor => anchor.classList.remove(activeClass));
43
- if (hideCaret) {
44
- setCaretVisibility(false);
45
- }
46
- }
47
- function activateAnchor(anchor) {
48
- // Block transtions on first reveal
49
- if (caretNotEntered) {
50
- caret.style.transition = 'none';
51
- }
52
- anchor.classList.add(activeClass);
53
- setCaretPosition(anchor);
54
- if (!caretVisible) {
55
- setCaretVisibility(true);
56
- }
57
- // Add the transitions back in for the next change to visiblity or position
58
- if (caret && caretNotEntered) {
59
- caretNotEntered = false;
60
- caret.offsetHeight; // Force repaint (visiblity above)
61
- caret.style.transition = ''; // Then remove the transition block
62
- }
63
- }
64
- function setCaretPosition(anchor) {
65
- if (!caret) return;
66
- const position = anchor.offsetTop;
67
- const height = anchor.clientHeight;
68
- caret.style.transform = `translateY(${ position + (height / 2) }px)`;
69
- // caret.style.height = `${ anchor.clientHeight }px`;
70
- }
71
- function setCaretVisibility(visible) {
72
- if (!caret) return;
73
- caret.style.opacity = +(visible);
74
- caretVisible = visible;
75
- }
76
- }
@@ -1,75 +0,0 @@
1
- // =============================================================================
2
- // Element Waypoint
3
- // =============================================================================
4
-
5
- // Version: 1.0.1
6
-
7
- // Requires: Global access to window.Waypoint
8
-
9
- /**
10
- * Reusable waypoint class that adds two waypoints in order to call user
11
- * handler when the element is in view or out of view.
12
- */
13
- export default class ElementWaypoint {
14
- static defaults = {
15
- context: window,
16
- offsetTop: 0,
17
- offsetBottom: 0,
18
- };
19
- /**
20
- * Fired when the scroll trigger enters and leaves an element
21
- *
22
- * @callback handler
23
- * @param {Boolean} entering Whether the user has entered the element
24
- * @param {String} direction The direction they entered/exited from (up|down)
25
- */
26
- /**
27
- *
28
- * @param {Object} options Options to merge with defaults
29
- * @param {HTMLElement} options.element Element to wacth
30
- * @param {HTMLElement} options.context Context for Waypoints (element scrollable parent)
31
- * @param {String|Function} options.offsetBottom Offset below the element (see Waypoints API)
32
- * @param {String|Function} options.offsetTop Offset above the element (see Waypoints API)
33
- * @param {handler} options.handler Fired when the scroll trigger enters and leaves an element
34
- */
35
- constructor(options) {
36
- this.options = Object.assign({}, ElementWaypoint.defaults, options);
37
- const {
38
- handler,
39
- offsetTop,
40
- offsetBottom,
41
- element,
42
- context
43
- } = this.options;
44
- // instantiates waypoint instances (top and bottom of element)
45
- // The offset bottom is function so it can be recalculated
46
- // User offsetBottom can be a function as well
47
- this.top = new Waypoint({
48
- element,
49
- context,
50
- offset: offsetTop,
51
- handler(d) {
52
- handler.call(this, d === "down", d);
53
- },
54
- });
55
- this.bottom = new Waypoint({
56
- element,
57
- context,
58
- offset() {
59
- const offset = typeof offsetBottom === "function" ? offsetBottom() : offsetBottom;
60
- const height = this.element.offsetHeight;
61
- return (-height) + offset;
62
- },
63
- handler(d) {
64
- handler.call(this, d === "up", d);
65
- }
66
- });
67
- }
68
- /**
69
- * Destroys the waypoints
70
- */
71
- destroy() {
72
- this.top.destroy();
73
- this.bottom.destroy();
74
- }
75
- }
@@ -1,106 +0,0 @@
1
- Example of anchor menu setup
2
-
3
- ```js
4
- /**
5
- * @todo This needs to be converted for reuse!
6
- */
7
-
8
- // Creates anchor menu and attaches waypoints
9
- import ElementWaypoint from "../waypoints/element-waypoint.js";
10
- import Tooltip from "../ui/tooltip.js";
11
-
12
- window.addEventListener("load", init);
13
-
14
- function init() {
15
- const anchors = [];
16
- let idCount = 0;
17
- const activeClass = 'header__page-link--active';
18
- const ignoreSelector = '[data-page-link-search-ignore]';
19
- const searchSelector = `h1:not(${ ignoreSelector }), h2:not(${ ignoreSelector })`;
20
- const container = document.querySelector('.header__page-links');
21
- const context = document.querySelector('[data-page-link-search]');
22
- if (!container || !context) return;
23
- const headlineNodes = [ ...context.querySelectorAll(searchSelector) ];
24
- // Filter out parents too
25
- const headlines = headlineNodes.filter(n => n.closest(ignoreSelector) === null);
26
-
27
- headlines.forEach(element => {
28
- const id = getId(element);
29
- const anchor = document.createElement('a');
30
- const span = document.createElement('span');
31
- anchor.classList.add('header__page-link');
32
- anchor.href = "#" + id;
33
- span.classList.add('hidden-visually');
34
- span.textContent = element.textContent;
35
- anchor.appendChild(span);
36
- container.append(anchor);
37
- anchors.push(anchor);
38
- anchor.addEventListener("focusin", onHover);
39
- anchor.addEventListener("mouseenter", onHover);
40
- anchor.addEventListener("focusout", onHoverOut);
41
- anchor.addEventListener("mouseleave", onHoverOut);
42
- // Attach watcher
43
- (new ElementWaypoint({
44
- offsetTop: '20%',
45
- handler: waypointHandler,
46
- element
47
- }));
48
- });
49
-
50
- function waypointHandler(entering, direction) {
51
- const { element } = this.options;
52
- const anchor = anchors[ headlines.indexOf(element) ];
53
- const index = anchors.indexOf(anchor);
54
-
55
- if (entering) {
56
- removeActiveAll();
57
- activateAnchor(anchor);
58
- // Above the first
59
- } else if (index === 0 && direction === "up") {
60
- removeActiveAll();
61
- // Since we are using headlines instaed of containers we need to
62
- // activate when user is scrolling up. By finding the index of the anchor
63
- // above the recently deactivated headline target
64
- } else if (direction === "up") {
65
- removeActiveAll();
66
- activateAnchor(anchors[index - 1]);
67
- }
68
- }
69
- function removeActiveAll() {
70
- anchors.forEach(anchor => anchor.classList.remove(activeClass));
71
- }
72
- function activateAnchor(anchor) {
73
- anchor.classList.add(activeClass);
74
- }
75
- function getId(element) {
76
- if (!element.id) element.id = `page-link--${ ++idCount }`;
77
- return element.id;
78
- }
79
- }
80
-
81
- // Tooltip Related
82
- // =============================================================================
83
-
84
- let tooltip;
85
-
86
- function onHover(event) {
87
- const { target } = event;
88
- destroy();
89
- tooltip = new Tooltip(target, target.textContent, {
90
- classes: [
91
- "site-tooltip",
92
- "page-link-tooltip"
93
- ]
94
- });
95
- }
96
- function onHoverOut() {
97
- destroy();
98
- }
99
- function destroy() {
100
- if (tooltip) {
101
- tooltip.destroy();
102
- tooltip = null;
103
- }
104
- }
105
-
106
- ```
@@ -1,32 +0,0 @@
1
- import ElementWaypoint from "../waypoints/element-waypoint.js";
2
-
3
- export default function init(config) {
4
- const defaults = {
5
- attr: 'data-site-waypoint',
6
- options: {
7
- offsetTop: '20%'
8
- }
9
- }
10
- config = Object.assign(defaults, config);
11
- const elements = document.querySelectorAll(`[${ options.attr }]`);
12
-
13
- return [ ...elements ].map((element) => {
14
-
15
- const options = Object.assign(config.options, element.dataset.siteWaypoint);
16
- const setState = (active, direction) => {
17
- element.setAttribute(`${ attr }-state`, `active: ${ active }, direction: ${ direction }`);
18
- };
19
-
20
- setState(false, null);
21
-
22
- return new ElementWaypoint({
23
- ...options,
24
- element,
25
- handler(entering, direction) {
26
- setState(entering, direction);
27
- }
28
- });
29
- });
30
- }
31
-
32
-