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,213 @@
|
|
|
1
|
+
import '../../el/tooltip/tooltip.js';
|
|
2
|
+
import '../../el/ico/ico.js';
|
|
3
|
+
import '../../el/code/code.js';
|
|
4
|
+
import '../../el/tabs/tabs.js';
|
|
5
|
+
|
|
6
|
+
const toolTipCss = import.meta.resolve('../../el/tooltip/tooltip.css');
|
|
7
|
+
const icoCss = import.meta.resolve('../../el/ico/ico.css');
|
|
8
|
+
const codeCss = import.meta.resolve('../../el/code/code.css');
|
|
9
|
+
const tabsCss = import.meta.resolve('../../el/tabs/tabs.css');
|
|
10
|
+
|
|
11
|
+
document.head.insertAdjacentHTML('beforeend', `<link rel=stylesheet href="${toolTipCss}">`); // zzz if popover
|
|
12
|
+
|
|
13
|
+
class DevIframe extends HTMLElement {
|
|
14
|
+
constructor() {
|
|
15
|
+
super();
|
|
16
|
+
const shadow = this.attachShadow({ mode: 'open' });
|
|
17
|
+
shadow.innerHTML =
|
|
18
|
+
`<style>
|
|
19
|
+
@import url("${icoCss}");
|
|
20
|
+
@import url("${codeCss}");
|
|
21
|
+
@import url("${tabsCss}");
|
|
22
|
+
@import url("${toolTipCss}"); /* todo when switch to popover as tooltips then stay */
|
|
23
|
+
:host {
|
|
24
|
+
display: flex;
|
|
25
|
+
flex-direction: column;
|
|
26
|
+
border: 1px solid #ccc;
|
|
27
|
+
background:var(--color-bg, white);
|
|
28
|
+
--u2-ico-dir:'https://cdn.jsdelivr.net/npm/@material-icons/svg@1.0.33/svg/{icon_name}/baseline.svg';
|
|
29
|
+
}
|
|
30
|
+
#tools {
|
|
31
|
+
display: flex;
|
|
32
|
+
flex-wrap: wrap;
|
|
33
|
+
align-items: stretch;
|
|
34
|
+
border-bottom: 1px solid #ccc;
|
|
35
|
+
background: #f8f8f8;
|
|
36
|
+
}
|
|
37
|
+
#tools > label, #tools > button {
|
|
38
|
+
display: flex;
|
|
39
|
+
justify-content: center;
|
|
40
|
+
align-items: center;
|
|
41
|
+
gap: .3rem;
|
|
42
|
+
font-size: 13px;
|
|
43
|
+
border: 1px solid #ccc;
|
|
44
|
+
padding: .3rem .5rem;
|
|
45
|
+
margin: -1px;
|
|
46
|
+
background: transparent;
|
|
47
|
+
}
|
|
48
|
+
#tools > button { margin-left:auto; }
|
|
49
|
+
#tools u2-ico { --size:1.6em; }
|
|
50
|
+
#wrap {
|
|
51
|
+
width:90%;
|
|
52
|
+
height:20rem;
|
|
53
|
+
margin:2rem auto;
|
|
54
|
+
align-self:center;
|
|
55
|
+
flex: 1 1 auto;
|
|
56
|
+
resize: both;
|
|
57
|
+
overflow:auto;
|
|
58
|
+
border:1px solid #ccc;
|
|
59
|
+
& > iframe {
|
|
60
|
+
border: 0;
|
|
61
|
+
width: 100%;
|
|
62
|
+
height: 100%;
|
|
63
|
+
display:block;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
u2-code {
|
|
67
|
+
font-size: 13px;
|
|
68
|
+
line-height:1.7;
|
|
69
|
+
}
|
|
70
|
+
u2-tabs {
|
|
71
|
+
max-height: 30rem;
|
|
72
|
+
}
|
|
73
|
+
</style>
|
|
74
|
+
<form id=tools>
|
|
75
|
+
<label>
|
|
76
|
+
<input type=checkbox name=js checked> Javascript
|
|
77
|
+
</label>
|
|
78
|
+
<label>
|
|
79
|
+
<input type=checkbox name=u2css checked> U2 styles
|
|
80
|
+
</label>
|
|
81
|
+
<label>
|
|
82
|
+
<u2-ico icon=contrast></u2-ico>
|
|
83
|
+
<u2-tooltip>Color-Scheme</u2-tooltip>
|
|
84
|
+
<select name=color-scheme>
|
|
85
|
+
<option value="">auto
|
|
86
|
+
<option value=light>light
|
|
87
|
+
<option value=dark>dark
|
|
88
|
+
</select>
|
|
89
|
+
</label>
|
|
90
|
+
<label>
|
|
91
|
+
<u2-ico icon=text_rotation_down></u2-ico>
|
|
92
|
+
<u2-tooltip>Writing mode</u2-tooltip>
|
|
93
|
+
<select name=writing-mode>
|
|
94
|
+
<option value=horizontal-tb>horizontal-tb
|
|
95
|
+
<option value=vertical-rl>vertical-rl
|
|
96
|
+
<option value=vertical-lr>vertical-lr
|
|
97
|
+
</select>
|
|
98
|
+
</label>
|
|
99
|
+
<label>
|
|
100
|
+
<u2-ico icon=format_textdirection_r_to_l></u2-ico>
|
|
101
|
+
<u2-tooltip>Text Direction</u2-tooltip>
|
|
102
|
+
<select name=direction>
|
|
103
|
+
<option value=ltr>left to right</option>
|
|
104
|
+
<option value=rtl>right to left</option>
|
|
105
|
+
</select>
|
|
106
|
+
</label>
|
|
107
|
+
<button type=button onclick="this.getRootNode().host.requestFullscreen()">
|
|
108
|
+
<u2-ico icon=fullscreen></u2-ico>
|
|
109
|
+
<u2-tooltip>Fullscreen</u2-tooltip>
|
|
110
|
+
</button>
|
|
111
|
+
</form>
|
|
112
|
+
<div id=wrap>
|
|
113
|
+
<iframe src=""></iframe>
|
|
114
|
+
</div>
|
|
115
|
+
<u2-tabs>
|
|
116
|
+
<h2>HTML</h2>
|
|
117
|
+
<u2-code id=html trim editable xlanguage=html></u2-code>
|
|
118
|
+
<h2>CSS</h2>
|
|
119
|
+
<u2-code id=css trim editable xlanguage=css></u2-code>
|
|
120
|
+
<h2>JS</h2>
|
|
121
|
+
<u2-code id=js trim editable xlanguage=javascript></u2-code>
|
|
122
|
+
</u2-tabs>
|
|
123
|
+
`;
|
|
124
|
+
|
|
125
|
+
const frame = shadow.querySelector('iframe');
|
|
126
|
+
const form = shadow.querySelector('#tools');
|
|
127
|
+
|
|
128
|
+
form.addEventListener('change', e => {
|
|
129
|
+
if (template) this.loadDoc(template.innerHTML);
|
|
130
|
+
else this.loadUrl(frame.src);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
const template = this.querySelector(':scope > template');
|
|
134
|
+
if (template) frame.srcdoc = template.innerHTML;
|
|
135
|
+
}
|
|
136
|
+
loadUrl(url) { this.load({url}); }
|
|
137
|
+
loadDoc(doc) { this.load({doc}); }
|
|
138
|
+
load({url,doc} = {}) {
|
|
139
|
+
const shadow = this.shadowRoot;
|
|
140
|
+
const form = shadow.querySelector('#tools');
|
|
141
|
+
const frame = shadow.querySelector('iframe');
|
|
142
|
+
|
|
143
|
+
const data = Object.fromEntries(new FormData(form));
|
|
144
|
+
|
|
145
|
+
let sandbox = 'allow-same-origin allow-modals allow-forms allow-popups';
|
|
146
|
+
if (data['js']) sandbox += ' allow-scripts';
|
|
147
|
+
frame.sandbox = sandbox;
|
|
148
|
+
|
|
149
|
+
setIframeSrc(frame, {
|
|
150
|
+
url,
|
|
151
|
+
doc,
|
|
152
|
+
callback: ({document}) => {
|
|
153
|
+
//this.dispatchEvent(new CustomEvent('dev-iframe-document-ready', { detail: { frame, document } }));
|
|
154
|
+
document.documentElement.style.writingMode = data['writing-mode'];
|
|
155
|
+
document.documentElement.dir = data['direction'];
|
|
156
|
+
|
|
157
|
+
document.documentElement.style.colorScheme = data['color-scheme'];
|
|
158
|
+
document.documentElement.setAttribute('data-theme', data['color-scheme']);
|
|
159
|
+
document.documentElement.setAttribute('u2-skin', data['color-scheme']);
|
|
160
|
+
|
|
161
|
+
if (!data['u2css']) {
|
|
162
|
+
document.querySelectorAll('link').forEach(link => {
|
|
163
|
+
if (link.href.includes('/css/base/')) link.remove();
|
|
164
|
+
if (link.href.includes('/css/classless/')) link.remove();
|
|
165
|
+
if (link.href.includes('/css/classless/')) link.remove();
|
|
166
|
+
if (link.href.includes('/attr/skin/skin.css')) link.remove();
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
const htmlEl = document.querySelector('.main:not(script,style)');
|
|
171
|
+
const jsEl = document.querySelector('script.main');
|
|
172
|
+
const cssEl = document.querySelector('style.main');
|
|
173
|
+
|
|
174
|
+
htmlEl && shadow.querySelector('#html').setForeignElement(htmlEl);
|
|
175
|
+
jsEl && shadow.querySelector('#js').setForeignElement(jsEl);
|
|
176
|
+
cssEl && shadow.querySelector('#css').setForeignElement(cssEl);
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
static observedAttributes = ['src'];
|
|
183
|
+
|
|
184
|
+
attributeChangedCallback(name, oldValue, newValue) {
|
|
185
|
+
if (name === 'src') {
|
|
186
|
+
const iframe = this.shadowRoot.querySelector('iframe');
|
|
187
|
+
if (iframe) this.loadUrl(newValue);
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
customElements.define('dev-iframe', DevIframe);
|
|
193
|
+
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
function setIframeSrc(frame, {url,doc,callback} = {}) {
|
|
197
|
+
frame.contentDocument.isOld = true;
|
|
198
|
+
frame.onload = () => run();
|
|
199
|
+
//frame.src = url;
|
|
200
|
+
if (url) frame.src = url;
|
|
201
|
+
if (doc) frame.srcdoc = doc;
|
|
202
|
+
const interval = setInterval(() => {
|
|
203
|
+
if (frame.contentDocument.isOld) return;
|
|
204
|
+
if (frame.contentDocument.readyState !== 'interactive') return;
|
|
205
|
+
clearInterval(interval);
|
|
206
|
+
run();
|
|
207
|
+
}, 10);
|
|
208
|
+
let run = ()=>{
|
|
209
|
+
clearInterval(interval);
|
|
210
|
+
run = ()=>{}
|
|
211
|
+
callback?.({document: frame.contentDocument});
|
|
212
|
+
};
|
|
213
|
+
}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
<!DOCTYPE HTML>
|
|
2
|
+
<html lang=en>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<meta name=viewport content="width=device-width">
|
|
6
|
+
<title>Test</title>
|
|
7
|
+
<script src="../../u2/tests/test-init.js" type=module></script>
|
|
8
|
+
|
|
9
|
+
<link rel=stylesheet href="../../css/classless/full.css">
|
|
10
|
+
|
|
11
|
+
<script src="../tools/dev-iframe.js" type=module async></script>
|
|
12
|
+
|
|
13
|
+
<body>
|
|
14
|
+
|
|
15
|
+
<section>
|
|
16
|
+
<h2>App</h2>
|
|
17
|
+
|
|
18
|
+
<label style="text-align:center; padding:.6em">
|
|
19
|
+
<input id=set oninput="dFrame.setAttribute('src', this.value)" placeholder="https://url..." style="display:block; margin:auto; width:77%;" autofocus>
|
|
20
|
+
</label>
|
|
21
|
+
<dev-iframe id="dFrame"></dev-iframe>
|
|
22
|
+
|
|
23
|
+
<script>
|
|
24
|
+
set.addEventListener('input', function() {
|
|
25
|
+
dFrame.setAttribute('src', this.value);
|
|
26
|
+
localStorage.setItem('dev-iframe-app-url', this.value);
|
|
27
|
+
});
|
|
28
|
+
dFrame.setAttribute('src', localStorage.getItem('dev-iframe-app-url') || 'http://localhost/u2ui/u2/el/tree1/tests/test.html');
|
|
29
|
+
set.value = dFrame.getAttribute('src');
|
|
30
|
+
</script>
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
</section>
|
|
34
|
+
|
|
35
|
+
|
|
36
|
+
<section>
|
|
37
|
+
|
|
38
|
+
<h2>Template as document</h2>
|
|
39
|
+
<dev-iframe>
|
|
40
|
+
<template>
|
|
41
|
+
<link rel=stylesheet href="../../css/classless/full.css">
|
|
42
|
+
<script src="../auto.js" type=module async></script>
|
|
43
|
+
<style>
|
|
44
|
+
body {
|
|
45
|
+
font-family: sans-serif;
|
|
46
|
+
margin: 0;
|
|
47
|
+
padding: 0;
|
|
48
|
+
}
|
|
49
|
+
h1 {
|
|
50
|
+
background: #333;
|
|
51
|
+
color: white;
|
|
52
|
+
padding: 1em;
|
|
53
|
+
margin: 0;
|
|
54
|
+
}
|
|
55
|
+
main {
|
|
56
|
+
padding: 1em;
|
|
57
|
+
}
|
|
58
|
+
</style>
|
|
59
|
+
<h1>My App</h1>
|
|
60
|
+
<main class="main">
|
|
61
|
+
<p>My app is great!</p>
|
|
62
|
+
</main>
|
|
63
|
+
<style class="main">
|
|
64
|
+
main {
|
|
65
|
+
background: #f8f8f8;
|
|
66
|
+
}
|
|
67
|
+
</style>
|
|
68
|
+
|
|
69
|
+
<script class=main>
|
|
70
|
+
document.querySelector('main').insertAdjacentHTML('beforeend', '<p>My app is still great!</p>');
|
|
71
|
+
</script>
|
|
72
|
+
</template>
|
|
73
|
+
</dev-iframe>
|
|
74
|
+
|
|
75
|
+
</section>
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
|
|
2
|
+
import {dump, domRender} from 'https://cdn.jsdelivr.net/gh/nuxodin/dump.js@main/mod.min.js';
|
|
3
|
+
import {alert} from '../../js/dialog/dialog.js';
|
|
4
|
+
|
|
5
|
+
function alertInit(el) { el.classList.add('backdropClose'); }
|
|
6
|
+
|
|
7
|
+
export class EventsExplorer {
|
|
8
|
+
constructor(into, el, events) {
|
|
9
|
+
this.into = into;
|
|
10
|
+
this.el = el;
|
|
11
|
+
this.events = events;
|
|
12
|
+
this.into.innerHTML =
|
|
13
|
+
`<div style="display:flex; justify-content:end"><button class=-clearbtn>clear</button></div>
|
|
14
|
+
<div class=-listWrapper style="overflow:auto;max-height:18rem">
|
|
15
|
+
<table style="border-collapse:collapse">
|
|
16
|
+
<thead>
|
|
17
|
+
<tr>
|
|
18
|
+
<th>Event
|
|
19
|
+
<th>Target
|
|
20
|
+
<th>Phase
|
|
21
|
+
<tbody>
|
|
22
|
+
</table>
|
|
23
|
+
</div>`;
|
|
24
|
+
this.tbody = this.into.querySelector('tbody');
|
|
25
|
+
|
|
26
|
+
this.into.querySelector('.-clearbtn').addEventListener('click', () => this.clear() );
|
|
27
|
+
}
|
|
28
|
+
clear(){
|
|
29
|
+
this.tbody.innerHTML = '';
|
|
30
|
+
}
|
|
31
|
+
scrollToEnd(minPadding=230) {
|
|
32
|
+
const div = this.into.querySelector('.-listWrapper');
|
|
33
|
+
if (div.scrollTop + div.clientHeight < div.scrollHeight - minPadding) return;
|
|
34
|
+
div.scrollTop = div.scrollHeight;
|
|
35
|
+
}
|
|
36
|
+
start() {
|
|
37
|
+
this.clear();
|
|
38
|
+
let grow = 1;
|
|
39
|
+
let activeTr = null;
|
|
40
|
+
setInterval(() => {
|
|
41
|
+
if (!activeTr || grow > 10) return;
|
|
42
|
+
grow = Math.max(1, grow);
|
|
43
|
+
activeTr.style.borderBottomWidth = (grow+=0.01)+'px';
|
|
44
|
+
this.scrollToEnd(10);
|
|
45
|
+
},10);
|
|
46
|
+
let renderEvent = (event)=>{
|
|
47
|
+
let tr = document.createElement('tr');
|
|
48
|
+
activeTr = tr;
|
|
49
|
+
grow = 0;
|
|
50
|
+
tr.style.borderBottom = '0px solid black';
|
|
51
|
+
|
|
52
|
+
const tag = event.target.tagName?.toLowerCase() ?? (event.target.nodeType === 3 ? '[text]' : '[unknown]');
|
|
53
|
+
const klass = event.target.className?.trim().replace(/\s+/g, '.').replace(/^(.)/, '.$1') || null;
|
|
54
|
+
const id = event.target.id ? '#'+event.target.id : null;
|
|
55
|
+
|
|
56
|
+
const typeDot = `<span style="color:${stringToColor(event.type)}">⬤</span>`;
|
|
57
|
+
const targetDot = `<span style="color:${stringToColor(tag+id+klass)}">⬤</span>`;
|
|
58
|
+
|
|
59
|
+
tr.innerHTML =
|
|
60
|
+
`<td>${typeDot} ${event.type}
|
|
61
|
+
<td>${targetDot} ${id??klass??tag}
|
|
62
|
+
<td>${event.eventPhase}<td class=-dump><button style="font-size:12px; margin:0">inspect</button>`;
|
|
63
|
+
tr.querySelector('.-dump').addEventListener('click', () => {
|
|
64
|
+
alert({body:dump(event, {depth:2, customRender:domRender, inherited:true}), init:alertInit});
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
this.tbody.append(tr);
|
|
68
|
+
this.scrollToEnd();
|
|
69
|
+
}
|
|
70
|
+
for (const ev of this.events) {
|
|
71
|
+
this.el.addEventListener(ev, renderEvent, true);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
function fnv1aHash(str) {
|
|
79
|
+
let hash = 2166136261;
|
|
80
|
+
for (let i = 0; i < str.length; i++) {
|
|
81
|
+
hash = (hash ^ str.charCodeAt(i)) * 16777619;
|
|
82
|
+
}
|
|
83
|
+
return hash >>> 0; // Convert to unsigned 32-bit integer
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
function stringToColor(str) {
|
|
87
|
+
let hash = fnv1aHash(str);
|
|
88
|
+
|
|
89
|
+
let h = (hash >> 16) & 0xFF; // Extrahiere die höchsten 8 Bits für Hue
|
|
90
|
+
let s = (hash >> 8) & 0xFF; // Extrahiere die mittleren 8 Bits für Saturation
|
|
91
|
+
let l = hash & 0xFF; // Extrahiere die niedrigsten 8 Bits für Lightness
|
|
92
|
+
|
|
93
|
+
// Normalisiere die Werte in ihre jeweiligen Bereiche
|
|
94
|
+
h = (h % 360); // Hue zwischen 0 und 359
|
|
95
|
+
// Sättigung zwischen 60% und 100%
|
|
96
|
+
s = 60 + (s % 41);
|
|
97
|
+
// Helligkeit zwischen 30% und 50%, um extreme Dunkelheit/Helligkeit zu vermeiden
|
|
98
|
+
l = 30 + (l % 21);
|
|
99
|
+
|
|
100
|
+
return `hsl(${h}, ${s}%, ${l}%)`;
|
|
101
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
<svg version="1.2" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 259 114" width="259" height="114">
|
|
2
|
+
<title>u2-ui-logo-svg</title>
|
|
3
|
+
<style>
|
|
4
|
+
.s0 { fill: #532b6e }
|
|
5
|
+
.s1 { fill: #7e40a9 }
|
|
6
|
+
</style>
|
|
7
|
+
<path id="<u2> UI " class="s0" d="m35.5 77.4l-10.8 10.5-24.4-24.5 24.4-24.4 10.8 10.5-12.4 13.9zm223.3-13.9l-24.5 24.4-10.8-10.5 12.5-13.9-12.5-14 10.8-10.5z"/>
|
|
8
|
+
<path id="<u2> UI " class="s1" d="m141.7 108.3v0.2q0 1.6-1.9 3-1.9 1.2-4.5 1.2l-29 0.1q-3.3-0.1-4.9-2-1.7-1.8-2.1-4.6-3.5 3.5-9.2 5.6-5.6 1.9-12.1 1.9-8.1 0-14.9-2.9-6.6-3-8.5-7.8-0.5-1.2-0.9-2.3-0.3-1.2-0.5-2.6-0.1-0.8-0.3-1.6 0-1 0-1.7v-65.3l-1.6-0.9q-2.7 0-4.7-1.2-1.8-1.3-1.8-3.3 0-1.8 1.8-3 2-1.3 4.7-1.3h26.2q5.3 0 6.9 2.7 1.8 2.5 1.8 7v67q0 0.3 0.2 0.7 0.1 0.3 0.4 0.8 0.7 1.2 2.6 2.2 1.9 1.1 4 1 0.5 0 0.9 0 0.5-0.1 0.9-0.2 1.4-0.5 2.6-1.7 1.2-1.2 1.2-3.1v-66.7l-1.8-0.7q-2.5 0-4.4-1.4-1.9-1.3-1.9-3 0-1.9 1.9-3.3 1.9-1.3 4.4-1.3h27.9q5.5 0 7 2.2 1.5 2.1 1.7 4.7 0 0.4 0 0.9 0 0.4 0 0.9 0 0.3 0 0.6 0 0.1 0 0.4v73.5l1.5 1q2.7 0 4.5 1.3 1.9 1.2 1.9 3zm72.6-0.1v0.1q0 1.8-1.9 3.2-2 1.3-4.5 1.3l-40.5 0.2q-2.9-0.2-4.7-1.5-1.8-1.4-1.8-3.3 0-1.5 1.8-2.9 1.8-1.3 4.7-1.3l1.3-1v-74.5h-17.4q-2.7 0-4.6-1.2-1.9-1.3-1.8-3.3-0.1-1 1-1.8 1.1-0.8 2.4-1.3 0.9-0.5 1.7-0.6 0.9-0.3 1.3-0.5l43.8-18.6q1.2-0.4 2.3-0.6 1-0.3 1.9-0.3 3.2 0 5 2 1.9 1.9 1.9 4.9v95.8l1.7 1q2.5 0 4.5 1.3 1.9 1.4 1.9 2.9z"/>
|
|
9
|
+
</svg>
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 440 116" width="440" height="116">
|
|
2
|
+
<title>u2-ui-logo</title>
|
|
3
|
+
<path id="<u2> UI " fill="#532b6e" aria-label="<u2> UI" d="M35.5 77.4L35.5 77.4L24.7 87.9L0.25 63.45L24.7 39L35.5 49.5L23.05 63.45L35.5 77.4ZM258.85 63.45L258.85 63.45L234.4 87.9L223.6 77.4L236.05 63.45L223.6 49.5L234.4 39L258.85 63.45Z" />
|
|
4
|
+
<path id="<u2> UI " fill="#7e40a9" aria-label="<u2> UI" d="M141.7 108.3L141.7 108.45Q141.7 110.1 139.75 111.45Q137.95 112.65 135.25 112.65L106.3 112.8Q103 112.65 101.35 110.85Q99.7 109.05 99.25 106.2Q95.8 109.65 90.1 111.75Q84.55 113.7 77.95 113.7Q69.85 113.7 63.1 110.85Q56.5 107.85 54.55 103.05Q54.1 101.85 53.65 100.65Q53.35 99.45 53.2 98.1Q53.05 97.35 52.9 96.45Q52.9 95.55 52.9 94.8L52.9 29.55L51.25 28.65Q48.55 28.65 46.6 27.45Q44.8 26.1 44.8 24.15Q44.8 22.35 46.6 21.15Q48.55 19.8 51.25 19.8L77.5 19.8Q82.75 19.8 84.4 22.5Q86.2 25.05 86.2 29.55L86.2 96.45Q86.2 96.75 86.35 97.2Q86.5 97.5 86.8 97.95Q87.55 99.15 89.35 100.2Q91.3 101.25 93.4 101.25Q93.85 101.25 94.3 101.25Q94.75 101.1 95.2 100.95Q96.55 100.5 97.75 99.3Q98.95 98.1 98.95 96.15L98.95 29.55L97.15 28.8Q94.75 28.8 92.8 27.45Q90.85 26.1 90.85 24.45Q90.85 22.5 92.8 21.15Q94.75 19.8 97.15 19.8L125.05 19.8Q130.6 19.8 132.1 22.05Q133.6 24.15 133.75 26.7Q133.75 27.15 133.75 27.6Q133.75 28.05 133.75 28.5Q133.75 28.8 133.75 29.1Q133.75 29.25 133.75 29.55L133.75 103.05L135.25 103.95Q137.95 103.95 139.75 105.3Q141.7 106.5 141.7 108.3ZM214.3 108.15L214.3 108.3Q214.3 110.1 212.35 111.45Q210.4 112.8 207.85 112.8L167.35 112.95Q164.5 112.8 162.7 111.45Q160.9 110.1 160.9 108.15Q160.9 106.65 162.7 105.3Q164.5 103.95 167.35 103.95L168.7 103.05L168.7 28.5L151.3 28.5Q148.6 28.5 146.65 27.3Q144.85 25.95 144.85 24Q144.85 22.95 145.9 22.2Q146.95 21.45 148.3 20.85Q149.2 20.4 149.95 20.25Q150.85 19.95 151.3 19.8L195.1 1.2Q196.3 0.75 197.35 0.6Q198.4 0.3 199.3 0.3Q202.45 0.3 204.25 2.25Q206.2 4.2 206.2 7.2L206.2 103.05L207.85 103.95Q210.4 103.95 212.35 105.3Q214.3 106.65 214.3 108.15Z" />
|
|
5
|
+
<path id="<u2> UI " fill="#64a9df" aria-label="<u2> UI" d="M385 6.15L385 6.15Q385 8.1 383.05 9.45Q381.25 10.65 378.55 10.65L377.05 11.55L377.05 94.5Q377.05 103.2 365.35 109.35Q353.65 115.5 337.3 115.5Q320.8 115.5 308.95 109.35Q297.25 103.2 297.25 94.5L297.25 11.55L295.75 10.65Q293.05 10.65 291.1 9.45Q289.3 8.1 289.3 6.15Q289.3 4.35 291.1 3.15Q293.05 1.8 295.75 1.8L336.25 1.8Q338.8 1.8 340.6 3.15Q342.55 4.35 342.55 6.15Q342.55 8.1 340.6 9.45Q338.8 10.65 336.25 10.65L334.6 11.55L334.6 90.3Q334.6 93.9 338.65 96.45Q342.7 99 348.25 99Q353.8 99 357.85 96.45Q362.05 93.9 362.05 90.45L362.05 11.55L360.55 10.65Q357.85 10.65 355.9 9.45Q354.1 8.1 354.1 6.15Q354.1 4.35 355.9 3.15Q357.85 1.8 360.55 1.8L378.55 1.8Q381.25 1.8 383.05 3.15Q385 4.35 385 6.15ZM440.05 108L440.05 108.15Q440.05 109.95 438.1 111.3Q436.15 112.65 433.6 112.65L393.1 112.8Q390.25 112.65 388.45 111.3Q386.65 109.95 386.65 108Q386.65 106.5 388.45 105.15Q390.25 103.8 393.1 103.8L394.45 103.05L394.45 11.55L392.95 10.65Q390.25 10.65 388.3 9.45Q386.5 8.1 386.5 6.15Q386.5 4.35 388.3 3.15Q390.25 1.95 392.95 1.95L433.3 1.95Q436 1.95 437.8 3.15Q439.75 4.35 439.75 6.15Q439.75 8.1 437.8 9.45Q436 10.65 433.3 10.65L431.8 11.55L431.8 103.05L433.6 103.8Q436.15 103.8 438.1 105.15Q440.05 106.5 440.05 108Z" />
|
|
6
|
+
</svg>
|
|
@@ -0,0 +1,234 @@
|
|
|
1
|
+
// deno run -A --unstable ./u2/tools\update.repos.json.js
|
|
2
|
+
|
|
3
|
+
const repos = {};
|
|
4
|
+
|
|
5
|
+
import * as fs from 'https://deno.land/std@0.100.0/fs/mod.ts';
|
|
6
|
+
|
|
7
|
+
let base = import.meta.resolve('../../');
|
|
8
|
+
base = base.replace(/file:\/\/\//, '');
|
|
9
|
+
//const base = './u2/';
|
|
10
|
+
|
|
11
|
+
['attr', 'class', 'el', 'css', 'js'].forEach(async category=>{
|
|
12
|
+
repos[category] = {};
|
|
13
|
+
for await (const entry of Deno.readDir(base+category)) {
|
|
14
|
+
if (!entry.isDirectory) continue;
|
|
15
|
+
const name = entry.name;
|
|
16
|
+
const data = await writeReadMe(category, entry);
|
|
17
|
+
|
|
18
|
+
const css = fs.existsSync(`${base}${category}/${name}/${name}.css`);
|
|
19
|
+
const js = fs.existsSync(`${base}${category}/${name}/${name}.js`);
|
|
20
|
+
repos[category][name] = {
|
|
21
|
+
name,
|
|
22
|
+
description: data.description,
|
|
23
|
+
beta: data.description.includes('beta'),
|
|
24
|
+
deprecated: data.description.includes('deprecated'),
|
|
25
|
+
css, // todo: only set if not default for category
|
|
26
|
+
js,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
// bug: hier wird bei jeder kategorie überschrieben
|
|
31
|
+
// todo: sollte nur einmal am ende gemacht werden
|
|
32
|
+
const str = JSON.stringify(repos, null, ' ');
|
|
33
|
+
const write = Deno.writeTextFile(base+"u2/projects.json", str);
|
|
34
|
+
|
|
35
|
+
write.then(() => console.log("File written!"));
|
|
36
|
+
|
|
37
|
+
});
|
|
38
|
+
|
|
39
|
+
console.log(repos);
|
|
40
|
+
|
|
41
|
+
async function writeReadMe(category, entry) {
|
|
42
|
+
const readme = base+category+'/'+entry.name+'/README.md';
|
|
43
|
+
await fs.ensureFile(readme);
|
|
44
|
+
let text = await Deno.readTextFile(readme);
|
|
45
|
+
text = text.trim();
|
|
46
|
+
|
|
47
|
+
const parts = {};
|
|
48
|
+
|
|
49
|
+
// split by h2 headings
|
|
50
|
+
const rawParts = text.split(/[\n^]#{1,2} /);
|
|
51
|
+
const intro = rawParts.shift();
|
|
52
|
+
|
|
53
|
+
for (let part of rawParts) {
|
|
54
|
+
const lines = part.split('\n');
|
|
55
|
+
let firstLine = lines[0];
|
|
56
|
+
let content = lines.slice(1).join('\n').trim();
|
|
57
|
+
let title = firstLine.replaceAll('#', '').trim();
|
|
58
|
+
parts[title] = content;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// tmp:
|
|
62
|
+
delete parts.Demo;
|
|
63
|
+
|
|
64
|
+
parts.Usage = await UsagePart(category, entry);
|
|
65
|
+
parts.Install = installPart(category, entry);
|
|
66
|
+
parts.Demos = await demoPart(category, entry);
|
|
67
|
+
parts.About = aboutPart();
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
const orderedParts = {};
|
|
71
|
+
if (parts.Features) orderedParts.Features = parts.Features;
|
|
72
|
+
if (parts.Usage) orderedParts.Usage = parts.Usage;
|
|
73
|
+
if (parts.API) orderedParts.API = parts.API;
|
|
74
|
+
if (parts.Install) orderedParts.Install = parts.Install;
|
|
75
|
+
if (parts.Demos) orderedParts.Demos = parts.Demos;
|
|
76
|
+
for (let key of Object.keys(parts)) {
|
|
77
|
+
if (orderedParts[key]) continue;
|
|
78
|
+
if (key === 'About') continue;
|
|
79
|
+
if (key === 'Thanks') continue;
|
|
80
|
+
orderedParts[key] = parts[key];
|
|
81
|
+
}
|
|
82
|
+
if (parts.About) orderedParts.About = parts.About;
|
|
83
|
+
if (parts.Thanks) orderedParts.Thanks = parts.Thanks;
|
|
84
|
+
|
|
85
|
+
// // remove first 2 lines from into
|
|
86
|
+
// //let githubData = reposData.get(item);
|
|
87
|
+
// let introContent = intro.split('\n').slice(2).join('\n').trim();
|
|
88
|
+
// let content = dedent(`
|
|
89
|
+
// # ${repoH1(item)}
|
|
90
|
+
// ${githubData?.description}
|
|
91
|
+
|
|
92
|
+
// ${introContent}
|
|
93
|
+
// `)+'\n\n';
|
|
94
|
+
let content = intro.trim()+'\n\n';
|
|
95
|
+
|
|
96
|
+
Object.entries(orderedParts).forEach(([key, value])=>{
|
|
97
|
+
if (value) content += `## ${key}\n\n${value}\n\n`;
|
|
98
|
+
})
|
|
99
|
+
|
|
100
|
+
Deno.writeTextFile(readme, content);
|
|
101
|
+
return {description: intro.split('\n')[1]??''};
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
async function UsagePart(category, entry){
|
|
107
|
+
const name = entry.name;
|
|
108
|
+
|
|
109
|
+
let code = null
|
|
110
|
+
try {
|
|
111
|
+
code = await Deno.readTextFile(base+''+category+'/'+name+'/tests/minimal.html');
|
|
112
|
+
} catch(e) {
|
|
113
|
+
console.log(e)
|
|
114
|
+
}
|
|
115
|
+
if (code) code = code.split('<body>')[1];
|
|
116
|
+
|
|
117
|
+
|
|
118
|
+
let content = '';
|
|
119
|
+
|
|
120
|
+
if (code) {
|
|
121
|
+
let js = code.split(/<script[^>]*>/)?.[1]?.split?.('<\/script>')?.[0];
|
|
122
|
+
if (js) {
|
|
123
|
+
content += '```js\n'+dedent(js).trim()+'\n```\n\n';
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
let html = code.split(/<section[^>]*>/)[1].split('<\/section>')[0];
|
|
127
|
+
if (html) {
|
|
128
|
+
html = dedent(html);
|
|
129
|
+
content += '```html\n'+html+'\n```\n\n';
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
let css = code.split(/<style[^>]*>/)?.[1]?.split?.('<\/style>')?.[0];
|
|
133
|
+
if (css) {
|
|
134
|
+
content += '```css\n'+dedent(css).trim()+'\n```\n\n';
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
// if (name.endsWith('.js')) {
|
|
139
|
+
// // let version = reposData.get(entry.name)?.release_latest.tag_name;
|
|
140
|
+
// // version = version ? version.replace('v','') : 'x.x.x';
|
|
141
|
+
// // let docUrl = `https://doc.deno.land/../../../${name}@${version}/${blankName}.js`;
|
|
142
|
+
// let docUrl = `https://doc.deno.land/../../../${name}@x/${blankName}.js`;
|
|
143
|
+
// content += '[doc]('+docUrl+') \n';
|
|
144
|
+
// }
|
|
145
|
+
|
|
146
|
+
return content.trim();
|
|
147
|
+
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
|
|
151
|
+
function installPart(category, entry) {
|
|
152
|
+
const name = entry.name;
|
|
153
|
+
const baseUrl = 'https://cdn.jsdelivr.net/gh/u2ui/u2@x.x.x/'+category+'/'+name+'/';
|
|
154
|
+
|
|
155
|
+
let html = '';
|
|
156
|
+
if (category === 'el') {
|
|
157
|
+
html = dedent(`
|
|
158
|
+
<link href="${baseUrl}${name}.min.css" rel=stylesheet>
|
|
159
|
+
<script src="${baseUrl}${name}.min.js" type=module async></script>`);
|
|
160
|
+
}
|
|
161
|
+
if (category === 'class') {
|
|
162
|
+
html = `<link href="${baseUrl}${name}.min.css" rel=stylesheet>`;
|
|
163
|
+
}
|
|
164
|
+
if (category === 'attr') {
|
|
165
|
+
html = `<script src="${baseUrl}${name}.min.js" type=module async></script>`;
|
|
166
|
+
}
|
|
167
|
+
if (category === 'js') {
|
|
168
|
+
const js = `import * as module from "${baseUrl}${name}.min.js"`;
|
|
169
|
+
return '```js\n'+js+'\n```';
|
|
170
|
+
}
|
|
171
|
+
return html ? '```html\n'+html+'\n```' : null;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
// function repoH1(name){
|
|
175
|
+
// const blankName = name.replace(/\.[^.]+$/, '');
|
|
176
|
+
// if (name.endsWith('.el')) return `<u2-${blankName}> - element`;
|
|
177
|
+
// if (name.endsWith('.class')) return `.u2-${blankName} - class`;
|
|
178
|
+
// if (name.endsWith('.attr')) return `[u2-${blankName}] - attribute`;
|
|
179
|
+
// return name;
|
|
180
|
+
// }
|
|
181
|
+
|
|
182
|
+
async function demoPart(category, entry){
|
|
183
|
+
try {
|
|
184
|
+
let tests = [];
|
|
185
|
+
for await (const test of Deno.readDir(base+`${category}/${entry.name}/tests/`)) tests.push(test);
|
|
186
|
+
|
|
187
|
+
tests = tests.filter(test=>test.isFile && test.name.endsWith('.html'));
|
|
188
|
+
return tests.map(test=>{
|
|
189
|
+
|
|
190
|
+
return `[${test.name}](http://gcdn.li/u2ui/u2@main/${category}/${entry.name}/tests/${test.name}) `
|
|
191
|
+
|
|
192
|
+
//return `[${test.name}](https://raw.githack.com/u2ui/${entry.name}/main/tests/${test.name}) `
|
|
193
|
+
|
|
194
|
+
// alternatives:
|
|
195
|
+
// https://gitcdn.link/
|
|
196
|
+
// https://cdn.statically.io/gh/u2ui/ico.el/main/tests/ico-directory.html
|
|
197
|
+
// https://gitcdn.link/repo/u2ui/ico.el/main/tests/ico-directory.html
|
|
198
|
+
// https://www.gitcdn.xyz/repo/u2ui/ico.el/main/tests/ico-directory.html
|
|
199
|
+
// https://ghcdn.rawgit.org/u2ui/ico.el/main/tests/ico-directory.html
|
|
200
|
+
// https://combinatronics.com/u2ui/ico.el/main/tests/ico-directory.html
|
|
201
|
+
//return 'https://htmlpreview.github.io/?' + encodeURI(`https://github.com/u2ui/${entry.name}/blob/main/tests/${test.name} `);
|
|
202
|
+
}).join('\n');
|
|
203
|
+
} catch(e) {
|
|
204
|
+
//console.log(e)
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
function aboutPart(){
|
|
208
|
+
return dedent(`
|
|
209
|
+
- MIT License, Copyright (c) 2022 <u2> (like all repositories in this organization) <br>
|
|
210
|
+
- Suggestions, ideas, finding bugs and making pull requests make us very happy. ♥
|
|
211
|
+
`);
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
/* helpers */
|
|
216
|
+
function dedent(text) {
|
|
217
|
+
text = trimLines(text);
|
|
218
|
+
const lines = text.split('\n');
|
|
219
|
+
const secondLine = lines[0];
|
|
220
|
+
if (!secondLine) return text;
|
|
221
|
+
const indent = secondLine.match(/^\s*/)[0];
|
|
222
|
+
if (indent.length === 0) return text;
|
|
223
|
+
return lines.map(line=>line.replace(new RegExp(`^${indent}`), '')).join('\n').trim();
|
|
224
|
+
}
|
|
225
|
+
function trimLines(text){
|
|
226
|
+
const lines = text.split('\n');
|
|
227
|
+
while(1) {
|
|
228
|
+
const line = lines[0];
|
|
229
|
+
if (line==null) break;
|
|
230
|
+
if (line.match(/^\s*$/)) lines.shift();
|
|
231
|
+
else break;
|
|
232
|
+
}
|
|
233
|
+
return lines.join('\n');
|
|
234
|
+
}
|
package/u2/u2.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
|
|
2
|
+
let cachedRepos = null;
|
|
3
|
+
export async function repos(){
|
|
4
|
+
if (!cachedRepos) {
|
|
5
|
+
cachedRepos = {};
|
|
6
|
+
const data = await fetch(import.meta.url + '/../projects.json').then(res=>res.json());
|
|
7
|
+
for (const category in data) {
|
|
8
|
+
for (const repo in data[category]) {
|
|
9
|
+
cachedRepos[category+'/'+repo] = data[category][repo];
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return cachedRepos;
|
|
14
|
+
}
|