u2ui 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.
- package/.htaccess +7 -0
- package/LICENSE +21 -0
- package/README.md +36 -0
- package/attr/behavior/README.md +25 -0
- package/attr/behavior/behavior.js +261 -0
- package/attr/behavior/manifest.json +43 -0
- package/attr/behavior/tests/minimal.html +19 -0
- package/attr/behavior/tests/test.html +98 -0
- package/attr/confirm/README.md +36 -0
- package/attr/confirm/confirm.js +90 -0
- package/attr/confirm/manifest.json +43 -0
- package/attr/confirm/tests/minimal.html +23 -0
- package/attr/confirm/tests/test.html +79 -0
- package/attr/draghandle/README.md +41 -0
- package/attr/draghandle/draghandle.js +42 -0
- package/attr/draghandle/tests/minimal.html +44 -0
- package/attr/focusgroup/README.md +49 -0
- package/attr/focusgroup/focusgroup.js +100 -0
- package/attr/focusgroup/manifest.json +38 -0
- package/attr/focusgroup/tests/minimal.html +27 -0
- package/attr/focusgroup/tests/test.html +154 -0
- package/attr/href/README.md +38 -0
- package/attr/href/href.js +42 -0
- package/attr/href/manifest.json +43 -0
- package/attr/href/tests/minimal.html +17 -0
- package/attr/href/tests/test.html +70 -0
- package/attr/intersect/README.md +42 -0
- package/attr/intersect/intersect.js +99 -0
- package/attr/intersect/manifest.json +57 -0
- package/attr/intersect/tests/minimal.html +30 -0
- package/attr/intersect/tests/test.html +64 -0
- package/attr/navigable/README.md +31 -0
- package/attr/navigable/TargetObserver.js +91 -0
- package/attr/navigable/U2TargetObserver.js +75 -0
- package/attr/navigable/manifest.json +42 -0
- package/attr/navigable/navigable.js +87 -0
- package/attr/navigable/tests/U1TargetObserver.html +56 -0
- package/attr/navigable/tests/minimal.html +17 -0
- package/attr/navigable/tests/targetObserver.html +106 -0
- package/attr/navigable/tests/test.html +84 -0
- package/attr/parallax/README.md +48 -0
- package/attr/parallax/parallax.js +119 -0
- package/attr/parallax/tests/minimal.html +25 -0
- package/attr/parallax/tests/performance.html +102 -0
- package/attr/parallax/tests/test.html +108 -0
- package/attr/skin/README.md +59 -0
- package/attr/skin/skin.css +51 -0
- package/attr/skin/tests/minimal.html +34 -0
- package/attr/skin/tests/test.html +96 -0
- package/class/badge/README.md +25 -0
- package/class/badge/badge.css +35 -0
- package/class/badge/tests/minimal.html +17 -0
- package/class/badge/tests/test.html +112 -0
- package/class/card1/README.md +45 -0
- package/class/card1/card1.css +30 -0
- package/class/card1/tests/minimal.html +33 -0
- package/class/card1/tests/test.html +78 -0
- package/class/flex/README.md +62 -0
- package/class/flex/flex.css +25 -0
- package/class/flex/tests/minimal.html +31 -0
- package/class/flex/tests/test.html +58 -0
- package/class/grid/README.md +52 -0
- package/class/grid/grid.css +40 -0
- package/class/grid/tests/minimal.html +34 -0
- package/class/grid/tests/test.html +78 -0
- package/class/input/README.md +49 -0
- package/class/input/input.css +33 -0
- package/class/input/tests/minimal.html +39 -0
- package/class/input/tests/test.html +29 -0
- package/class/reset/README.md +47 -0
- package/class/reset/reset.css +8 -0
- package/class/reset/tests/minimal.html +23 -0
- package/class/table/README.md +57 -0
- package/class/table/table.css +126 -0
- package/class/table/tests/minimal.html +40 -0
- package/class/table/tests/test.html +226 -0
- package/class/unstyle/README.md +32 -0
- package/class/unstyle/tests/minimal.html +22 -0
- package/class/unstyle/tests/test.html +32 -0
- package/class/unstyle/unstyle.css +12 -0
- package/class/width/README.md +48 -0
- package/class/width/tests/minimal.html +27 -0
- package/class/width/tests/test.html +101 -0
- package/class/width/width.css +22 -0
- package/css/base/README.md +25 -0
- package/css/base/base.css +127 -0
- package/css/base/beta.css +50 -0
- package/css/base/full.css +5 -0
- package/css/base/nomotion.css +9 -0
- package/css/base/print.css +36 -0
- package/css/base/tests/nomotion.html +89 -0
- package/css/base/tests/test.html +539 -0
- package/css/classes/README.md +17 -0
- package/css/classes/classes.css +78 -0
- package/css/classes/tests/test.html +63 -0
- package/css/classless/README.md +26 -0
- package/css/classless/aria.css +64 -0
- package/css/classless/classless.css +124 -0
- package/css/classless/full.css +11 -0
- package/css/classless/more.css +340 -0
- package/css/classless/simple.css +103 -0
- package/css/classless/snippeds/a/icons.css +12 -0
- package/css/classless/snippeds/experiments/conventions.css +41 -0
- package/css/classless/snippeds/hr/gradient.css +3 -0
- package/css/classless/snippeds/hr/section_sign.css +16 -0
- package/css/classless/snippeds/hr/tests.html +50 -0
- package/css/classless/tests/aria.html +101 -0
- package/css/classless/tests/foreign/classless-almond.css.html +445 -0
- package/css/classless/tests/foreign/classless-classless.css.html +831 -0
- package/css/classless/tests/foreign/classless-mvp.html +415 -0
- package/css/classless/tests/foreign/classless.sakura.html +224 -0
- package/css/classless/tests/foreign/stylestage.dev.html +304 -0
- package/css/classless/tests/foreign/test-homogenizer.html +433 -0
- package/css/classless/tests/foreign/test-html5-elements-tester.html +956 -0
- package/css/classless/tests/foreign/test-opinionated_css.html +148 -0
- package/css/classless/tests/list-bullet.html +110 -0
- package/css/classless/tests/more.html +246 -0
- package/css/classless/tests/oklch.experiments.html +280 -0
- package/css/classless/tests/test.html +106 -0
- package/css/classless/tests/variables.html +109 -0
- package/css/classless/variables.css +99 -0
- package/css/norm/README.md +37 -0
- package/css/norm/beta.css +40 -0
- package/css/norm/norm.css +98 -0
- package/css/norm/oldies.css +60 -0
- package/css/norm/tests/test.html +434 -0
- package/css/norm/tests/test.js +103 -0
- package/el/accordion/README.md +59 -0
- package/el/accordion/accordion.css +7 -0
- package/el/accordion/accordion.js +258 -0
- package/el/accordion/manifest.json +57 -0
- package/el/accordion/tests/minimal.html +44 -0
- package/el/accordion/tests/test.html +168 -0
- package/el/alert/README.md +67 -0
- package/el/alert/alert copy.js +224 -0
- package/el/alert/alert.css +73 -0
- package/el/alert/alert.js +187 -0
- package/el/alert/manifest.json +77 -0
- package/el/alert/tests/minimal.html +36 -0
- package/el/alert/tests/test.html +105 -0
- package/el/buttongroup/README.md +36 -0
- package/el/buttongroup/buttongroup.css +30 -0
- package/el/buttongroup/buttongroup.js +56 -0
- package/el/buttongroup/tests/minimal.html +31 -0
- package/el/buttongroup/tests/test.html +83 -0
- package/el/bytes/README.md +41 -0
- package/el/bytes/bytes.css +6 -0
- package/el/bytes/bytes.js +97 -0
- package/el/bytes/manifest.json +95 -0
- package/el/bytes/tests/minimal.html +19 -0
- package/el/bytes/tests/test.html +117 -0
- package/el/carousel/README.md +52 -0
- package/el/carousel/carousel.css +46 -0
- package/el/carousel/carousel.js +371 -0
- package/el/carousel/manifest.json +58 -0
- package/el/carousel/tests/experiments.html +77 -0
- package/el/carousel/tests/minimal.html +31 -0
- package/el/carousel/tests/nested.html +54 -0
- package/el/carousel/tests/test.html +136 -0
- package/el/carousel-nav/README.md +40 -0
- package/el/carousel-nav/carousel-nav.js +74 -0
- package/el/carousel-nav/tests/minimal.html +32 -0
- package/el/carousel-nav/tests/test.html +59 -0
- package/el/code/README.md +68 -0
- package/el/code/code.css +46 -0
- package/el/code/code.js +289 -0
- package/el/code/manifest.json +66 -0
- package/el/code/tests/minimal.html +35 -0
- package/el/code/tests/test.html +162 -0
- package/el/copy/README.md +35 -0
- package/el/copy/copy.css +3 -0
- package/el/copy/copy.js +118 -0
- package/el/copy/manifest.json +49 -0
- package/el/copy/tests/minimal.html +21 -0
- package/el/copy/tests/test.html +75 -0
- package/el/counter/README.md +47 -0
- package/el/counter/counter.css +8 -0
- package/el/counter/counter.js +95 -0
- package/el/counter/manifest.json +59 -0
- package/el/counter/tests/minimal.html +27 -0
- package/el/counter/tests/test.html +106 -0
- package/el/ico/README.md +162 -0
- package/el/ico/font/Font Awesome.css +22 -0
- package/el/ico/font/LigatureSymbols.css +7 -0
- package/el/ico/font/Material Icons.css +6 -0
- package/el/ico/font/RemixFilled.css +8 -0
- package/el/ico/font/RemixOutlined.css +8 -0
- package/el/ico/font/old/anicons.css +31 -0
- package/el/ico/font/old/devicons.css +210 -0
- package/el/ico/font/old/material.all.css +36 -0
- package/el/ico/font/old/remix.css +15 -0
- package/el/ico/font/old/utf8.css +54 -0
- package/el/ico/ico.css +111 -0
- package/el/ico/ico.js +189 -0
- package/el/ico/manifest.json +86 -0
- package/el/ico/tests/combinations.html +86 -0
- package/el/ico/tests/emojis.html +213 -0
- package/el/ico/tests/fonts.html +110 -0
- package/el/ico/tests/ico-directory.html +254 -0
- package/el/ico/tests/minimal.html +46 -0
- package/el/ico/tests/test.html +210 -0
- package/el/ico/tests/util-multi.svg +6 -0
- package/el/ico/tests/util.css +2 -0
- package/el/ico/tests/util.js +110 -0
- package/el/input/README.md +39 -0
- package/el/input/input.css +35 -0
- package/el/input/input.js +331 -0
- package/el/input/tests/formParticipation.html +113 -0
- package/el/input/tests/minimal.html +33 -0
- package/el/input/tests/test.html +258 -0
- package/el/masonry/README.md +51 -0
- package/el/masonry/manifest.json +60 -0
- package/el/masonry/masonry.css +27 -0
- package/el/masonry/masonry.js +92 -0
- package/el/masonry/tests/minimal.html +39 -0
- package/el/masonry/tests/test.html +42 -0
- package/el/number/README.md +47 -0
- package/el/number/manifest.json +121 -0
- package/el/number/number.css +6 -0
- package/el/number/number.js +67 -0
- package/el/number/tests/minimal.html +25 -0
- package/el/number/tests/test.html +138 -0
- package/el/out/README.md +32 -0
- package/el/out/manifest.json +38 -0
- package/el/out/out.css +2 -0
- package/el/out/out.js +59 -0
- package/el/out/tests/minimal.html +25 -0
- package/el/out/tests/test.html +37 -0
- package/el/parallax-bg/README.md +36 -0
- package/el/parallax-bg/parallax-bg.css +13 -0
- package/el/parallax-bg/parallax-bg.js +186 -0
- package/el/parallax-bg/tests/bg.jpg +0 -0
- package/el/parallax-bg/tests/bg1.jpg +0 -0
- package/el/parallax-bg/tests/bg2.jpg +0 -0
- package/el/parallax-bg/tests/demo.html +88 -0
- package/el/parallax-bg/tests/minimal.html +30 -0
- package/el/parallax-bg/tests/test.html +64 -0
- package/el/parallax-bg/tests/visible.html +90 -0
- package/el/qrcode/README.md +38 -0
- package/el/qrcode/manifest.json +43 -0
- package/el/qrcode/package.json +22 -0
- package/el/qrcode/qrcode.css +13 -0
- package/el/qrcode/qrcode.js +46 -0
- package/el/qrcode/tests/minimal.html +26 -0
- package/el/qrcode/tests/test.html +31 -0
- package/el/rating/README.md +45 -0
- package/el/rating/manifest.json +65 -0
- package/el/rating/rating.css +11 -0
- package/el/rating/rating.js +139 -0
- package/el/rating/tests/minimal.html +26 -0
- package/el/rating/tests/tests.html +77 -0
- package/el/rte/README.md +37 -0
- package/el/rte/rte.css +9 -0
- package/el/rte/rte.js +56 -0
- package/el/rte/tests/minimal.html +25 -0
- package/el/rte/tests/test.html +37 -0
- package/el/skeleton/README.md +30 -0
- package/el/skeleton/manifest.json +51 -0
- package/el/skeleton/skeleton.css +61 -0
- package/el/skeleton/skeleton.js +72 -0
- package/el/skeleton/tests/minimal.html +22 -0
- package/el/skeleton/tests/test.html +22 -0
- package/el/splitbutton/README.md +39 -0
- package/el/splitbutton/splitbutton.css +48 -0
- package/el/splitbutton/splitbutton.js +26 -0
- package/el/splitbutton/tests/minimal.html +30 -0
- package/el/splitbutton/tests/test.html +68 -0
- package/el/splitpanel/README.md +39 -0
- package/el/splitpanel/manifest.json +49 -0
- package/el/splitpanel/splitpanel.css +17 -0
- package/el/splitpanel/splitpanel.js +116 -0
- package/el/splitpanel/tests/minimal.html +31 -0
- package/el/splitpanel/tests/tests.html +121 -0
- package/el/table/README.md +68 -0
- package/el/table/manifest.json +43 -0
- package/el/table/table.css +59 -0
- package/el/table/table.js +194 -0
- package/el/table/tests/minimal.html +38 -0
- package/el/table/tests/test.html +108 -0
- package/el/tabs/README.md +50 -0
- package/el/tabs/manifest.json +59 -0
- package/el/tabs/tabs.css +23 -0
- package/el/tabs/tabs.js +210 -0
- package/el/tabs/tests/minimal.html +35 -0
- package/el/tabs/tests/test.html +180 -0
- package/el/textfit/README.md +34 -0
- package/el/textfit/manifest.json +45 -0
- package/el/textfit/tests/minimal.html +25 -0
- package/el/textfit/tests/test.html +26 -0
- package/el/textfit/textfit.css +6 -0
- package/el/textfit/textfit.js +80 -0
- package/el/time/README.md +72 -0
- package/el/time/manifest.json +118 -0
- package/el/time/tests/minimal.html +19 -0
- package/el/time/tests/test.html +160 -0
- package/el/time/time copy.js +141 -0
- package/el/time/time.js +168 -0
- package/el/time/time.old.uhtml.js +129 -0
- package/el/tooltip/README.md +48 -0
- package/el/tooltip/manifest.json +69 -0
- package/el/tooltip/tests/minimal.html +25 -0
- package/el/tooltip/tests/test.html +178 -0
- package/el/tooltip/tooltip.css +97 -0
- package/el/tooltip/tooltip.js +82 -0
- package/el/tree1/README.md +111 -0
- package/el/tree1/manifest.json +78 -0
- package/el/tree1/tests/animated.html +134 -0
- package/el/tree1/tests/custom.html +51 -0
- package/el/tree1/tests/minimal.html +44 -0
- package/el/tree1/tests/test.html +260 -0
- package/el/tree1/tree1.css +26 -0
- package/el/tree1/tree1.js +265 -0
- package/el/typewriter/README.md +62 -0
- package/el/typewriter/manifest.json +66 -0
- package/el/typewriter/tests/minimal.html +25 -0
- package/el/typewriter/tests/test.html +78 -0
- package/el/typewriter/typewriter.css +6 -0
- package/el/typewriter/typewriter.js +166 -0
- package/el/typewriter/typewriter.mp3 +0 -0
- package/js/Placer/Placer.js +156 -0
- package/js/Placer/README.md +62 -0
- package/js/Placer/tests/minimal.html +34 -0
- package/js/Placer/tests/test.html +49 -0
- package/js/PointerObserver/PointerObserver.js +130 -0
- package/js/PointerObserver/README.md +34 -0
- package/js/PointerObserver/tests/minimal.html +29 -0
- package/js/PointerObserver/tests/test.html +35 -0
- package/js/SelectorObserver/README.md +47 -0
- package/js/SelectorObserver/SelectorObserver.js +201 -0
- package/js/SelectorObserver/tests/minimal.html +21 -0
- package/js/SelectorObserver/tests/test.html +57 -0
- package/js/SelectorObserver/tests/tests.html +161 -0
- package/js/contextmenu/README.md +93 -0
- package/js/contextmenu/contextmenu.js +336 -0
- package/js/contextmenu/tests/minimal.html +44 -0
- package/js/contextmenu/tests/test.html +131 -0
- package/js/dialog/README.md +49 -0
- package/js/dialog/dialog.js +261 -0
- package/js/dialog/notification.mp3 +0 -0
- package/js/dialog/tests/minimal.html +29 -0
- package/js/dialog/tests/notification.mp3 +0 -0
- package/js/dialog/tests/test.html +135 -0
- package/js/rte/README.md +44 -0
- package/js/rte/old/NodeCleaner.js +315 -0
- package/js/rte/old/Rte/Rte.mjs +316 -0
- package/js/rte/old/Rte/Rte.ui.items.mjs +543 -0
- package/js/rte/old/Rte/Rte.ui.mjs +154 -0
- package/js/rte/old/Rte/crossbrowser.mjs +323 -0
- package/js/rte/old/Rte/font/tinymce.svg +98 -0
- package/js/rte/old/Rte/font/tinymce.woff +0 -0
- package/js/rte/old/Rte/helpers.mjs +159 -0
- package/js/rte/old/Rte/htmlparser.mjs +178 -0
- package/js/rte/old/Rte/index.mjs +5 -0
- package/js/rte/old/Rte/main.css +189 -0
- package/js/rte/old/old.rte.js +132 -0
- package/js/rte/old/range-selection.old.js +394 -0
- package/js/rte/rte.js +7 -0
- package/js/rte/src/behavior.js +228 -0
- package/js/rte/src/events.js +73 -0
- package/js/rte/src/fixes.js +251 -0
- package/js/rte/src/range.js +472 -0
- package/js/rte/src/rte.js +72 -0
- package/js/rte/src/ui/items/ai.js +167 -0
- package/js/rte/src/ui/items/code.js +93 -0
- package/js/rte/src/ui/items/undo.js +183 -0
- package/js/rte/src/ui.items.js +571 -0
- package/js/rte/src/ui.js +269 -0
- package/js/rte/src/util/htmlparser.js +178 -0
- package/js/rte/src/util/indentHtml.js +48 -0
- package/js/rte/tests/ai.html +81 -0
- package/js/rte/tests/behavior.html +88 -0
- package/js/rte/tests/events.html +69 -0
- package/js/rte/tests/fixes.html +95 -0
- package/js/rte/tests/minimal.html +34 -0
- package/js/rte/tests/notes.md +6 -0
- package/js/rte/tests/range.html +167 -0
- package/js/rte/tests/selection-explorer.html +222 -0
- package/js/rte/tests/test.html +92 -0
- package/js/shortcut/README.md +33 -0
- package/js/shortcut/shortcut.js +89 -0
- package/js/shortcut/tests/minimal.html +23 -0
- package/js/shortcut/tests/test.html +68 -0
- package/package.json +12 -0
- package/u2/README.md +4 -0
- package/u2/auto.js +161 -0
- package/u2/auto.ui.js +85 -0
- package/u2/experiments/Waiter/test.html +132 -0
- package/u2/experiments/getElementByIdPromise/test.html +76 -0
- package/u2/experiments/patchInputValue.html +124 -0
- package/u2/experiments/radiobutton/test.html +75 -0
- package/u2/experiments/tests/test.html +223 -0
- package/u2/experiments/u1-responsive/responsive.js +62 -0
- package/u2/experiments/u1-responsive/test.html +65 -0
- package/u2/experiments/u2Element.js +139 -0
- package/u2/experiments/u2Element.test.html +47 -0
- package/u2/old-stuff/IterableWeakMap/mod.js +70 -0
- package/u2/old-stuff/css/onStyleSheet/mod.js +114 -0
- package/u2/old-stuff/css/onStyleSheet/monkeypatches.js +28 -0
- package/u2/old-stuff/css/onStyleSheet/test/include.css +19 -0
- package/u2/old-stuff/css/onStyleSheet/test/style-has-include.css +6 -0
- package/u2/old-stuff/css/onStyleSheet/test/style-no-include.css +3 -0
- package/u2/old-stuff/css/onStyleSheet/test/test.html +48 -0
- package/u2/old-stuff/css/parser/mod.js +182 -0
- package/u2/old-stuff/css/parser/parser_old/mod.js +128 -0
- package/u2/old-stuff/css/parser/parser_old/test.html +43 -0
- package/u2/old-stuff/css/parser/parser_old/util.js +22 -0
- package/u2/old-stuff/css/parser/style.html +52 -0
- package/u2/old-stuff/css/parser/test.html +38 -0
- package/u2/old-stuff/el/ai-texter/README.md +23 -0
- package/u2/old-stuff/el/ai-texter/ai-texter.css +12 -0
- package/u2/old-stuff/el/ai-texter/ai-texter.js +153 -0
- package/u2/old-stuff/el/ai-texter/tests/minimal.html +47 -0
- package/u2/old-stuff/el/ai-texter/tests/test.html +71 -0
- package/u2/old-stuff/init.js +38 -0
- package/u2/old-stuff/markHashLinks.js +51 -0
- package/u2/old-stuff/onElement/mod.js +73 -0
- package/u2/old-stuff/test-helpers/mod.js +36 -0
- package/u2/old-stuff/test-helpers/test.html +4 -0
- package/u2/old-stuff/tests/init.js.html +51 -0
- package/u2/old-stuff/viewport.js +64 -0
- package/u2/projects.json +468 -0
- package/u2/tests/boilerplate.html +46 -0
- package/u2/tests/kacheln.html +245 -0
- package/u2/tests/showcase.html +270 -0
- package/u2/tests/showcase2.html +157 -0
- package/u2/tests/test-init.js +35 -0
- package/u2/tests/test.html +355 -0
- package/u2/tools/baseElement.js +95 -0
- package/u2/tools/baseElement.test.html +119 -0
- package/u2/tools/ce-inspector.js +308 -0
- package/u2/tools/ce-inspector.test.html +66 -0
- package/u2/tools/ce-manfest-from-element.js +207 -0
- package/u2/tools/dev-iframe.js +213 -0
- package/u2/tools/dev-iframe.test.html +75 -0
- package/u2/tools/eventsExplorer.js +101 -0
- package/u2/tools/logo/u1.svg +9 -0
- package/u2/tools/logo/u1ui.svg +6 -0
- package/u2/tools/update.repos.json.js +234 -0
- package/u2/u2.js +14 -0
- package/u2/utils.js +59 -0
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
{
|
|
2
|
+
"schemaVersion": "1.0.0",
|
|
3
|
+
"readme": "README.md",
|
|
4
|
+
"modules": [
|
|
5
|
+
{
|
|
6
|
+
"kind": "javascript-module",
|
|
7
|
+
"path": "navigable.js",
|
|
8
|
+
"declarations": [
|
|
9
|
+
{
|
|
10
|
+
"summary": "Make elements navigatable",
|
|
11
|
+
"description": "Links to Elements that can have a active-state (dialog, details, popover, etc.) can be activated by simply linking to its id. This is done by adding the custom attribute u2-navigable to the element.",
|
|
12
|
+
"name": "u2-navigable",
|
|
13
|
+
"members": [],
|
|
14
|
+
"events": [],
|
|
15
|
+
"attributes": [
|
|
16
|
+
{
|
|
17
|
+
"name": "u2-navigable",
|
|
18
|
+
"description": "By adding the custom attribute u2-navigable to an element, the element becomes navigatable. Opens by hash-link even on loading the page, changes the url by closing the element.",
|
|
19
|
+
"type": "boolean"
|
|
20
|
+
},{
|
|
21
|
+
"name": "id",
|
|
22
|
+
"description": "An id is required to navigate to the element."
|
|
23
|
+
}
|
|
24
|
+
],
|
|
25
|
+
"cssProperties": [],
|
|
26
|
+
"attributeName": "u2-navigable"
|
|
27
|
+
}
|
|
28
|
+
],
|
|
29
|
+
"exports": [
|
|
30
|
+
{
|
|
31
|
+
"kind": "custom-attribute-definition",
|
|
32
|
+
"name": "u2-navigable",
|
|
33
|
+
"declaration": {
|
|
34
|
+
"name": "u2-navigable",
|
|
35
|
+
"module": "navigable.js"
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
]
|
|
39
|
+
}
|
|
40
|
+
]
|
|
41
|
+
}
|
|
42
|
+
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import {TargetObserver} from './TargetObserver.js';
|
|
2
|
+
import {U2TargetObserver, toggleParam} from './U2TargetObserver.js';
|
|
3
|
+
|
|
4
|
+
|
|
5
|
+
// translate hash-links to "u2-navigable"-elements into "u2-target"-params
|
|
6
|
+
new TargetObserver({
|
|
7
|
+
on: (el) => {
|
|
8
|
+
toggleParam(el.id, true, true);
|
|
9
|
+
const url = new URL(location);
|
|
10
|
+
url.hash = '';
|
|
11
|
+
history.replaceState(null, '', url.href);
|
|
12
|
+
},
|
|
13
|
+
matches: '[u2-navigable]'
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
/* dialog element */
|
|
18
|
+
// TODO: there is no open-event, so we can not change the url if its opened by .showModal() mybe "invoke-event" some day?
|
|
19
|
+
new U2TargetObserver({
|
|
20
|
+
on: el => !el.open && el.showModal(),
|
|
21
|
+
off: el => el.close(),
|
|
22
|
+
matches: 'dialog[u2-navigable]',
|
|
23
|
+
});
|
|
24
|
+
addEventListener('close',e=>{
|
|
25
|
+
const el = e.target;
|
|
26
|
+
if (!el.matches('dialog[u2-navigable]')) return;
|
|
27
|
+
toggleParam(el.id, false);
|
|
28
|
+
},true);
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
/* details */
|
|
32
|
+
new U2TargetObserver({
|
|
33
|
+
on: el => el.open = true,
|
|
34
|
+
off: el => el.open = false,
|
|
35
|
+
matches: 'details[u2-navigable]',
|
|
36
|
+
});
|
|
37
|
+
addEventListener('toggle',e=>{
|
|
38
|
+
const el = e.target;
|
|
39
|
+
if (!el.matches('details[u2-navigable][id]')) return;
|
|
40
|
+
if (el.open) toggleParam(el.id, true);
|
|
41
|
+
else toggleParam(el.id, false);
|
|
42
|
+
},true);
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
/* checkbox and radio */
|
|
46
|
+
new U2TargetObserver({
|
|
47
|
+
on: el => el.checked = true,
|
|
48
|
+
off: el => el.checked = false,
|
|
49
|
+
matches: 'input:is([type=checkbox],[type=radio])[u2-navigable]',
|
|
50
|
+
});
|
|
51
|
+
addEventListener('change',e=>{
|
|
52
|
+
const el = e.target;
|
|
53
|
+
if (!el.matches('input:is([type=checkbox],[type=radio])[u2-navigable][id]')) return;
|
|
54
|
+
|
|
55
|
+
if (el.type === 'radio') {
|
|
56
|
+
const elements = el.form ? el.form.elements[el.name] : document.getElementsByName(el.name);
|
|
57
|
+
elements.forEach(e => toggleParam(e.id, false)); // toggleParam(e.id, false, TRUE) does not work as expected, why?
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
if (el.checked) toggleParam(el.id, true);
|
|
61
|
+
else toggleParam(el.id, false);
|
|
62
|
+
});
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
/* popover */
|
|
66
|
+
new U2TargetObserver({
|
|
67
|
+
on: el => el.showPopover(),
|
|
68
|
+
off: el => el.hidePopover(),
|
|
69
|
+
matches: '[popover][u2-navigable]',
|
|
70
|
+
});
|
|
71
|
+
addEventListener('toggle', e => {
|
|
72
|
+
const el = e.target;
|
|
73
|
+
if (!el.matches('[popover][u2-navigable][id]')) return;
|
|
74
|
+
const newState = e.newState;
|
|
75
|
+
toggleParam(el.id, newState === 'open');
|
|
76
|
+
}, true);
|
|
77
|
+
|
|
78
|
+
|
|
79
|
+
|
|
80
|
+
// beta
|
|
81
|
+
// u2 unified api
|
|
82
|
+
addEventListener('u2-activate', e => {
|
|
83
|
+
if (!e.target.hasAttribute('u2-navigable')) return;
|
|
84
|
+
if (!e.target.hasAttribute('id')) { console.warn('element with a u2-navigable attribute must have an id'); return; }
|
|
85
|
+
//e.preventDefault(); // needed?
|
|
86
|
+
location.href = '#' + e.target.id;
|
|
87
|
+
});
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width">
|
|
6
|
+
<title></title>
|
|
7
|
+
|
|
8
|
+
<link rel=stylesheet href="../../../css/classless/full.css">
|
|
9
|
+
<link rel=stylesheet href="../../../css/classless/simple.css">
|
|
10
|
+
<script type=module async src="../../../u2/tests/test-init.js"></script>
|
|
11
|
+
|
|
12
|
+
<body>
|
|
13
|
+
|
|
14
|
+
<section>
|
|
15
|
+
<h1>Details</h1>
|
|
16
|
+
|
|
17
|
+
<button onclick="toggleParam('details1', true)">open</button>
|
|
18
|
+
<button onclick="toggleParam('details1', false)">close</button>
|
|
19
|
+
<button onclick="toggleParam('details1', null)">toggle</button>
|
|
20
|
+
<button onclick="toggleParam('details1', null, true)">toggle, no browser-back-history</button>
|
|
21
|
+
|
|
22
|
+
<details u2-navigable id=details1>
|
|
23
|
+
<summary>summary 1</summary>
|
|
24
|
+
More rext
|
|
25
|
+
</details>
|
|
26
|
+
<details u2-navigable id=details2>
|
|
27
|
+
<summary>summary 2</summary>
|
|
28
|
+
More rext
|
|
29
|
+
</details>
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
</section>
|
|
33
|
+
|
|
34
|
+
<script type=module>
|
|
35
|
+
|
|
36
|
+
import {U2TargetObserver, toggleParam} from "../U2TargetObserver.js";
|
|
37
|
+
window.toggleParam = toggleParam;
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
new U2TargetObserver({
|
|
41
|
+
on: el => el.open = true,
|
|
42
|
+
off: el => el.open = false,
|
|
43
|
+
matches:'details[u2-navigable]',
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
addEventListener('toggle',e=>{
|
|
47
|
+
const el = e.target;
|
|
48
|
+
if (!el.matches('details[u2-navigable][id]')) return;
|
|
49
|
+
if (el.open) {
|
|
50
|
+
toggleParam(el.id, true);
|
|
51
|
+
} else {
|
|
52
|
+
toggleParam(el.id, false);
|
|
53
|
+
}
|
|
54
|
+
},true);
|
|
55
|
+
|
|
56
|
+
</script>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset=utf-8>
|
|
5
|
+
<meta name=viewport content="width=device-width">
|
|
6
|
+
|
|
7
|
+
<script src="../navigable.js" type=module async></script>
|
|
8
|
+
|
|
9
|
+
<body>
|
|
10
|
+
|
|
11
|
+
<section class="main">
|
|
12
|
+
Link to navigable dialog:<br>
|
|
13
|
+
<a href="#navigable">open</a>
|
|
14
|
+
<dialog u2-navigable id=navigable>
|
|
15
|
+
go back using esc or your browser's back button
|
|
16
|
+
</dialog>
|
|
17
|
+
</section>
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width">
|
|
6
|
+
<title></title>
|
|
7
|
+
|
|
8
|
+
<link rel=stylesheet href="../../../css/classless/full.css">
|
|
9
|
+
<link rel=stylesheet href="../../../css/classless/simple.css">
|
|
10
|
+
|
|
11
|
+
<script src="../TargetObserver.js" type=module async></script>
|
|
12
|
+
|
|
13
|
+
<body>
|
|
14
|
+
|
|
15
|
+
<section>
|
|
16
|
+
<h1>Dialog</h1>
|
|
17
|
+
<a href="#dialog1">navigate to #dialog1</a>
|
|
18
|
+
<!--todo: button onclick="dialog1.showModal()">open by javascript</button-->
|
|
19
|
+
|
|
20
|
+
<dialog id="dialog1" u2-navigable>
|
|
21
|
+
dialog 1 is open
|
|
22
|
+
<br>
|
|
23
|
+
<a href="#dialog2">navigate to #dialog2</a>
|
|
24
|
+
</dialog>
|
|
25
|
+
|
|
26
|
+
<dialog id="dialog2" u2-navigable>
|
|
27
|
+
dialog 2 is open
|
|
28
|
+
</dialog>
|
|
29
|
+
|
|
30
|
+
</section>
|
|
31
|
+
|
|
32
|
+
<script type=module>
|
|
33
|
+
import {TargetObserver} from "../TargetObserver.js";
|
|
34
|
+
|
|
35
|
+
/* dialog element */
|
|
36
|
+
new TargetObserver({
|
|
37
|
+
in: el => {
|
|
38
|
+
!el.open && el.showModal()
|
|
39
|
+
},
|
|
40
|
+
out: el => {
|
|
41
|
+
el.close()
|
|
42
|
+
},
|
|
43
|
+
matches: 'dialog[u2-navigable]',
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
addEventListener('close',e=>{
|
|
47
|
+
const target = e.target;
|
|
48
|
+
if (!target.id) return;
|
|
49
|
+
if (e.target.id !== location.hash.substring(1)) return;
|
|
50
|
+
if (!target.matches('dialog[u2-navigable]')) return;
|
|
51
|
+
|
|
52
|
+
history.back();
|
|
53
|
+
e.preventDefault();
|
|
54
|
+
},true);
|
|
55
|
+
|
|
56
|
+
|
|
57
|
+
/* divs */
|
|
58
|
+
new TargetObserver({
|
|
59
|
+
out: el => {
|
|
60
|
+
el.hidden = true;
|
|
61
|
+
},
|
|
62
|
+
in: el => {
|
|
63
|
+
el.hidden = false;
|
|
64
|
+
},
|
|
65
|
+
matches: '.div',
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
/* all */
|
|
69
|
+
setTimeout(function(){ // test if it trigger after target changed
|
|
70
|
+
let obs = new TargetObserver({
|
|
71
|
+
on: el => console.log('on',el),
|
|
72
|
+
off: el => console.log('off',el)
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
},1000)
|
|
76
|
+
</script>
|
|
77
|
+
|
|
78
|
+
<section>
|
|
79
|
+
<h1>Details</h1>
|
|
80
|
+
|
|
81
|
+
<a href="#div1">open div1</a><br>
|
|
82
|
+
<a href="#div2">open div2 (should also open div1)</a>
|
|
83
|
+
|
|
84
|
+
<div id="div1" hidden class="div">
|
|
85
|
+
div 1
|
|
86
|
+
<div id="div2" hidden class="div">
|
|
87
|
+
div 2
|
|
88
|
+
now open div 3
|
|
89
|
+
</div>
|
|
90
|
+
</div>
|
|
91
|
+
|
|
92
|
+
<br>
|
|
93
|
+
|
|
94
|
+
<a href="#div3">open div3</a><br>
|
|
95
|
+
|
|
96
|
+
<div id="div3" hidden class="div">div 3</div>
|
|
97
|
+
|
|
98
|
+
<style>
|
|
99
|
+
.div {
|
|
100
|
+
background:yellow;
|
|
101
|
+
border: 1px solid;
|
|
102
|
+
padding: 10px;
|
|
103
|
+
margin: 10px;
|
|
104
|
+
}
|
|
105
|
+
</style>
|
|
106
|
+
</section>
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name="viewport" content="width=device-width">
|
|
6
|
+
<title>Attribute u2-href tests</title>
|
|
7
|
+
|
|
8
|
+
<link rel=stylesheet href="../../../css/classless/full.css">
|
|
9
|
+
<link rel=stylesheet href="../../../css/classless/simple.css">
|
|
10
|
+
<script type=module async src="../../../u2/tests/test-init.js"></script>
|
|
11
|
+
|
|
12
|
+
<script src="../navigable.js" type=module async></script>
|
|
13
|
+
|
|
14
|
+
<body>
|
|
15
|
+
|
|
16
|
+
<section>
|
|
17
|
+
<h1>Dialog</h1>
|
|
18
|
+
<a href="#dialog1">navigate to #dialog1</a>
|
|
19
|
+
<!-- <br>
|
|
20
|
+
<button onclick="dialog1.showModal()">open by javascript</button>
|
|
21
|
+
<br>
|
|
22
|
+
<a href="#dialog2">navigate to #dialog2 (nested)</a> -->
|
|
23
|
+
|
|
24
|
+
<dialog id="dialog1" u2-navigable>
|
|
25
|
+
dialog 1 is open
|
|
26
|
+
<br>
|
|
27
|
+
<a href="#dialog2">navigate to #dialog2</a>
|
|
28
|
+
|
|
29
|
+
<dialog id="dialog2" u2-navigable>
|
|
30
|
+
dialog 2 is open
|
|
31
|
+
</dialog>
|
|
32
|
+
|
|
33
|
+
<section>
|
|
34
|
+
<h1>Checkbox</h1>
|
|
35
|
+
<input type=checkbox u2-navigable id=checkbox1>
|
|
36
|
+
<input type=checkbox u2-navigable id=checkbox2>
|
|
37
|
+
<input type=checkbox u2-navigable id=checkbox3>
|
|
38
|
+
</section>
|
|
39
|
+
|
|
40
|
+
<section>
|
|
41
|
+
<h1>Radiobutton</h1>
|
|
42
|
+
<input type=radio u2-navigable name=radio1 id=radio1>
|
|
43
|
+
<input type=radio u2-navigable name=radio1 id=radio2>
|
|
44
|
+
<input type=radio u2-navigable name=radio1 id=radio3>
|
|
45
|
+
</section>
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
<button onclick="this.parentNode.close()">close</button>
|
|
49
|
+
</dialog>
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
</section>
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
<section>
|
|
57
|
+
<h1>Details</h1>
|
|
58
|
+
|
|
59
|
+
<a href="#details1">navigate to #details1</a>
|
|
60
|
+
<!-- todo: <button onclick="dialog1.showModal()">open by javascript</button> -->
|
|
61
|
+
<details u2-navigable id=details1>
|
|
62
|
+
<summary>summary 1</summary>
|
|
63
|
+
More text
|
|
64
|
+
</details>
|
|
65
|
+
<details u2-navigable id=details2>
|
|
66
|
+
<summary>summary 2</summary>
|
|
67
|
+
More text
|
|
68
|
+
</details>
|
|
69
|
+
<div>search the word "more" in browser search. Details should open and url should be changed (chromium for now)</div>
|
|
70
|
+
|
|
71
|
+
</section>
|
|
72
|
+
|
|
73
|
+
<!-- Ergänzung für Popover-Element -->
|
|
74
|
+
<section>
|
|
75
|
+
<h1>Popover</h1>
|
|
76
|
+
<a href="#popover1">Toggle Popover (href)</a>
|
|
77
|
+
<br>
|
|
78
|
+
<button popovertarget="popover1">Toggle Popover (popovertarget)</button>
|
|
79
|
+
<div id=popover1 popover u2-navigable>
|
|
80
|
+
<p>Popover content</p>
|
|
81
|
+
<button popovertarget="popover1" popovertargetaction="hide">Close</button>
|
|
82
|
+
</div>
|
|
83
|
+
</section>
|
|
84
|
+
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# [u2-parallax] - attribute
|
|
2
|
+
Make every element scrolling at different speed
|
|
3
|
+
|
|
4
|
+
## Features
|
|
5
|
+
|
|
6
|
+
- fast!
|
|
7
|
+
- easy API
|
|
8
|
+
- works for dynamic added elements
|
|
9
|
+
- lightweight < 4k minified
|
|
10
|
+
|
|
11
|
+
## Usage
|
|
12
|
+
|
|
13
|
+
```html
|
|
14
|
+
<div u2-parallax style="--u2-parallax-speed:1.1;">faster</div>
|
|
15
|
+
<div u2-parallax style="--u2-parallax-speed:1;">parallax</div>
|
|
16
|
+
<div u2-parallax style="--u2-parallax-speed:0.9;">slower</div>
|
|
17
|
+
```
|
|
18
|
+
|
|
19
|
+
```css
|
|
20
|
+
[u2-parallax] {
|
|
21
|
+
background:var(--color-light);
|
|
22
|
+
display:inline-block;
|
|
23
|
+
padding:.5rem;
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Install
|
|
28
|
+
|
|
29
|
+
```html
|
|
30
|
+
<script src="https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/attr/parallax/parallax.min.js" type=module async></script>
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Demos
|
|
34
|
+
|
|
35
|
+
[minimal.html](http://gcdn.li/u2ui/u2@main/attr/parallax/tests/minimal.html)
|
|
36
|
+
[performance.html](http://gcdn.li/u2ui/u2@main/attr/parallax/tests/performance.html)
|
|
37
|
+
[test.html](http://gcdn.li/u2ui/u2@main/attr/parallax/tests/test.html)
|
|
38
|
+
|
|
39
|
+
## Also interesting
|
|
40
|
+
|
|
41
|
+
Parallax scrolling Backgrounds
|
|
42
|
+
https://github.com/nuxodin/parax-bg
|
|
43
|
+
|
|
44
|
+
## About
|
|
45
|
+
|
|
46
|
+
- MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
|
|
47
|
+
- Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
|
|
48
|
+
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/* Copyright (c) 2016 Tobias Buschor https://goo.gl/gl0mbf | MIT License https://goo.gl/HgajeK */
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
const pool = new Map();
|
|
5
|
+
function add(el){
|
|
6
|
+
let obj = new parallax(el);
|
|
7
|
+
pool.set(el, obj);
|
|
8
|
+
if (pool.size === 1) addGlobalListeners();
|
|
9
|
+
return obj;
|
|
10
|
+
}
|
|
11
|
+
function remove(el){
|
|
12
|
+
pool.delete(el);
|
|
13
|
+
if (pool.size === 0) removeGlobalListeners();
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
var styEl = document.createElement('style');
|
|
17
|
+
styEl.innerHTML = '[u2-parallax]{z-index:1; will-change:transform;}';
|
|
18
|
+
document.head.prepend(styEl);
|
|
19
|
+
|
|
20
|
+
const parallax = class {
|
|
21
|
+
constructor(el){
|
|
22
|
+
this.el = el;
|
|
23
|
+
}
|
|
24
|
+
connect(){
|
|
25
|
+
this.positionChange();
|
|
26
|
+
let style = getComputedStyle(this.el);
|
|
27
|
+
//let direction = parseFloat(style.getPropertyValue('--u2-parallax-direction'));
|
|
28
|
+
//if (isNaN(direction)) direction = 180;
|
|
29
|
+
//this.angle = (direction + 90) / 180 * Math.PI;
|
|
30
|
+
this.speed = parseFloat(style.getPropertyValue('--u2-parallax-speed'));
|
|
31
|
+
if (isNaN(this.speed)) this.speed = .8;
|
|
32
|
+
onScroll() // todo: better solution?
|
|
33
|
+
}
|
|
34
|
+
positionChange(){
|
|
35
|
+
this.oRect = vpRectWithoutTransform(this.el);
|
|
36
|
+
if (!this.oRect) return; // hidden
|
|
37
|
+
this.oRect.centerY = this.oRect.top + this.oRect.height/2;
|
|
38
|
+
}
|
|
39
|
+
onScroll(pageCenterY, pageCenterX){ // this has to be very fast, can it be improved?
|
|
40
|
+
if (!this.oRect) return; // hidden
|
|
41
|
+
const centerDiff = pageCenterY - this.oRect.centerY;
|
|
42
|
+
const yRoute = (this.speed-1) * -centerDiff;
|
|
43
|
+
//const y = yRoute * Math.sin(this.angle);
|
|
44
|
+
//const x = yRoute * Math.cos(this.angle);
|
|
45
|
+
// todo, only transform if visible?
|
|
46
|
+
this.el.style.transform = 'translate3d('+0+'px,'+yRoute+'px,0)';
|
|
47
|
+
// this.el.attributeStyleMap.set('transform', new CSSTransformValue([
|
|
48
|
+
// new CSSTranslate(CSS.px(0),CSS.px(yRoute),CSS.px(0))
|
|
49
|
+
// ]));
|
|
50
|
+
}
|
|
51
|
+
};
|
|
52
|
+
|
|
53
|
+
function calcViewportRects(e){
|
|
54
|
+
pool.forEach(obj => obj.positionChange());
|
|
55
|
+
}
|
|
56
|
+
function onScroll(e){
|
|
57
|
+
const pageCenterY = document.scrollingElement.scrollTop + winHeight/2;
|
|
58
|
+
const pageCenterX = document.scrollingElement.scrollLeft + winWidth/2;
|
|
59
|
+
requestAnimationFrame(()=>{
|
|
60
|
+
pool.forEach(obj => obj.onScroll(pageCenterY, pageCenterX));
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function addGlobalListeners(){
|
|
65
|
+
addEventListener('resize',calcViewportRects);
|
|
66
|
+
addEventListener('DOMContentLoaded',calcViewportRects);
|
|
67
|
+
addEventListener('load',calcViewportRects);
|
|
68
|
+
addEventListener('resize', onScroll);
|
|
69
|
+
addEventListener('load', onScroll);
|
|
70
|
+
document.addEventListener('scroll', onScroll);
|
|
71
|
+
addEventListener('wheel', onScroll); // firefox, scroll is async so wheel is faster
|
|
72
|
+
}
|
|
73
|
+
function removeGlobalListeners(){
|
|
74
|
+
removeEventListener('resize',calcViewportRects);
|
|
75
|
+
removeEventListener('DOMContentLoaded',calcViewportRects);
|
|
76
|
+
removeEventListener('load',calcViewportRects);
|
|
77
|
+
removeEventListener('resize', onScroll);
|
|
78
|
+
removeEventListener('load', onScroll);
|
|
79
|
+
document.removeEventListener('scroll', onScroll);
|
|
80
|
+
removeEventListener('wheel', onScroll); // firefox
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
// cache innerHeight, Is that of any use?
|
|
84
|
+
let winHeight = document.documentElement.clientHeight; // was innerHeight // better this?: https://stackoverflow.com/questions/1248081/how-to-get-the-browser-viewport-dimensions
|
|
85
|
+
let winWidth = document.documentElement.clientWidth;
|
|
86
|
+
addEventListener('resize',(e)=>{
|
|
87
|
+
winHeight = document.documentElement.clientHeight;
|
|
88
|
+
winWidth = document.documentElement.clientWidth;
|
|
89
|
+
});
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
/* helpers */
|
|
94
|
+
function vpRectWithoutTransform(el){
|
|
95
|
+
if (!el.offsetParent) return null;
|
|
96
|
+
let rect = {
|
|
97
|
+
left : 0,
|
|
98
|
+
top : 0,
|
|
99
|
+
width : el.offsetWidth,
|
|
100
|
+
height: el.offsetHeight,
|
|
101
|
+
}
|
|
102
|
+
do {
|
|
103
|
+
rect.left += el.offsetLeft;
|
|
104
|
+
rect.top += el.offsetTop;
|
|
105
|
+
el = el.offsetParent;
|
|
106
|
+
} while (el);
|
|
107
|
+
return rect;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
import {SelectorObserver} from '../../js/SelectorObserver/SelectorObserver.js';
|
|
111
|
+
new SelectorObserver({
|
|
112
|
+
on: (el) => {
|
|
113
|
+
const parallaxObj = add(el);
|
|
114
|
+
parallaxObj.connect();
|
|
115
|
+
},
|
|
116
|
+
off: (el) => {
|
|
117
|
+
remove(el)
|
|
118
|
+
}
|
|
119
|
+
}).observe('[u2-parallax]');
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset=utf-8>
|
|
5
|
+
<meta name=viewport content="width=device-width">
|
|
6
|
+
<title>counter element test | U2-design-system</title>
|
|
7
|
+
<script src="../../../u2/tests/test-init.js" type=module async></script>
|
|
8
|
+
|
|
9
|
+
<script src="../parallax.js" type=module async></script>
|
|
10
|
+
|
|
11
|
+
<body>
|
|
12
|
+
|
|
13
|
+
<section class=main>
|
|
14
|
+
<div u2-parallax style="--u2-parallax-speed:1.1;">faster</div>
|
|
15
|
+
<div u2-parallax style="--u2-parallax-speed:1;">parallax</div>
|
|
16
|
+
<div u2-parallax style="--u2-parallax-speed:0.9;">slower</div>
|
|
17
|
+
</section>
|
|
18
|
+
|
|
19
|
+
<style class=main>
|
|
20
|
+
[u2-parallax] {
|
|
21
|
+
background:var(--color-light);
|
|
22
|
+
display:inline-block;
|
|
23
|
+
padding:.5rem;
|
|
24
|
+
}
|
|
25
|
+
</style>
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<head>
|
|
3
|
+
<meta charset="utf-8">
|
|
4
|
+
<meta name=viewport content="width=device-width">
|
|
5
|
+
<script src="../../../u2/tests/test-init.js" type=module async></script>
|
|
6
|
+
|
|
7
|
+
<script src="../parallax.js" type=module async></script>
|
|
8
|
+
<style>
|
|
9
|
+
body, html {
|
|
10
|
+
margin:0;
|
|
11
|
+
height:100%;
|
|
12
|
+
font-size: calc(12px + 1vmax);
|
|
13
|
+
font-family:arial;
|
|
14
|
+
}
|
|
15
|
+
h1 {
|
|
16
|
+
margin:0;
|
|
17
|
+
}
|
|
18
|
+
#bg {
|
|
19
|
+
height:100%;
|
|
20
|
+
}
|
|
21
|
+
#bg > span {
|
|
22
|
+
z-index:-1;
|
|
23
|
+
position:absolute;
|
|
24
|
+
background:red;
|
|
25
|
+
width:2em;
|
|
26
|
+
height:2em;
|
|
27
|
+
box-shadow:0 0 10px black;
|
|
28
|
+
border-radius:20px;
|
|
29
|
+
contain:strict;
|
|
30
|
+
}
|
|
31
|
+
#bg > span::after {
|
|
32
|
+
content:'gix';
|
|
33
|
+
}
|
|
34
|
+
#logo {
|
|
35
|
+
height:100vh;
|
|
36
|
+
display:flex;
|
|
37
|
+
justify-content: center;
|
|
38
|
+
align-items: center;
|
|
39
|
+
gap:.5em;
|
|
40
|
+
font-size:calc(16px + 1vw);
|
|
41
|
+
}
|
|
42
|
+
#logo > span {
|
|
43
|
+
flex-basis:3em;
|
|
44
|
+
height:3em;
|
|
45
|
+
display:flex;
|
|
46
|
+
justify-content: center;
|
|
47
|
+
align-items: center;
|
|
48
|
+
color: white;
|
|
49
|
+
color:black;
|
|
50
|
+
border:1px solid black;
|
|
51
|
+
|
|
52
|
+
}
|
|
53
|
+
#logo :nth-child(1) { --u2-parallax-speed:1.3; background-color:#79BBE8; }
|
|
54
|
+
#logo :nth-child(2) { --u2-parallax-speed:1.2; background-color:#7EE2F2; }
|
|
55
|
+
#logo :nth-child(3) { --u2-parallax-speed:1.1; background-color:#7CDBCF; }
|
|
56
|
+
#logo :nth-child(4) { --u2-parallax-speed:1.0; background-color:#7EF2C2; }
|
|
57
|
+
#logo :nth-child(5) { --u2-parallax-speed:0.9; background-color:#79E89A; }
|
|
58
|
+
|
|
59
|
+
</style>
|
|
60
|
+
<script type=module>
|
|
61
|
+
for (let i=400; i>0; i--) {
|
|
62
|
+
var span = document.createElement('span')
|
|
63
|
+
span.setAttribute('u2-parallax', true);
|
|
64
|
+
let speed = Math.random();
|
|
65
|
+
span.style.setProperty('--u2-parallax-speed', speed);
|
|
66
|
+
span.style.setProperty('opacity', speed+.1);
|
|
67
|
+
span.style.setProperty('left', Math.random()*100+'%');
|
|
68
|
+
span.style.setProperty('top', Math.random()*100+'%');
|
|
69
|
+
span.style.width = (5 + (speed * 50)) + 'px';
|
|
70
|
+
span.style.height = (5 + (speed * 50)) + 'px';
|
|
71
|
+
span.style.zIndex = -Math.floor((1-speed) * 100);
|
|
72
|
+
const colors = ['#79BBE8','#7EE2F2','#7CDBCF','#7EF2C2','#79E89A'];
|
|
73
|
+
const index = Math.floor(Math.random() * colors.length)
|
|
74
|
+
span.style.backgroundColor = colors[index];
|
|
75
|
+
bg.append(span)
|
|
76
|
+
}
|
|
77
|
+
</script>
|
|
78
|
+
</head>
|
|
79
|
+
<body>
|
|
80
|
+
|
|
81
|
+
<div id=bg>
|
|
82
|
+
<h1 id=logo>
|
|
83
|
+
<span u2-parallax>P</span>
|
|
84
|
+
<span u2-parallax>A</span>
|
|
85
|
+
<span u2-parallax>R</span>
|
|
86
|
+
<span u2-parallax>A</span>
|
|
87
|
+
<span u2-parallax>X</span>
|
|
88
|
+
</h1>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
<div style="max-width:800px; margin:4em auto; padding:2em; background:rgba(255,255,255,.8); border:1px solid">
|
|
93
|
+
<h2>How to use</h2>
|
|
94
|
+
<p>Include the script from...</p>
|
|
95
|
+
<p>Add the attribute "u2-parallax" to each element you like to change the speed.</p>
|
|
96
|
+
<pre><span u2-parallax style="--u2-parallax-speed:2">
|
|
97
|
+
I am twice as fast
|
|
98
|
+
</span></pre>
|
|
99
|
+
</div>
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
|