From ca0ded30955ae76c1ddeb9e81c845bd975dd062d Mon Sep 17 00:00:00 2001 From: Leon van Kammen Date: Wed, 22 Nov 2023 21:03:41 +0100 Subject: [PATCH] wip --- doc/RFC_XR_Fragments.md | 34 ++++++++++++---------- example/assets/index.glb | Bin 1716720 -> 1680576 bytes index.html | 8 ++--- src/3rd/js/aframe/index.js | 2 ++ src/3rd/js/three/hashbus.js | 5 +++- src/3rd/js/three/xrf/dynamic/filter.js | 7 +++-- src/3rd/js/three/xrf/href.js | 5 ++-- src/3rd/js/three/xrf/src/non-euclidian.js | 4 +-- src/xrfragment/Filter.hx | 4 +-- src/xrfragment/Parser.hx | 4 +-- 10 files changed, 41 insertions(+), 32 deletions(-) diff --git a/doc/RFC_XR_Fragments.md b/doc/RFC_XR_Fragments.md index 3e7f3fb..fb97ddc 100644 --- a/doc/RFC_XR_Fragments.md +++ b/doc/RFC_XR_Fragments.md @@ -290,7 +290,7 @@ For example, to render a portal with a preview-version of the scene, create an 3 1. set the position of the camera accordingly to the vector3 values of `#pos` 1. `rot` sets the rotation of the camera (only for non-VR/AR headsets) 1. `t` sets the playbackspeed and animation-range of the current scene animation(s) or `src`-mediacontent (video/audioframes e.g., use `t=0,7,7` to 'STOP' at frame 7 e.g.) -1. in case an `href` does not mention any `pos`-coordinate, `pos=0,0,0` will be assumed +1. after scene load: in case an `href` does not mention any `pos`-coordinate, `pos=0,0,0` will be assumed Here's an ascii representation of a 3D scene-graph which contains 3D objects `◻` and their metadata: @@ -374,11 +374,12 @@ Resizing will be happen accordingly to its placeholder object `aquariumcube`, se 7. external `src` values should respect the fallback link mechanism (see [broken links](#broken-links) 8. when the placeholder object is a 2D plane, but the mimetype is 3D, then render the spatial content on that plane via a stencil buffer. 9. src-values are non-recursive: when linking to an external object (`src: foo.fbx#bar`), then `src`-metadata on object `bar` should be ignored. -10. clicking on external `src`-values always allow sourceportation: teleporting to the origin URI to which the object belongs. +10. an external `src`-value should always allow a sourceportation icon within 3 meter: teleporting to the origin URI to which the object belongs. 11. when only one object was cherrypicked (`#cube` e.g.), set its position to `0,0,0` -12. equirectangular detection: when the width of an image is twice the height (aspect 2:1), an equirectangular projection is assumed. -13. when the enduser clicks an href with `#t=1,0,0` (play) will be applied to all src mediacontent with a timeline (mp4/mp3 e.g.) +12. when the enduser clicks an href with `#t=1,0,0` (play) will be applied to all src mediacontent with a timeline (mp4/mp3 e.g.) +13. a non-euclidian portal can be rendered for flat 3D objects (using stencil buffer e.g.) in case ofspatial `src`-values (an object `#world3` or URL `world3.fbx` e.g.). +* `model/gltf-binary` * `model/gltf+json` * `image/png` * `image/jpg` @@ -388,7 +389,7 @@ Resizing will be happen accordingly to its placeholder object `aquariumcube`, se [» example 3D asset](https://github.com/coderofsalvation/xrfragment/blob/main/example/assets/src.gltf#L192)
[» discussion](https://github.com/coderofsalvation/xrfragment/issues/4)
-# Navigating content (internal/outbound href portals) +# Navigating content href portals navigation, portals & mutations @@ -404,11 +405,11 @@ navigation, portals & mutations 4. URL navigation should always be reflected in the client (in case of javascript: see [[here](https://github.com/coderofsalvation/xrfragment/blob/dev/src/3rd/js/three/navigator.js) for an example navigator). -5. In XR mode, the navigator back/forward-buttons should be always visible (using a wearable e.g., see [[here](https://github.com/coderofsalvation/xrfragment/blob/dev/example/aframe/sandbox/index.html#L26-L29) for an example wearable) +7. In XR mode, the navigator back/forward-buttons should be always visible (using a wearable e.g., see [[here](https://github.com/coderofsalvation/xrfragment/blob/dev/example/aframe/sandbox/index.html#L26-L29) for an example wearable) -6. in case of navigating to a new [[pos)ition, ''first'' navigate to the ''current position'' so that the ''back-button'' of the ''browser-history'' always refers to the previous position (see [[here](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js#L97)) +8. in case of navigating to a new [[pos)ition, ''first'' navigate to the ''current position'' so that the ''back-button'' of the ''browser-history'' always refers to the previous position (see [[here](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js#L97)) -7. portal-rendering: a 2:1 ratio texture-material indicates an equirectangular projection +9. ignore previous rule in special cases, like clicking an `href` using camera-portal collision (the back-button would cause a teleport-loop) [» example implementation](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/href.js)
[» example 3D asset](https://github.com/coderofsalvation/xrfragment/blob/main/example/assets/href.gltf#L192)
@@ -498,7 +499,7 @@ It's simple but powerful syntax which allows filtering the scene using searcheng 1. filters are a way to traverse a scene, and filter objects based on their name, tag- or property-values. -* see [an (outdated) example video here](https://coderofsalvation.github.io/xrfragment.media/queries.mp4) which used a dedicated `q=` variable (now deprecated) +* see [an (outdated) example video here](https://coderofsalvation.github.io/xrfragment.media/queries.mp4) which used a dedicated `q=` variable (now deprecated and usable directly) ## including/excluding @@ -509,7 +510,7 @@ It's simple but powerful syntax which allows filtering the scene using searcheng | `=>` `=<`| compare float or int number (`#price=>4` e.g.) | | `/` | reference to root-scene.
Useful in case of (preventing) showing/hiding objects in nested scenes (instanced by `src`) (*) | -> \* = `#q=-/cube` hides object `cube` only in the root-scene (not nested `cube` objects)
`#q=-cube` hides both object `cube` in the root-scene AND nested `skybox` objects | +> \* = `#-/cube` hides object `cube` only in the root-scene (not nested `cube` objects)
`#-cube` hides both object `cube` in the root-scene AND nested `skybox` objects | [» example implementation](https://github.com/coderofsalvation/xrfragment/blob/main/src/3rd/js/three/xrf/q.js) [» example 3D asset](https://github.com/coderofsalvation/xrfragment/blob/main/example/assets/filter.gltf#L192) @@ -861,12 +862,12 @@ For example: │ │ │ index.gltf │ │ │ │ - │ │ #: #q=-offlinetext │ + │ │ #: #-offlinetext │ │ │ │ │ ├── ◻ buttonA │ │ │ └ href: http://foo.io/campagne.fbx │ │ │ └ href@404: ipfs://foo.io/campagne.fbx │ - │ │ └ href@400: #q=clienterrortext │ + │ │ └ href@400: #clienterrortext │ │ │ └ ◻ offlinetext │ │ │ │ │ └── ◻ embeddedObject <--------- the meshdata inside embeddedObject will (not) @@ -890,9 +891,9 @@ Consider 3D scenes linking to eachother using these `href` values: These links would all show visible links to math-tagged objects in the scene.
To filter out non-related objects one could take it a step further using filters: -* `href: schoolA.edu/projects.gltf#math&q=-topics math` -* `href: schoolB.edu/projects.gltf#math&q=-courses math` -* `href: university.edu/projects.gltf#math&q=-theme math` +* `href: schoolA.edu/projects.gltf#math&-topics math` +* `href: schoolB.edu/projects.gltf#math&-courses math` +* `href: university.edu/projects.gltf#math&-theme math` > This would hide all object tagged with `topic`, `courses` or `theme` (including math) so that later only objects tagged with `math` will be visible @@ -944,7 +945,7 @@ This document has no IANA actions. |placeholder object | a 3D object which with src-metadata (which will be replaced by the src-data.) | |src | (HTML-piggybacked) metadata of a 3D object which instances content | |href | (HTML-piggybacked) metadata of a 3D object which links to content | -|filter | URI Fragment(s) which show/hide object(s) in a scene based on name/tag/property (`#q=cube&-price=>3`) | +|filter | URI Fragment(s) which show/hide object(s) in a scene based on name/tag/property (`#cube&-price=>3`) | |visual-meta | [visual-meta](https://visual.meta.info) data appended to text/books/papers which is indirectly visible/editable in XR. | |requestless metadata | metadata which never spawns new requests (unlike RDF/HTML, which can cause framerate-dropping, hence not used a lot in games) | |FPS | frames per second in spatial experiences (games,VR,AR e.g.), should be as high as possible | @@ -952,6 +953,7 @@ This document has no IANA actions. |extrospective | outward sensemaking ("I'm fairly sure John is a person who lives in oklahoma") | |`◻` | ascii representation of an 3D object/mesh | |(un)obtrusive | obtrusive: wrapping human text/thought in XML/HTML/JSON obfuscates human text into a salad of machine-symbols and words | +|flat 3D object | a 3D object of which all verticies share a plane | |BibTeX | simple tagging/citing/referencing standard for plaintext | |BibTag | a BibTeX tag | |(hashtag)bibs | an easy to speak/type/scan tagging SDL ([see here](https://github.com/coderofsalvation/hashtagbibs) which expands to BibTex/JSON/XML | diff --git a/example/assets/index.glb b/example/assets/index.glb index 1d71851a4c1e099ffcc1b7a0ae759336ac7b718d..ecfa84b55bbf2432d9e201b9ceb80e4aafab862e 100644 GIT binary patch delta 99890 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
r-S01Y;2u; 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 delta 112202 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%0Ad zKWrTLmCrkN92b|yb#M8pco^5k$9NcP-}0Y2#@hHUp-bx$@QLM4iD_LTu7sGzc|VT; zh7Tsf)Ks94lPJ)iO6NyY@rP5o*EWTFWmCB~HrD!LD(B1F8~)cvUw+EhrQnh-F)K0K z*C{H|(ImViW?QbL>?EGk9Eu}3XEIFc3@_Scb(vij7l>Ig6U~N!n1^P^Y?zzo!0ecd z=ENK>gG=YqV@6uqm2{L-;iqo>L2rc4@Vo_HN%elh5 z7Ur!iyAUg%E66IyF2^pw%IEUadajPE>*`}YtW6tWeXK=0U<20?JJ9yn(beQ?=y5b~ z4P86hiKmY2wp^Xrov;RN#7jeLL%Z>$^a-2}Z#j9{KBas<0d*qSzVt!OiBiY;k#Y=$jpH#gjM#bLCY8%n!lHy484 zU8ozv8o~}?4`zkBFgn2XbN$(axO!ly8|eCZJojJ>!hW>xNZVa7>6L2)0gcIFlH-$CDO~t8h8cyT=r_d8Du157S43DT@)*d zJ68HJ#^H(G~pJ<<4`FZUj4=YbCBgkItj3 z_(VF-<5rUQxxJ27HHoEa)HT`ym)%360^nZ-5g%|(; diff --git a/index.html b/index.html index 4e7e364..66ee137 100644 --- a/index.html +++ b/index.html @@ -782,7 +782,7 @@ Error message and password prompt {"created":"20230427174739986","text":"> in \u003Ca href=\"./dist/xrfragment.js\" target=\"_blank\">xrfragment.js\u003C/a>, and \u003Ca href=\"./dist/xrfragment.module.js\" target=\"_blank\">xrfragment.module.js\u003C/a>\n\nParse a fragment (key/value) and add it to an object store (if valid).\n\n> **NOTE**: You probably want to use the higher-level [URI.parse(url,filter)](#%E2%86%AA%20URI.parse%28url%2Cfilter%29) which calls this function\n\n| args | type | example | comment |\n|-|-|-|-|\n| key | string | `pos` | |\n| value | string | `1.2,3,4` | datatype must comply with [spec](#List%20of%20fragments) |\n| store | object | {} | will not be touched if validation failed, |\n\n> returns true if validated, otherwise false \n\nhere are some interactive examples:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = {}\nok = xrfragment.Parser.parse('pos','1.2,2,3',frags)\nconsole.log( frags.pos )\n\n\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n\u003Cbr>\n\nUnknown or fragments with wrong type will be rejected:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = {}\nok = xrfragment.Parser.parse('pos','true',frags)\nconsole.log( frags.pos )\n\n\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n# Spec \n\n> version 0.2 @ 2023-06-27T11:10:08+0200  [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions)\n\nIn case your programming language has no parser ([check here](https://github.com/coderofsalvation/xrfragment/tree/main/dist)) you can [crosscompile it](https://github.com/coderofsalvation/xrfragment/blob/main/build.hxml), or roll your own `Parser.parse(k,v,store)` using the spec:\n\n1. requirement: receive arguments: key (string), value (string), store (writable associative array/object)\n1. add keys without values to store as [predefined view](predefined_view)\n1. check if fragment is official XR Fragment\n1. guess the type of the value (string,int,float,x,y,z,color,args,query)\n1. don't add to store if value-type is incorrect\n1. if valid, add to store\n1. prefix non-offical fragment key's with underscore (and add to store)\n\n> icanhazcode? yes, see [Parser.hx](https://github.com/coderofsalvation/xrfragment/blob/main/src/xrfragment/Parser.hx)\n\n# Tests\n \nthe spec is tested with [JSON unittests](./../src/spec) consumed by [Test.hx](./../src/Test.hx) to cross-test all languages.\n\n","tags":"[[The parser]]","title":"↪ Parser.parse(k,v,store)","modified":"20230804100127236","type":"text/markdown"}, {"created":"20230622103539209","text":"> in \u003Ca href=\"./dist/xrfragment.js\" target=\"_blank\">xrfragment.js\u003C/a>, and \u003Ca href=\"./dist/xrfragment.module.js\" target=\"_blank\">xrfragment.module.js\u003C/a>\n\nParses a [[query|queries]] and returns it in object form\n\n| args | type | example |\n|-|-|-|\n| query | string | `foo -bar`\u003Cbr>`price:1 price:\u003C10`\u003Cbr>`.someclass`|\n\n> returns each query-argument as annotated key(objects)\n\nThe AFRAME/THREE library does this for you, but here's an interactive example of parsing a query using the [[parser for other languages|https://github.com/coderofsalvation/xrfragment/tree/main/dist]]:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = new xrfragment.Query('cube -ball_inside_cube')\nconsole.log(frags.q)\n\n\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n# Spec \n\n> version 0.2 [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions) generated by `make doc` @ 2023-06-27T11:40:29+0200\n\nIn case your programming language has no parser ([check here](https://github.com/coderofsalvation/xrfragment/tree/main/dist)) you can [crosscompile it](https://github.com/coderofsalvation/xrfragment/blob/main/build.hxml), or roll your own `Query.parse(str)` using the spec:\n\n1. requirement: receive arguments: query (string)\n1. create an associative array/object to store query-arguments as objects\n1. detect object id's & properties `foo:1` and `foo` (reference regex: `/^.*:[>\u003C=!]?/` )\n1. detect excluders like `-foo`,`-foo:1`,`-.foo`,`-/foo` (reference regex: `/^-/` )\n1. detect root selectors like `/foo` (reference regex: `/^[-]?\\//` )\n1. detect class selectors like `.foo` (reference regex: `/^[-]?class$/` )\n1. detect number values like `foo:1` (reference regex: `/^[0-9\\.]+$/` )\n1. expand aliases like `.foo` into `class:foo`\n1. for every query token split string on `:`\n1. create an empty array `rules`\n1. then strip key-operator: convert \"-foo\" into \"foo\" \n1. add operator and value to rule-array\n1. therefore we we set `id` to `true` or `false` (false=excluder `-`)\n1. and we set `root` to `true` or `false` (true=`/` root selector is present)\n1. we convert key '/foo' into 'foo'\n1. finally we add the key/value to the store (`store.foo = {id:false,root:true}` e.g.)\n\n> icanhazcode? yes, see [Query.hx](https://github.com/coderofsalvation/xrfragment/blob/main/src/xrfragment/Query.hx)\n\n# Tests\n \nthe spec is tested with [JSON unittests](./../src/spec) consumed by [Test.hx](./../src/Test.hx) to cross-test all languages.\n\n","tags":"[[The parser]]","title":"↪ Query(query)","modified":"20230804095924737","type":"text/markdown","list-after":"List of fragments"}, {"created":"20230427150948872","text":"> in \u003Ca href=\"./dist/xrfragment.js\" target=\"_blank\">xrfragment.js\u003C/a>, and \u003Ca href=\"./dist/xrfragment.module.js\" target=\"_blank\">xrfragment.module.js\u003C/a>\n\nValidates and turns a XR fragment string (`document.location.hash` in javascript e.g.) into objectform using [Parser.parse(k,v,store)](#↪%20Parser.parse(k,v,store)).\n\n| args | type | example | comment |\n|-|-|-|-|\n| url | string | `#pos=1.2,3,4`\u003Cbr>`#pos=1.2,3,4&t=1,2`| |\n| filter | integer\u003Cbr>(bitmask) | `0` = no filter\u003Cbr>`XRF.NAVIGATOR` (default)\u003Cbr>`XRF.EMBEDDED`\u003Cbr>`XRF.PV_OVERRIDE` | filter out fragments which are not flagged with this flag.\u003Cbr>\u003Cbr>For example, parsing with `XRF.NAVIGATOR` will ignore any fragments which are not flagged as such (like `scale` in case of top-level URI navigation).\u003Cbr>On the other hand, `XRF.EMBEDDED` makes sense when parsing an embedded URI (`src: other.gltf#scale=2,2,2` e.g.)\u003Cbr> |\n\n> returns an object with validated fragment(values) as key(objects)\n\nhere are some interactive examples:\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = xrfragment.URI.parse('#pos=1.0,2.0,3.0')\nconsole.log( frags.pos )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n\u003Cbr>\n\nYou can combine them with the `&` character:\u003Cbr>\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = xrfragment.URI.parse('#t=1,100&pos=1,2,3.1')\nconsole.log( frags.t )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\nUnallowed fragments can be filtered out:\u003Cbr>\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">XRF = xrfragment.XRF\nfrags = xrfragment.URI.parse('#scale=1,2,3', XRF.NAVIGATOR )\nconsole.log( frags )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n> The above is perfect for top-level browser navigation (which should not parse \u003Cb>embedded-only\u003C/b> XR Fragments like `scale` or [queries](#queries))\n\nAnother example for parsing embedded assets\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">XRF = xrfragment.XRF\nmymodel = {userData:{src: \"other.gltf#scale=2,2,2\"}} // mock THREE.js\nfrags = xrfragment.URI.parse( mymodel.userData.src, XRF.EMBEDDED )\nconsole.log( frags.scale.x )\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n> The above is perfect for embedded content (`scale` fragment is allowed here)\n\nFinally, parsing \u003Cb>custom\u003C/b> framework-specific fragments is also possible (they are prefixed with `_`)\u003Cbr>\n\n\u003Cdiv>\n \u003Ctextarea spellcheck=\"false\" autofocus class=\"sandboxify\">frags = xrfragment.URI.parse(\"#pos=0,0,1&foo=123&bar=flop\")\nconsole.log(frags._foo.int)\u003C/textarea>\n\t\u003Cpre class=\"result\">\u003C/pre>\n\u003C/div>\n\n> The above is perfect for embedded content (`scale` fragment is allowed here)\n\n# Spec\n\n> version 0.2 [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions) generated by `make doc` @ 2023-06-27T11:18:12+0200\n\n### XR Fragment URI Grammar \n\n```\n reserved = gen-delims / sub-delims\n gen-delims = \"#\" / \"&\" \n sub-delims = \",\" / \"=\"\n```\n\n> Example: `://foo.com/my3d.asset#pos=1,0,0&prio=-5&t=0,100`\n\n| Explanation | |\n|-|-|\n| `pos=1,2,3` | vector/coordinate argument e.g. |\n| `pos=1,2,3&rot=0,90,0&q=.foo` | combinators |\n\nIn case your programming language has no parser ([check here](https://github.com/coderofsalvation/xrfragment/tree/main/dist)) you can [crosscompile it](https://github.com/coderofsalvation/xrfragment/blob/main/build.hxml), or roll your own `Parser.parse(k,v,store)` using the spec:\n\n1. store key/values into a associative array or dynamic object\n1. fragment URI starts with `#`\n1. fragments are split by `&`\n1. loop thru each fragment\n1. for each fragment split on `=` to separate key/values \n1. fragment-values are urlencoded (space becomes `+` using `encodeUriComponent` e.g.)\n1. for every recognized fragment key/value-pair call [Parser.parse](#%E2%86%AA%20Parser.parse%28k%2Cv%2Cstore%29)\n\n> icanhazcode? yes, see [URI.hx](https://github.com/coderofsalvation/xrfragment/blob/main/src/xrfragment/URI.hx)\n\n# Tests\n \nthe spec is tested with [JSON unittests](./../src/spec) consumed by [Test.hx](./../src/Test.hx) to cross-test all languages.\n","tags":"[[The parser]]","title":"↪ URI.parse(url,filter)","modified":"20230804095944433","type":"text/markdown","list-after":"List of fragments"}, -{"created":"20230830155016049","text":"\n> **DISCLAIMER**: XR Macros is a tiny logic-layer which falls outside of the scope of the XR Fragment spec (for now). \u003Cbr>They currently demonstrate features beyond the addressibility/navigation/embedding-focus of XR Fragments, and fall more into the demo/authoring-side of things. Every XR macro demonstration should potentially be replaced by piggybacking \u003Ca href=\"https://github.com/omigroup/gltf-extensions\" target=\"_blank\">OMI extensions\u003C/a> (when they support the usecase).\n\u003Cbr>\n\nXR Macros are a tiny roundrobin logic-layer **defined inside** 3D assets/scenes. \u003Cbr>\nMacros introduce a lowest-common-denominator logic-layer, by recursive, economic re-use of the querystring syntax (which the XR Fragment parser already uses).\u003Cbr>\n\u003Cbr>\nThe example XR macro's are based on common usecases & features found in 3D engines, to offer an lowcode alternative to basic experiences without requiring a scripting language.\u003Cbr>\n(Sometimes a spreadsheet will do instead of a programming language).\u003Cbr>\n\n# Spec\n\nBelow is the related section of the spec (full spec here: [[HTML|doc/RFC_XR_Macros.html]], [[TXT|doc/RFC_XR_Fragments.txt]], [[XML|doc/RFC_XR_Fragments.xml]])\n\n\u003Ciframe src=\"doc/RFC_XR_Macros.html#core-principle\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n# Example macros\n\n| XR macro | type | access | supported\u003Cbr>in\u003Cbr>sandbox |info |\n|----------|------|--------------|-|------|\n| **fov** |int 1..360|🔓 💥 👩 🔗|✔| hints field of view to renderer|\n| **clip** |[vector2](#vector) |🔓 💥 👩 🔗|✔| hints camera clipping to renderer |\n| **bg** |[vector3](#vector)|🔓 💥 👩 🔗|✔| hints background rgb values (0..255) to renderer\n| **fog** |[vector2](#vector)|🔓 💥 👩 🔗|✔| hints fog settings to renderer |\n| **env** |string|🔓 💥 🔗|✔|query selector / object manipulation|\n| [show](#show) |integer [0-1] |🔒 🎲 💥 🔗| ✔|show/hide [queried](#queries) object(s)|\n| [mov](#mov) |[vector3](#vector ) |🔒 🎲 💥 🔗| ✔|move [queried](#queries) object(s) \u003Cb>relatively\u003C/b> (instead of \u003Cb>absolute\u003C/b> using `#pos=`)|\n| [scale](#scale) |[vector3](#vector ) |🔓 🎲 💥 🔗| ✔|scale [queried](#queries) object(s) |\n| **prio** |int|🔒||asset loading linking|\n| **gravity** |[vector3](#vector) |🔓 💥 🔗||animation|\n| **physics** |[vector3](#vector) |🔓 💥 🔗||animation|\n| **namespace** |string|🔒||author / metadata|\n| **SPDX** |string|🔒||author / metadata|\n| **unit** |string|🔒||author / metadata|\n| **description** |string|🔒||author / metadata|\n| **session** |[url](#url ) |🔓 💥 👩 🔗 ✋?||multiparty|\n\n🔒 = value(s) can only be defined in 3D asset (immutable)\u003Cbr>\n🔓 = value(s) can be overwritten in certain context (by url)\u003Cbr>\n🎲 = multiple values will be roundrobin'ed (`#pos=0,0,0|1,0,0` e.g.)\u003Cbr>\n💥 = value(s) can be overwritten by [predefined_view](#predefined_view)\u003Cbr>\n👩 = value(s) can be overwritten when user clicks `href` (value) or top-level URL change(see [How it works](#How%20it%20works))\u003Cbr>\n🔗 = value(s) can be overwritten when 3D asset is embedded/linked as `src` value\u003Cbr>\n✋? = value(s) can be overwritten by offering confirmation/undo to user\u003Cbr>\u003Cbr>\n\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.github.io/xrfragment.media/fovfogclip.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\nfor more info see [How it works](#How%20it%20works)","tags":"Reference","title":"⏯️ XR Macros","modified":"20230921092420344","type":"text/markdown"}, +{"created":"20230830155016049","text":"\n> **DISCLAIMER**: XR Macros is a tiny logic-layer which falls outside of the scope of the XR Fragment spec (for now). \u003Cbr>They currently demonstrate features beyond the addressibility/navigation/embedding-focus of XR Fragments, and fall more into the demo/authoring-side of things. Every XR macro demonstration should potentially be replaced by piggybacking \u003Ca href=\"https://github.com/omigroup/gltf-extensions\" target=\"_blank\">OMI extensions\u003C/a> (when they support the usecase).\n\u003Cbr>\n\nXR Macros are a tiny roundrobin logic-layer **defined inside** 3D assets/scenes. \u003Cbr>\nMacros introduce a lowest-common-denominator logic-layer, by recursive, economic re-use of the querystring syntax (which the XR Fragment parser already uses).\u003Cbr>\n\u003Cbr>\nThe example XR macro's are based on common usecases & features found in 3D engines, to offer an lowcode alternative to basic experiences without requiring a scripting language.\u003Cbr>\n(Sometimes a spreadsheet will do instead of a programming language).\u003Cbr>\n\n# Spec\n\nBelow is the related section of the spec (full spec here: [[HTML|doc/RFC_XR_Macros.html]], [[TXT|doc/RFC_XR_Fragments.txt]], [[XML|doc/RFC_XR_Fragments.xml]])\n\n\u003Ciframe src=\"doc/RFC_XR_Macros.html#core-principle\" frameborder=\"0\" class=\"spec\">\u003C/iframe>\n\n# Example macros\n\n| XR macro | type | access | supported\u003Cbr>in\u003Cbr>sandbox |info |\n|----------|------|--------------|-|------|\n| **fov** |int 1..360|🔓 💥 👩 🔗|✔| hints field of view to renderer|\n| **clip** |[vector2](#vector) |🔓 💥 👩 🔗|✔| hints camera clipping to renderer |\n| **bg** |[vector3](#vector)|🔓 💥 👩 🔗|✔| hints background rgb values (0..255) to renderer\n| **fog** |[vector2](#vector)|🔓 💥 👩 🔗|✔| hints fog settings to renderer |\n| **env** |string|🔓 💥 🔗|✔|query selector / object manipulation|\n| [show](#show) |integer [0-1] |🔒 🎲 💥 🔗| ✔|show/hide [queried](#queries) object(s)|\n| [mov](#mov) |[vector3](#vector ) |🔒 🎲 💥 🔗| ✔|move [queried](#queries) object(s) \u003Cb>relatively\u003C/b> (instead of \u003Cb>absolute\u003C/b> using `#pos=`)|\n| [scale](#scale) |[vector3](#vector ) |🔓 🎲 💥 🔗| ✔|scale [queried](#queries) object(s) |\n| **prio** |int|🔒||asset loading linking|\n| **gravity** |[vector3](#vector) |🔓 💥 🔗||animation|\n| **physics** |[vector3](#vector) |🔓 💥 🔗||animation|\n| **namespace** |string|🔒||author / metadata|\n| **SPDX** |string|🔒||author / metadata|\n| **unit** |string|🔒||author / metadata|\n| **description** |string|🔒||author / metadata|\n| **session** |[url](#url ) |🔓 💥 👩 🔗 ✋?||multiparty|\n\n🔒 = value(s) can only be defined in 3D asset (immutable)\u003Cbr>\n🔓 = value(s) can be overwritten in certain context (by url)\u003Cbr>\n🎲 = multiple values will be roundrobin'ed (`#pos=0,0,0|1,0,0` e.g.)\u003Cbr>\n💥 = value(s) can be overwritten by [predefined_view](#predefined_view)\u003Cbr>\n👩 = value(s) can be overwritten when user clicks `href` (value) or top-level URL change(see [How it works](#How%20it%20works))\u003Cbr>\n🔗 = value(s) can be overwritten when 3D asset is embedded/linked as `src` value\u003Cbr>\n✋? = value(s) can be overwritten by offering confirmation/undo to user\u003Cbr>\u003Cbr>\n\n\u003Cdiv style=\"max-width:600px\">\n\u003C$videojs controls=\"controls\" aspectratio=\"16:9\" preload=\"auto\" poster=\"\" fluid=\"fluid\" class=\"vjs-big-play-centered\">\n \u003Csource src=\"https://coderofsalvation.github.io/xrfragment.media/fovfogclip.mp4\" type=\"video/mp4\"/>\n\u003C/$videojs>\n\u003C/div>\n\nfor more info see [How it works](#How%20it%20works)","tags":"","title":"⏯️ XR Macros","modified":"20231122145951626","type":"text/markdown"}, {"created":"20230830155951504","text":"this document was [moved here](#📜%20XR%20Fragments)","tags":"","title":"📜 XR fragments","modified":"20230830160038977","type":"text/markdown"}, {"created":"20230427172131986","text":"## URL Addressibility spec \n\n> v0.2   [![Actions Status](https://github.com/coderofsalvation/xrfragment/workflows/test/badge.svg)](https://github.com/coderofsalvation/xrfragment/actions)\u003Cbr>Bare minimum addressibility URI fragments for spatial browsers & apps. \u003Cbr>It allows users to share 4D (intent) URLs to eachother like:\u003Cbr>`https://linux.world/#pos=0,0,1&t=1,100`\u003Cbr>`linuxapp://conference/nixworkshop?newuser#pos=0,0,2&t=2,200`\u003Cbr>`androidapp://page1?tutorial#pos=0,0,1&t1,100`\u003Cbr>\n\n| URI fragment | type | functionality |\n|----------|------|---------------|\n| [\u003Cb>#pos\u003C/b>=0,0,0](#pos) |[vector3](#vector ) | (re)position camera |\n| [\u003Cb>#rot\u003C/b>=0,90,0](#rot) |[vector3](#vector ) |rotate camera |\n| [\u003Cb>#t\u003C/b>=0,100](#t) |[vector3](#vector ) | (re)position time of (scene-animation or [src](#src)-mediacontent) looprange |\n| **#...** |[predefined view](#predefined_view ) or XRWG tag [selection](#Selection%20of%20interest)| referencing of objects, or local repositioning of the user|\n\n## Navigator metadata spec\n\n\n| custom property | type | functionality |\n|----------|------|--------------|\n| [href](#href) | string (uri or [predefined view](#predefined_view)) | href navigation / portals / teleporting to other XR documents|\n| [src](#src) |string (uri or [predefined view](#predefined_view) or [query](#queries)) | lazyloading of (partial) local/external assets/scenes (3D iframes) |\n| tag |string|space-separated tagging of objects (like CSS class) for XRWG and or queries|\n\n> An Easy **nocode** way to add metadata is [by adding custom properties in blender e.g.](https://docs.blender.org/manual/en/2.79/data_system/custom_properties.html). [Click here](#href) for more info\n\n## Query spec\n\n| URI Fragment| custom property | type | usage |\n|----------------|-------------|------|-------|\n| [#q=cube](#queries) |string | filtering of objects |\n\n> [click here](#queries) for more info\n\nFor more info see [How it works](#How%20it%20works)\n\n> \u003Cb>See XR Macro's\u003C/b> for [extra interaction features](#⏯️%20XR%20Macros)","tags":"Reference","title":"📜 XR Fragments","modified":"20231012150033456","type":"text/markdown"}, {"text":"(function(){\n\n/*jslint node: true, browser: true */\n/*global $tw: false */\n\"use strict\";\n\n/*\nenables js via \u003C\u003Cscript>> and disables with \u003C\u003Cscript 0>>\n*/\n\nexports.name = \"script\";\n\nexports.params = [\n\t{name: \"run\"},\n];\n\n/*\nRun the macro\n*/\nexports.run = function(run) {\n var off = run ? run.toLowerCase() : false;\n\tif(off && [\"0\",\"no\",\"off\",\"false\"].indexOf(off) > -1) {\n\t\t$tw.config.htmlUnsafeElements = [\"script\"];\n\t} else {\n\t\t$tw.config.htmlUnsafeElements = [];\n\t}\nreturn \"\";\n};\n})();","type":"application/javascript","title":"$:/.tb/macros/script","tags":"","module-type":"macro","modifier":"Tobias Beer","modified":"20150129192206415","creator":"Tobias Beer","created":"20150129001857442"}, @@ -842,7 +842,7 @@ Error message and password prompt {"created":"20230425164931250","title":"$:/state/folded/AFRAME template","text":"show","modified":"20230425164935940"}, {"created":"20230425164931250","title":"$:/state/folded/GLSL shader template","text":"show","modified":"20230425164939576"}, {"created":"20230424142403302","text":"checked","title":"$:/state/import/select-all","modified":"20230424142404392"}, -{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"no","modified":"20231121143302609"}, +{"created":"20230423163640468","title":"$:/state/notebook-sidebar","text":"no","modified":"20231122150009072"}, {"created":"20230423163641722","title":"$:/state/notebook-sidebar-section","text":"Reference","modified":"20231013135341050"}, {"created":"20230427102758222","title":"$:/state/plugin-info--1887569658-$:/plugins/ihm/tidgraph--50210113","text":"documentation","modified":"20230427102759911"}, {"created":"20230427092525294","title":"$:/state/plugin-info--391242618-$:/plugins/tiddlywiki/browser-storage","text":"yes","modified":"20230427092525375"}, @@ -850,7 +850,7 @@ Error message and password prompt {"created":"20230424092949812","title":"$:/state/plugin-info-1024395336-$:/plugins/tiddlywiki/codemirror--1574138004","text":"contents","modified":"20230425143706081"}, {"created":"20230424093627704","title":"$:/state/plugin-info-833095967-Draft of '$:/core'---1604322978","text":"readme","modified":"20230424093629208"}, {"created":"20230423163649566","title":"$:/state/showeditpreview","text":"yes","modified":"20231121145510823"}, -{"created":"20230504174435745","title":"$:/state/sidebar","text":"no","modified":"20231121142235428"}, +{"created":"20230504174435745","title":"$:/state/sidebar","text":"no","modified":"20231122145923387"}, {"created":"20230423163453188","title":"$:/state/tab--1963855381","text":"$:/themes/nico/notebook/themetweaks","modified":"20230523124919651"}, {"created":"20230427092954391","title":"$:/state/tab--2112689675","text":"$:/core/ui/ControlPanel/Basics","modified":"20230523124903522"}, {"created":"20230424093058379","title":"$:/state/tab--697582678","text":"$:/core/ui/ControlPanel/Settings/TiddlyWiki","modified":"20230427093030201"}, @@ -869,7 +869,7 @@ Error message and password prompt {"created":"20230622104329622","title":"$:/state/toc/Reference/js/AFRAME-THREE.js--403145756","text":"open","modified":"20230622104329622"}, {"created":"20230622111759784","title":"$:/state/toc/Reference/The parser-THREE.js--403145756","text":"open","modified":"20230622111759784"}, {"title":"$:/status/RequireReloadDueToPluginChange","text":"no"}, -{"title":"$:/StoryList","text":"","list":"[[XR Fragments]]"}, +{"title":"$:/StoryList","created":"20231122145939418","text":"","list":"[[XR Fragments]]","modified":"20231122145939418"}, {"created":"20230423163445948","title":"$:/theme","text":"$:/themes/nico/notebook","modified":"20230423163445948"}, {"text":"{\n \"tiddlers\": {\n \"$:/themes/nico/notebook/LICENSE\": {\n \"title\": \"$:/themes/nico/notebook/LICENSE\",\n \"created\": \"20200419141443144\",\n \"modified\": \"20210118213330307\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\nMIT License Copyright (c) 2020 [[Nicolas Petton|https://nicolas.petton.fr]] nicolas@petton.fr\\n\\nPermission is hereby granted, free of charge, to any person obtaining a copy\\nof this software and associated documentation files (the \\\"Software\\\"), to deal\\nin the Software without restriction, including without limitation the rights\\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\\ncopies of the Software, and to permit persons to whom the Software is furnished\\nto do so, subject to the following conditions:\\n\\nThe above copyright notice and this permission notice (including the next\\nparagraph) shall be included in all copies or substantial portions of the\\nSoftware.\\n\\nTHE SOFTWARE IS PROVIDED \\\"AS IS\\\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS\\nFOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS\\nOR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,\\nWHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF\\nOR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.\\n\"\n },\n \"$:/themes/nico/notebook/themetweaks\": {\n \"title\": \"$:/themes/nico/notebook/themetweaks\",\n \"created\": \"20201217172915960\",\n \"modified\": \"20210123211851680\",\n \"tags\": \"$:/tags/ControlPanel/Appearance\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"text\": \"\\\\define lingo-base() $:/language/ThemeTweaks/\\n\\nYou can tweak certain aspects of the ''Notebook'' theme.\\n\\n! \u003C\u003Clingo Options>>\\n\\n|\u003C$link to=\\\"$:/themes/nico/notebook/options/stickytitles\\\">\u003C\u003Clingo Options/StickyTitles>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Options/StickyTitles/Hint>>// |\u003C$select tiddler=\\\"$:/themes/nico/notebook/options/stickytitles\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003C\u003Clingo Options/CodeWrapping>>\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/tiddlywiki/vanilla/options/codewrapping\\\">\u003Coption value=\\\"pre\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"pre-wrap\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\">Reveal tiddler controls on mouseover\u003C/$link> |\u003C$select tiddler=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\">\u003Coption value=\\\"no\\\">{{$:/language/No}}\u003C/option>\u003Coption value=\\\"yes\\\">{{$:/language/Yes}}\u003C/option>\u003C/$select> |\\n\\n! \u003C\u003Clingo Settings>>\\n\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/fontfamily\\\">\u003C\u003Clingo Settings/FontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/fontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/codefontfamily\\\">\u003C\u003Clingo Settings/CodeFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/codefontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/settings/editorfontfamily\\\">\u003C\u003Clingo Settings/EditorFontFamily>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/settings/editorfontfamily\\\" default=\\\"\\\" tag=\\\"input\\\"/> | |\\n\\n! \u003C\u003Clingo Metrics>>\\n\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\">\u003C\u003Clingo Metrics/FontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/fontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\">\u003C\u003Clingo Metrics/LineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/lineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodyfontsize\\\">\u003C\u003Clingo Metrics/BodyFontSize>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/bodyfontsize\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/bodylineheight\\\">\u003C\u003Clingo Metrics/BodyLineHeight>>\u003C/$link> |\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/bodylineheight\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\">\u003C\u003Clingo Metrics/SidebarBreakpoint>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarBreakpoint/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/metrics/sidebar-width\\\">\u003C\u003Clingo Metrics/SidebarWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/SidebarWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/sidebar-width\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n|\u003C$link to=\\\"$:/themes/nico/notebook/metrics/story-width\\\">\u003C\u003Clingo Metrics/StoryWidth>>\u003C/$link>\u003Cbr>//\u003C\u003Clingo Metrics/StoryWidth/Hint>>// |^\u003C$edit-text tiddler=\\\"$:/themes/nico/notebook/metrics/story-width\\\" default=\\\"\\\" tag=\\\"input\\\"/> |\\n\\n\"\n },\n \"$:/themes/nico/notebook/base\": {\n \"title\": \"$:/themes/nico/notebook/base\",\n \"created\": \"20200419141443144\",\n \"modified\": \"20210120224227503\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\rules only filteredtranscludeinline transcludeinline macrodef macrocallinline\\n\\n\\\\define if-sidebar(text)\\n \u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n $text$\\n \u003C/$reveal>\\n\\\\end\\n\\n\\\\define if-reveal-tiddler-controls-on-hover(text)\\n \u003C$reveal state=\\\"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n $text$\\n \u003C/$reveal>\\n\\\\end\\n \\n/* Top and bottom bars */\\n\\n/* Hide the top-right bar */\\n.tc-topbar.tc-topbar-right {\\n display: none;\\n}\\n\\ndiv.tc-sidebar-header {\\n padding: 0;\\n min-height: 0;\\n}\\n\\n.tc-story-river {\\n padding: 6px 0 !important;\\n width: 100% !important;\\n max-width: {{$:/themes/nico/notebook/metrics/story-width}} !important;\\n margin: 0 auto !important;\\n margin-top: 34px !important;\\n}\\n\\ndiv.tc-tiddler-frame {\\n width: 100%;\\n margin: 20px 0;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n box-shadow: 0 5px 20px rgba(0,0,0, 0.12);\\n border-radius: 6px;\\n padding: 42px 60px 60px 60px;\\n}\\n\\nh1.tc-site-title {\\n margin-top: 14px;\\n font-size: 1.5em !important;\\n}\\n\\n.nc-bar {\\n padding: 10px;\\n height: {{$:/themes/nico/notebook/metrics/topbar-height}};\\n background: \u003C\u003Ccolour page-background>>;\\n display: flex;\\n justify-content: space-between;\\n}\\n\\n.nc-topbar-wrapper {\\n position: fixed;\\n top: 0;\\n left: 0;\\n right: 0;\\n /* The z-index needs to be above the z-index used in tiddlers in zoomin view */\\n z-index: 501;\\n}\\n\\n.nc-bar.nc-topbar {\\n top: 0;\\n background: \u003C\u003Ccolour page-background>>ee;\\n max-width: calc({{$:/themes/nico/notebook/metrics/story-width}} + 40px);\\n padding: 10px 20px;\\n margin: 0 auto;\\n}\\n\\n.nc-bar.nc-bottombar {\\n position: fixed;\\n bottom: 0;\\n left: 0;\\n right: 0;\\n /* The z-index needs to be above the z-index used in tiddlers in zoomin view */\\n z-index: 501;\\n}\\n\\n.nc-bar .left svg {\\n fill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.nc-bar input[type=\\\"search\\\"] {\\n width: 200px;\\n padding: .6em 1em;\\n margin-top: -.2em;\\n background: \u003C\u003Ccolour sidebar-button-foreground>>44;\\n color: \u003C\u003Ccolour foreground>>cc;\\n transition: all ease-in .2s;\\n border: 1px solid transparent;\\n outline: 0;\\n}\\n\\n.nc-bar input[type=\\\"search\\\"]:focus {\\n width: 300px;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n border: 1px solid \u003C\u003Ccolour primary>>;\\n box-shadow: 0 0 .2rem 0 \u003C\u003Ccolour primary>>;\\n}\\n\\ninput[type=\\\"search\\\"]::-webkit-search-cancel-button {\\n -webkit-appearance: auto;\\n}\\n\\n.nc-bar .tc-block-dropdown.tc-search-drop-down {\\n margin-left: 0;\\n width: 400px;\\n border: 0;\\n box-shadow: 0 0 6px 0 rgba(0,0,0,.2);\\n border-radius: 6px;\\n padding: 20px 0;\\n}\\n\\n.nc-bar p {\\n margin: 0;\\n}\\n\\n.nc-bar .tc-page-controls {\\n margin-top: 0;\\n}\\n\\n.nc-bar .tc-page-controls button {\\n margin-right: .8em;\\n}\\n\\n.nc-bar .tc-page-controls button .tc-btn-text {\\n font-size: 14px;\\n}\\n\\n.nc-bar .tc-block-dropdown {\\n max-height: 70vh;\\n overflow: auto;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-topbar {\\n display: none;\\n }\\n\\n .tc-story-river {\\n padding: 0 !important;\\n margin-top: 0 !important;\\n margin-bottom: 60px !important;\\n }\\n\\n div.tc-tiddler-frame {\\n margin: 0;\\n box-shadow: none;\\n border-radius: 0;\\n border-top: 0;\\n }\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-bottombar {\\n display: none;\\n }\\n}\\n\\n@media(max-width: 1100px) {\\n .nc-bar input[type=\\\"search\\\"] {\\n width: 200px;\\n }\\n}\\n\\n/* Sidebar */\\n\\n@keyframes sidebar-appear {\\n 0% {\\n left: -{{$:/themes/nico/notebook/metrics/sidebar-width}};\\n }\\n 100% {\\n left: 0;\\n }\\n}\\n\\n\u003C\u003Cif-sidebar \\\"\\\"\\\"\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-sidebar {\\n animation: sidebar-appear .14s;\\n padding-top: 10px;\\n }\\n}\\n\\\"\\\"\\\">>\\n\\n.nc-sidebar {\\n background: \u003C\u003Ccolour tiddler-background>>;\\n border-right: 1px solid \u003C\u003Ccolour tiddler-border>>;\\n width: {{$:/themes/nico/notebook/metrics/sidebar-width}};\\n overflow-y: auto;\\n overflow-x: hidden;\\n z-index: 500;\\n}\\n\\n.nc-sidebar .segment {\\n border-bottom: 1px solid rgba(0,0,0,.1);\\n}\\n\\n.nc-sidebar ol {\\n margin: 0;\\n padding: 0;\\n list-style: none;\\n line-height: 1.8em;\\n}\\n\\n.nc-sidebar ol ol {\\n padding-left: 18px;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .mobile-only {\\n display: none;\\n }\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .desktop-only {\\n display: none;\\n }\\n}\\n\\n.nc-sidebar h1.tc-site-title {\\n margin: 0;\\n}\\n\\n.nc-sidebar p {\\n margin: 6px 0;\\n}\\n\\n.nc-sidebar .tc-site-subtitle {\\n color: \u003C\u003Ccolour site-title-foreground>>;\\n}\\n\\n.nc-sidebar .section .label {\\n padding: 2px 0;\\n color: \u003C\u003Ccolour site-title-foreground>>;\\n fill: \u003C\u003Ccolour site-title-foreground>>;\\n font-weight: bold;\\n line-height: 1.6em;\\n display: block;\\n width: 100%;\\n text-align: left;\\n padding: 8px 15px;\\n border-radius: 0;\\n}\\n\\n.nc-sidebar .section:not(.open) .label:hover {\\n background: rgba(0,0,0,.06);\\n}\\n\\n.nc-sidebar .section.open .label {\\n color: \u003C\u003Ccolour tiddler-background>>;\\n fill: \u003C\u003Ccolour tiddler-background>>;\\n background: \u003C\u003Ccolour primary>>;\\n border-bottom: 1px solid rgba(0,0,0,.1);\\n}\\n\\n.nc-sidebar .section .label .caret {\\n display: inline-block;\\n width: 15px;\\n float: right;\\n}\\n\\n.nc-sidebar .content {\\n padding: 6px 15px;\\n font-size: 1em;\\n}\\n\\n.nc-sidebar .tc-tiddlylink {\\n color: \u003C\u003Ccolour primary>>;\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .nc-sidebar {\\n position: fixed;\\n left: 0;\\n top: 0;\\n bottom: 0;\\n }\\n}\\n\\n\u003C\u003Cif-sidebar \\\"\\\"\\\"\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n @keyframes sidebar-slide {\\n 0% {\\n left: -100vw;\\n }\\n 100% {\\n left: 0;\\n }\\n }\\n .nc-sidebar {\\n overflow: auto;\\n position: fixed;\\n width: 100%;\\n left: 0;\\n top: 0;\\n bottom: 48px;\\n z-index: 3000;\\n animation: sidebar-slide ease-in .2s;\\n animation-fill-mode: forwards;\\n }\\n}\\n\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-page-container {\\n margin-left: {{$:/themes/nico/notebook/metrics/sidebar-width}} !important;\\n }\\n\\n .nc-topbar-wrapper {\\n left: {{$:/themes/nico/notebook/metrics/sidebar-width}};\\n }\\n}\\n\\\"\\\"\\\">>\\n\\n/* Animate the hamburger button */\\n\\n@keyframes menu-bars-1 {\\n 0% {}\\n 100% {\\n transform: rotate(-45deg) translateY(-10px) translateX(-6px);\\n fill: \u003C\u003Ccolour foreground>>;\\n }\\n}\\n\\n@keyframes menu-bars-2 {\\n 0% {}\\n 100% { opacity: 0; }\\n}\\n\\n@keyframes menu-bars-3 {\\n 0% {}\\n 100% {\\n transform: rotate(45deg) translateY(6px) translateX(2px);\\n fill: \u003C\u003Ccolour foreground>>;\\n }\\n}\\n\\n.sidebar-toggle {\\n /* position: fixed; */\\n /* top: 6px; */\\n /* left: 6px; */\\n /* z-index: 600; */\\n /* padding: 4px; */\\n /* border-radius: 8px; */\\n margin-right: 10px;\\n transition: all ease-in-out .2s;\\n fill: \u003C\u003Ccolour sidebar-controls-foreground>>;\\n}\\n\\n.sidebar-toggle:hover,\\n.sidebar-toggle.open {\\n fill: \u003C\u003Ccolour sidebar-controls-foreground-hover>>;\\n}\\n\\n/* @media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) { */\\n/* .sidebar-toggle { */\\n/* top: auto; */\\n/* bottom: 10px; */\\n/* left: 10px; */\\n/* } */\\n/* } */\\n\\n.sidebar-toggle .bars .bar {\\n transform: rotate(0) translateY(0) translateX(0);\\n opacity: 1;\\n transform-origin: 20px 10px;\\n transition: transform 0.4s ease-in-out, opacity 0.2s ease-in-out, fill .4s ease-in-out;\\n}\\n\\n.sidebar-toggle .bars .bar:nth-of-type(3) {\\n transform-origin: 20px 20px;\\n}\\n\\n.sidebar-toggle.open .bars .bar:nth-of-type(1) {\\n animation: menu-bars-1 .6s;\\n animation-fill-mode: forwards;\\n}\\n.sidebar-toggle.open .bars .bar:nth-of-type(2) {\\n animation: menu-bars-2 .6s;\\n animation-fill-mode: forwards;\\n}\\n.sidebar-toggle.open .bars .bar:nth-of-type(3) {\\n animation: menu-bars-3 .6s;\\n animation-fill-mode: forwards;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n div.tc-tiddler-frame {\\n padding: 14px;\\n }\\n}\\n\\n/* Inputs */\\n\\ninput, textarea {\\n transition: border .14s ease-in-out;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n padding: .5em;\\n border-radius: 4px;\\n}\\n\\ninput:focus, textarea:focus {\\n box-shadow: 0 0 0.2rem 0 \u003C\u003Ccolour primary>>;\\n outline: 0;\\n border-color: \u003C\u003Ccolour primary>>;\\n}\\n\\nbutton {\\n border-radius: 1.5em;\\n border: 1px solid #ccc;\\n background: \u003C\u003Ccolour tiddler-background>>;\\n padding: .3em 1em;\\n cursor: pointer;\\n transition: box-shadow ease-in .1s;\\n color: \u003C\u003Ccolor foreground>>;\\n}\\n\\nbutton:focus, button:active {\\n outline: 0 none;\\n}\\n\\nbutton.tc-btn-invisible {\\n border-radius: 0;\\n}\\n\\n.tc-editor-toolbar button,\\n.tc-editor-toolbar button.tc-btn-invisible {\\n border-radius: 3px;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n color: \u003C\u003Ccolour foreground>>;\\n fill: \u003C\u003Ccolour foreground>>;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n}\\n\\n.tc-editor-toolbar button:hover,\\n.tc-editor-toolbar button:active {\\n border-color: \u003C\u003Ccolour primary>>;\\n background: \u003C\u003Ccolour primary>>;\\n color: \u003C\u003Ccolour background>>;\\n fill: \u003C\u003Ccolour background>>;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n transition: border .14s ease-in-out;\\n border: 1px solid \u003C\u003Ccolour tiddler-editor-border>>;\\n background: \u003C\u003Ccolour tiddler-editor-background>>;\\n padding: 4px;\\n border-radius: 4px;\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor:focus,\\n.tc-tiddler-frame textarea.tc-edit-texteditor:focus,\\n.tc-tiddler-frame iframe.tc-edit-texteditor:focus {\\n box-shadow: 0 0 0.2rem 0 \u003C\u003Ccolour primary>>;\\n outline: 0;\\n border-color: \u003C\u003Ccolour primary>>;\\n}\\n\\n.tc-tiddler-controls .tc-btn-text {\\n font-size: 16px;\\n}\\n\\n\u003C\u003Cif-reveal-tiddler-controls-on-hover \\\"\\\"\\\"\\n@media (min-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-tiddler-frame .tc-tiddler-controls svg {\\n opacity: 0;\\n transition: all .2s ease-in;\\n }\\n\\n .tc-tiddler-controls svg.tc-image-close-button,\\n .tc-tiddler-controls .py-toggle-todo-button svg,\\n .tc-tiddler-controls svg.tc-image-done-button,\\n .tc-tiddler-frame .tc-tiddler-controls:hover svg {\\n opacity: 1;\\n }\\n\\n .tc-tiddler-controls .py-toggle-todo-button .done svg {\\n fill: #2da562;\\n }\\n}\\n\\\"\\\"\\\">>\\n\\nbutton.tc-tag-label, span.tc-tag-label {\\n padding: 0.3em 1em !important;\\n}\\n\\n/* Fonts */\\n\\nhtml, body {\\n font-family: {{$:/themes/nico/notebook/settings/fontfamily}};\\n}\\n\\n.tc-tiddler-frame input.tc-edit-texteditor,\\n.tc-tiddler-frame textarea.tc-edit-texteditor,\\n.tc-tiddler-frame iframe.tc-edit-texteditor {\\n font-family: {{$:/themes/nico/notebook/settings/editorfontfamily}};\\n}\\n\\npre, code {\\n font-family: {{$:/themes/nico/notebook/settings/codefontfamily}};\\n}\\n\\n.tc-titlebar, .tc-site-title {\\n font-size: 28px !important;\\n line-height: 34px !important;\\n font-weight: 600 !important;\\n letter-spacing: -0.5px !important;\\n}\\n\\nh1, h2, h3, h4, h5, h6 {\\n font-weight: 600;\\n}\\n\\n.tc-tiddler-body h1,\\n.tc-tiddler-body h2,\\n.tc-tiddler-preview-preview h1,\\n.tc-tiddler-preview-preview h2 {\\n font-weight: bold;\\n}\\n\\ndiv.tc-tiddler-frame .tc-tiddler-body {\\n font-size: {{$:/themes/nico/notebook/metrics/bodyfontsize}};\\n line-height: {{$:/themes/nico/notebook/metrics/bodylineheight}};\\n}\\n\\n/* Tabs */\\n\\ndiv.tc-tab-buttons {\\n margin-bottom: -4px;\\n}\\n\\ndiv.tc-tab-buttons button {\\n font-weight: bold;\\n font-size: 1.2em;\\n line-height: 1em;\\n padding: .6em .8em .4em .8em;\\n border: 0;\\n border-radius: 0;\\n background: transparent;\\n cursor: pointer;\\n transition: background ease-in .2s;\\n}\\n\\ndiv.tc-tab-buttons button:hover {\\n background: rgba(0,0,0,.03);\\n}\\n\\ndiv.tc-tab-buttons button.tc-tab-selected {\\n border: 0;\\n background: transparent;\\n border-bottom: 4px solid \u003C\u003Ccolour primary>>;\\n}\\n\\n/* Dropdowns */\\n\\n@keyframes pop {\\n 0% {\\n transform: scale(0.8);\\n opacity: 0;\\n }\\n\\n 80% {\\n transform: scale(1.03);\\n opacity: 1;\\n }\\n\\n 100% {\\n transform: scale(1);\\n opacity: 1;\\n }\\n}\\n\\n.tc-drop-down {\\n box-shadow: 0 0 10px rgba(0,0,0,.2);\\n border-radius: 6px;\\n padding: 10px 0 !important;\\n animation: pop .15s ease-in forwards;\\n}\\n\\n.tc-drop-down a, .tc-drop-down button {\\n padding: 3px 15px !important;\\n}\\n\\n.tc-search-results {\\n line-height: 2em;\\n}\\n\\n.tc-search-results em {\\n font-weight: bold;\\n font-style: normal;\\n}\\n\\n/* Draft list */\\n\\n.tc-drafts-list {\\n font-size: .9em;\\n left: auto;\\n right: 0;\\n}\\n\\n.tc-drafts-list a {\\n padding: 6px 12px;\\n font-weight: bold;\\n border-top-left-radius: 6px;\\n border-top-right-radius: 6px;\\n display: inline-block;\\n}\\n\\n.nc-refs {\\n color: #888;\\n font-size: .9em;\\n}\\n\\n.nc-refs h4 {\\n margin-bottom: 4px;\\n}\\n\\n.nc-post-created {\\n color: #acacac;\\n font-size: .8em;\\n}\\n\"\n },\n \"$:/themes/nico/notebook/changelog\": {\n \"title\": \"$:/themes/nico/notebook/changelog\",\n \"caption\": \"ChangeLog\",\n \"created\": \"20201217180707912\",\n \"modified\": \"20210202214001915\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"! 1.4.1\\n\\n!! Fixes\\n\\n* Fix the transclusion mode of sidebar sections\\n* Fix section title rendering for tiddlers without a caption field\\n* Fix the colour of links in the sidebar when using Notebook palettes with Vanilla\\n\\n! 1.4.0\\n\\n!! Features\\n\\n* New redesigned topbar layout\\n* Add a configuration setting for the story width\\n* Add support for keyboard navigation in the search dropdown\\n\\n! 1.3.6\\n\\n!! Improvements\\n\\n* Improve the style of tabs\\n* New animation for drop-downs\\n* Use a lighter page background colour in the beige palette\\n\\n!! Fixes\\n\\n* Fix the default ctrl+shift+F shortcut for focusing the search input\\n\\n! 1.3.5\\n\\n!! Features\\n\\n* Add an option to reveal tiddler controls on mouseover\\n\\n! 1.3.4\\n\\n!! Improvements\\n\\n* Add a keyboard shortcut (alt+shift+s) to toggle Notebook sidebar\\n* Add missing colours to tiddler editor fields in the dark palette\\n\\n!! Fixes\\n\\n* Fix the size of toolbar button labels when the $:/config/Toolbar/Text is set to yes\\n\\n! 1.3.3\\n\\n!! Improvements\\n\\n* Make the sidebar more generic by using the default sidebar sections\\n\\n! 1.3.2\\n\\n!! Improvements\\n\\n* Add colours for messages in the dark palette\\n* Add colours for notification in the dark palette\\n* Set colours for messages in the beige palette\\n\\n! 1.3.1\\n\\n!! Features\\n\\n* New font family settings distinct from the Vanilla theme\\n\\n!! Improvements\\n\\n* Use a slightly lighter colour as the search input background\\n* Improve contrast of sidebar buttons in the dark palette\\n\\n!! Fixes\\n\\n* Fix tiddler control button colours in all three palettes\\n* Fix tab colours in palette-dark\\n\\n! 1.3.0\\n\\n!! Improvements\\n\\n* New dark colour palette\\n* Use a darker color for tiddler subtitles\\n* Add back the WebKit search cancel button in search inputs\\n\\n!! Fixes\\n\\n* Fix the z-index of the topbar for the zoomin story view\\n* Fix the font weight of tiddler titles in edit mode\\n\\n! 1.2.0\\n\\n!! Improvements\\n\\n* Better support for dark colour palettes\\n\\n!! Fixes\\n\\n* Fix rendering of overflowing/wrapping text in the sidebar\\n\\n! 1.1.0\\n\\n!! Features\\n\\n* New theme tweaks tab dedicated to Notebook in the control panel\\n* Inputs in the edit template are now styled consistently with other inputs\\n\\n!! Fixes\\n\\n* Fixes the position of sticky tiddler titles when the option is turned on\\n\"\n },\n \"$:/config/ShortcutInfo/notebook-focus-search\": {\n \"title\": \"$:/config/ShortcutInfo/notebook-focus-search\",\n \"text\": \"Focus on the topbar search field\"\n },\n \"$:/config/shortcuts/notebook-focus-search\": {\n \"title\": \"$:/config/shortcuts/notebook-focus-search\",\n \"text\": \"ctrl+shift+F\"\n },\n \"$:/config/Search/AutoFocus\": {\n \"title\": \"$:/config/Search/AutoFocus\",\n \"text\": \"false\"\n },\n \"$:/config/shortcuts/sidebar-search\": {\n \"title\": \"$:/config/shortcuts/sidebar-search\",\n \"text\": \"\"\n },\n \"$:/themes/nico/notebook/images/bars\": {\n \"title\": \"$:/themes/nico/notebook/images/bars\",\n \"created\": \"20200428212322206\",\n \"modified\": \"20201210210231235\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg class=\\\"bars\\\" height=\\\"21pt\\\" viewBox=\\\"0 0 42 42\\\" enable-background=\\\"new 0 0 32 22.5\\\" version=\\\"1.1\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n \u003Cg class=\\\"svg-menu-toggle\\\" sketch:type=\\\"MSLayerGroup\\\">\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"28\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"19\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003Crect class=\\\"bar\\\" x=\\\"8\\\" y=\\\"10\\\" width=\\\"26\\\" height=\\\"4\\\">\u003C/rect>\\n \u003C/g>\\n\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/caret-down\": {\n \"title\": \"$:/themes/nico/notebook/images/caret-down\",\n \"created\": \"20200429194348688\",\n \"modified\": \"20201210210230919\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"6pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 320 512\\\">\u003Cpath d=\\\"M31.3 192h257.3c17.8 0 26.7 21.5 14.1 34.1L174.1 354.8c-7.8 7.8-20.5 7.8-28.3 0L17.2 226.1C4.6 213.5 13.5 192 31.3 192z\\\"/>\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/caret-right\": {\n \"title\": \"$:/themes/nico/notebook/images/caret-right\",\n \"created\": \"20200429194305719\",\n \"modified\": \"20201210210230909\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"4pt\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\" viewBox=\\\"0 0 192 512\\\">\u003Cpath d=\\\"M0 384.662V127.338c0-17.818 21.543-26.741 34.142-14.142l128.662 128.662c7.81 7.81 7.81 20.474 0 28.284L34.142 398.804C21.543 411.404 0 402.48 0 384.662z\\\"/>\u003C/svg>\\n\"\n },\n \"$:/themes/nico/notebook/images/color-switch\": {\n \"title\": \"$:/themes/nico/notebook/images/color-switch\",\n \"created\": \"20201210170859810\",\n \"creator\": \"nico\",\n \"modified\": \"20201210205606403\",\n \"modifier\": \"nico\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Csvg width=\\\"20px\\\" height=\\\"20px\\\" viewBox=\\\"0 0 16 16\\\" class=\\\"bi bi-circle-half\\\" fill=\\\"currentColor\\\" xmlns=\\\"http://www.w3.org/2000/svg\\\">\\n \u003Cpath fill-rule=\\\"evenodd\\\" d=\\\"M8 15V1a7 7 0 1 1 0 14zm0 1A8 8 0 1 1 8 0a8 8 0 0 1 0 16z\\\"/>\\n\u003C/svg\\n\"\n },\n \"$:/themes/nico/notebook/metrics/bodyfontsize\": {\n \"title\": \"$:/themes/nico/notebook/metrics/bodyfontsize\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"15px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/bodylineheight\": {\n \"title\": \"$:/themes/nico/notebook/metrics/bodylineheight\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"22px\"\n },\n \"$:/themes/nico/notebook/metrics/sidebar-width\": {\n \"title\": \"$:/themes/nico/notebook/metrics/sidebar-width\",\n \"created\": \"20200429144554294\",\n \"modified\": \"20201210210231246\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"350px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/story-width\": {\n \"title\": \"$:/themes/nico/notebook/metrics/story-width\",\n \"created\": \"20210123210054185\",\n \"modified\": \"20210123211911688\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"800px\\n\"\n },\n \"$:/themes/nico/notebook/metrics/topbar-height\": {\n \"title\": \"$:/themes/nico/notebook/metrics/topbar-height\",\n \"created\": \"20200428203454207\",\n \"modified\": \"20201210205606363\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"52px\\n\"\n },\n \"$:/themes/nico/notebook/options/stickytitles\": {\n \"title\": \"$:/themes/nico/notebook/options/stickytitles\",\n \"text\": \"no\"\n },\n \"$:/themes/nico/notebook/options/codewrapping\": {\n \"title\": \"$:/themes/nico/notebook/options/codewrapping\",\n \"text\": \"pre-wrap\"\n },\n \"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\": {\n \"title\": \"$:/themes/nico/notebook/options/reveal-tiddler-controls-on-hover\",\n \"text\": \"no\"\n },\n \"$:/core/ui/PageTemplate/sidebar\": {\n \"title\": \"$:/core/ui/PageTemplate/sidebar\",\n \"created\": \"20200430072116835\",\n \"modified\": \"20201217174129501\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\nOverwritten by $:/themes/nico/notebook so that the default sidebar does not get rendered.\\n\"\n },\n \"$:/themes/tiddlywiki/vanilla/themetweaks\": {\n \"title\": \"$:/themes/tiddlywiki/vanilla/themetweaks\",\n \"caption\": \"{{$:/language/ThemeTweaks/ThemeTweaks}}\",\n \"created\": \"20201217163834291\",\n \"modified\": \"20201217163914434\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"Overwritten by $:/themes/nico/notebook so that the Vanilla theme tweaks do not appear in the control panel. \"\n },\n \"$:/themes/nico/notebook/palettes/palette-beige\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-beige\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #66cccc\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #ddd\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #3F3B3B\\nmessage-background: #e6f5e8\\nmessage-border: #2b5532\\nmessage-foreground: #2b5532\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f5f5ee\\npre-background: #f6f6f6\\npre-border: #cccccc\\nprimary: #7f4bca\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #a6a69c\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: #353748\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: #888888\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffeedd\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #dbdbc7;\\ntiddler-controls-foreground-hover: #888888;\\ntiddler-controls-foreground-selected: #888888;\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(0,0,0,.2)\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: #333\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A beige colour palette for Notebook\",\n \"name\": \"Notebook Beige\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/palettes/palette-dark\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-dark\",\n \"text\": \"alert-background: #643b43\\nalert-border: #3f181f\\nalert-highlight: #881122\\nalert-muted-foreground: #bc8b94\\nbackground: #383e49\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-border:\\nbutton-foreground:\\ncode-background: #2c323b\\ncode-border: #111\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #98be65\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #111\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #61afef\\nexternal-link-foreground: #c678dd\\nforeground: #c8ced8\\nmessage-background: #2c323e\\nmessage-border: #111\\nmessage-foreground: #d5e2f1\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #3a5e39\\nnotification-border: #192c19\\npage-background: #262b33\\npre-background: \u003C\u003Ccolour page-background>>\\npre-border: \u003C\u003Ccolour tiddler-border>>\\nprimary: #bf93ff\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #5e646f\\nsidebar-controls-foreground-hover: #cad2e5\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #cad2e5\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: \u003C\u003Ccolour tab-background-selected>>\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: \u003C\u003Ccolour foreground>>\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: \u003C\u003Ccolour background>>\\ntab-background: \u003C\u003Ccolour page-background>>\\ntab-border-selected: \u003C\u003Ccolour foreground>>\\ntab-border: #cad2e5\\ntab-divider: #cad2e5\\ntab-foreground-selected: #ecf2ff\\ntab-foreground: #cad2e5\\ntable-border: #aaaaaa\\ntable-footer-background: #a8a8a8\\ntable-header-background: #262b33\\ntag-background: #fcb671\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #111\\ntiddler-controls-foreground-hover: #cad2e5\\ntiddler-controls-foreground-selected: #cad2e5\\ntiddler-controls-foreground: #5e646f\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(255, 255, 255, 0.3)\\ntiddler-editor-fields-even: \u003C\u003Ccolour background>>\\ntiddler-editor-fields-odd: #2c323b\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: \u003C\u003Ccolour foreground>>\\ntoolbar-cancel-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-done-button:\\ntoolbar-edit-button:\\ntoolbar-info-button:\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A dark colour palette for Notebook\",\n \"name\": \"Notebook Dark\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/palettes/palette-grey\": {\n \"title\": \"$:/themes/nico/notebook/palettes/palette-grey\",\n \"text\": \"alert-background: #ffe476\\nalert-border: #b99e2f\\nalert-highlight: #881122\\nalert-muted-foreground: #b99e2f\\nbackground: #ffffff\\nblockquote-bar: \u003C\u003Ccolour muted-foreground>>\\nbutton-background:\\nbutton-foreground:\\nbutton-border:\\ncode-background: #f7f7f9\\ncode-border: #e1e1e8\\ncode-foreground: #dd1144\\ndirty-indicator: #c63636\\ndownload-background: #66cccc\\ndownload-foreground: \u003C\u003Ccolour background>>\\ndragger-background: \u003C\u003Ccolour foreground>>\\ndragger-foreground: \u003C\u003Ccolour background>>\\ndropdown-background: \u003C\u003Ccolour background>>\\ndropdown-border: #ddd\\ndropdown-tab-background-selected: #fff\\ndropdown-tab-background: #ececec\\ndropzone-background: #da8548\\nexternal-link-background-hover: inherit\\nexternal-link-background-visited: inherit\\nexternal-link-background: inherit\\nexternal-link-foreground-hover: inherit\\nexternal-link-foreground-visited: #0000aa\\nexternal-link-foreground: #0000ee\\nforeground: #283c46\\nmessage-background: #ecf2ff\\nmessage-border: #cfd6e6\\nmessage-foreground: #547599\\nmodal-backdrop: \u003C\u003Ccolour foreground>>\\nmodal-background: \u003C\u003Ccolour background>>\\nmodal-border: #999999\\nmodal-footer-background: #f5f5f5\\nmodal-footer-border: #dddddd\\nmodal-header-border: #eeeeee\\nmuted-foreground: #999999\\nnotification-background: #ffffdd\\nnotification-border: #999999\\npage-background: #f4f4f4\\npre-background: #f6f6f6\\npre-border: #cccccc\\nprimary: #127edd\\nselect-tag-background:\\nselect-tag-foreground:\\nsidebar-button-foreground: #a6a69c\\nsidebar-controls-foreground-hover: #000000\\nsidebar-controls-foreground: \u003C\u003Ccolour sidebar-button-foreground>>\\nsidebar-foreground-shadow: rgba(255,255,255, 0.8)\\nsidebar-foreground: #acacac\\nsidebar-muted-foreground-hover: #444444\\nsidebar-muted-foreground: #c0c0c0\\nsidebar-tab-background-selected: #ffffff\\nsidebar-tab-background: \u003C\u003Ccolour tab-background>>\\nsidebar-tab-border-selected: \u003C\u003Ccolour tab-border-selected>>\\nsidebar-tab-border: \u003C\u003Ccolour tab-border>>\\nsidebar-tab-divider: \u003C\u003Ccolour tab-divider>>\\nsidebar-tab-foreground-selected: \u003C\u003Ccolour tab-foreground-selected>>\\nsidebar-tab-foreground: \u003C\u003Ccolour tab-foreground>>\\nsidebar-tiddler-link-foreground-hover: \u003C\u003Ccolour primary>>\\nsidebar-tiddler-link-foreground: \u003C\u003Ccolour tab-foreground>>\\nsite-title-foreground: #353748\\nstatic-alert-foreground: #aaaaaa\\ntab-background-selected: #ffffff\\ntab-background: #eeeeee\\ntab-border-selected: #cccccc\\ntab-border: #cccccc\\ntab-divider: #d8d8d8\\ntab-foreground-selected: \u003C\u003Ccolour foreground>>\\ntab-foreground: #888888\\ntable-border: #dddddd\\ntable-footer-background: #a8a8a8\\ntable-header-background: #f0f0f0\\ntag-background: #ffeedd\\ntag-foreground: #000\\ntiddler-background: \u003C\u003Ccolour background>>\\ntiddler-border: #ddd\\ntiddler-controls-foreground-hover: #888888;\\ntiddler-controls-foreground-selected: #888888;\\ntiddler-controls-foreground: #cccccc\\ntiddler-editor-background: \u003C\u003Ccolour background>>\\ntiddler-editor-border-image: #ffffff\\ntiddler-editor-border: rgba(0,0,0,.2)\\ntiddler-editor-fields-even: #e0e8e0\\ntiddler-editor-fields-odd: #f0f4f0\\ntiddler-info-background: #f8f8f8\\ntiddler-info-border: #dddddd\\ntiddler-info-tab-background: #f8f8f8\\ntiddler-link-background: \u003C\u003Ccolour background>>\\ntiddler-link-foreground: \u003C\u003Ccolour primary>>\\ntiddler-subtitle-foreground: #aaaaaa\\ntiddler-title-foreground: #333\\ntoolbar-new-button:\\ntoolbar-options-button:\\ntoolbar-save-button:\\ntoolbar-info-button:\\ntoolbar-edit-button:\\ntoolbar-close-button:\\ntoolbar-delete-button:\\ntoolbar-cancel-button:\\ntoolbar-done-button:\\nuntagged-background: #999999\\nvery-muted-foreground: #888888\\n\",\n \"type\": \"application/x-tiddler-dictionary\",\n \"description\": \"A grey color palette for Notebook\",\n \"name\": \"Notebook Grey\",\n \"tags\": \"$:/tags/Palette $:/tags/notebook/Palette\"\n },\n \"$:/themes/nico/notebook/settings/codefontfamily\": {\n \"title\": \"$:/themes/nico/notebook/settings/codefontfamily\",\n \"created\": \"20210101213404232\",\n \"modified\": \"20210101214210227\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\"Fira Mono\\\",\\\"Liberation Mono\\\",Menlo,Courier,monospace\\n\"\n },\n \"$:/themes/nico/notebook/settings/fontfamily\": {\n \"title\": \"$:/themes/nico/notebook/settings/fontfamily\",\n \"created\": \"20210101213404232\",\n \"modified\": \"20210101213411800\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\"Segoe UI\\\",Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\",\\\"Segoe UI Symbol\\\"\\n\"\n },\n \"$:/themes/nico/notebook/shortcuts/notebook-focus-search\": {\n \"title\": \"$:/themes/nico/notebook/shortcuts/notebook-focus-search\",\n \"created\": \"20201210122048919\",\n \"key\": \"((notebook-focus-search))\",\n \"modified\": \"20210115130024907\",\n \"tags\": \"$:/tags/KeyboardShortcut\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$action-sendmessage $message=\\\"tm-focus-selector\\\" $param=\\\".nc-topbar input\\\"/>\\n\"\n },\n \"$:/themes/nico/notebook/shortcuts/toggle-sidebar\": {\n \"title\": \"$:/themes/nico/notebook/shortcuts/toggle-sidebar\",\n \"created\": \"20210115130000707\",\n \"key\": \"((toggle-sidebar))\",\n \"modified\": \"20210115130021883\",\n \"tags\": \"$:/tags/KeyboardShortcut\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$list\\n filter=\\\"[[$:/state/notebook-sidebar]is[missing]] [{$:/state/notebook-sidebar}removeprefix[yes]]\\\"\\n emptyMessage=\\\"\\\"\\\"\u003C$action-setfield $tiddler=\\\"$:/state/notebook-sidebar\\\" text=\\\"yes\\\"/>\\\"\\\"\\\"\\n>\\n \u003C$action-setfield $tiddler=\\\"$:/state/notebook-sidebar\\\" text=\\\"no\\\"/>\\n\u003C/$list>\\n\"\n },\n \"$:/themes/nico/notebook/stickytitles\": {\n \"title\": \"$:/themes/nico/notebook/stickytitles\",\n \"created\": \"20201217172915960\",\n \"modified\": \"20201217180034682\",\n \"tags\": \"$:/tags/Stylesheet\",\n \"text\": \"\u003C$reveal state=\\\"$:/themes/nico/notebook/options/stickytitles\\\" type=\\\"match\\\" text=\\\"yes\\\">\\n\\n.tc-tiddler-title {\\n position: -webkit-sticky;\\n position: -moz-sticky;\\n position: -o-sticky;\\n position: -ms-sticky;\\n position: sticky;\\n top: {{$:/themes/nico/notebook/metrics/topbar-height}};\\n background: \u003C\u003Ccolour tiddler-background>>;\\n z-index: 500;\\n}\\n\\n@media (max-width: {{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}) {\\n .tc-tiddler-title {\\n top: 0;\\n }\\n}\\n\\n\u003C$list filter=\\\"[range[100]]\\\">\\n`.tc-story-river .tc-tiddler-frame:nth-child(100n+`\u003C$text text=\u003C\u003CcurrentTiddler>>/>`) {\\nz-index: `\u003C$text text={{{ [[200]subtract\u003CcurrentTiddler>] }}}/>`;\\n}\\n`\\n\u003C/$list>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/tags/Sidebar\": {\n \"title\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"created\": \"20200429164516951\",\n \"list\": \"$:/themes/nico/notebook/ui/Buttons/menu $:/themes/nico/notebook/ui/Sidebar/Headings $:/themes/nico/notebook/ui/Sidebar/Search $:/themes/nico/notebook/Sidebar/Sections\",\n \"modified\": \"20201210205606504\",\n \"type\": \"text/vnd.tiddlywiki\"\n },\n \"$:/themes/nico/notebook/tags/SidebarSection\": {\n \"title\": \"$:/themes/nico/notebook/tags/SidebarSection\",\n \"created\": \"20200429201017275\",\n \"list\": \"$:/themes/nico/notebook/ui/Sidebar/Open $:/themes/nico/notebook/ui/Sidebar/Recent $:/themes/nico/notebook/ui/Sidebar/Tools $:/themes/nico/notebook/ui/Sidebar/More\",\n \"modified\": \"20201210215658901\",\n \"type\": \"text/vnd.tiddlywiki\"\n },\n \"$:/themes/nico/notebook/ui/Bottombar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Bottombar\",\n \"created\": \"20200429113453340\",\n \"modified\": \"20201210210230886\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-bottombar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n \u003Cdiv class=\\\"nc-bar nc-bottombar\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/NotebookTopbar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"block\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003Cdiv class=\\\"left\\\">\\n {{$:/themes/nico/notebook/ui/Buttons/menu}}\\n \u003C/div>\\n \u003Cdiv class=\\\"right\\\">\\n {{$:/core/ui/SideBarSegments/page-controls}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\\n\"\n },\n \"$:/themes/nico/notebook/ui/Buttons/SwitchPalette\": {\n \"title\": \"$:/themes/nico/notebook/ui/Buttons/SwitchPalette\",\n \"created\": \"20201210171047824\",\n \"description\": \"Toggle between grey/beige colour palette\",\n \"modified\": \"20210118213335643\",\n \"tags\": \"$:/tags/PageControls\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cspan class=\\\"desktop-only\\\">\\n \u003C$vars\\n palettes=\\\"[all[tiddlers+shadows]tag[$:/tags/notebook/Palette]]\\\"\\n popupTiddler=\u003C\u003Cqualify \\\"$:/state/notebook/palette-dropdown\\\">>\\n >\\n \u003C$button\\n popup=\u003C\u003CpopupTiddler>>\\n tooltip=\\\"Switch colours\\\"\\n aria-label=\\\"Switch colours\\\"\\n class=\u003C\u003Ctv-config-toolbar-class>>\\n >\\n \u003C$list filter=\\\"[\u003Ctv-config-toolbar-icons>match[yes]]\\\">\\n\\t{{$:/themes/nico/notebook/images/color-switch}}\\n \u003C/$list>\\n\\n \u003C$list filter=\\\"[\u003Ctv-config-toolbar-text>match[yes]]\\\">\\n\\t\u003Cspan class=\\\"tc-btn-text\\\">Switch colours\u003C/span>\\n \u003C/$list>\\n\\n \u003C$reveal state=\u003C\u003CpopupTiddler>> type=\\\"popup\\\" position=\\\"belowleft\\\" class=\\\"tc-drop-down\\\">\\n\\t\u003C$list filter=\u003C\u003Cpalettes>>>\\n\\t \u003C$button class=\\\"tc-btn-invisible\\\">\\n\\t {{!!name}}\\n\\t \u003C$action-setfield $tiddler=\\\"$:/palette\\\" text={{!!title}}/>\\n\\t \u003C/$button>\\n\\t\u003C/$list>\\n \u003C/$reveal>\\n\\n \u003C/$button>\\n \u003C/$vars>\\n\u003C/span>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Buttons/menu\": {\n \"title\": \"$:/themes/nico/notebook/ui/Buttons/menu\",\n \"created\": \"20200429115248943\",\n \"modified\": \"20210124211756417\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" retain=\\\"yes\\\" animate=\\\"no\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar\\\" setTo=\\\"no\\\" tooltip=\\\"Toggle menu\\\" class=\\\"tc-btn-invisible sidebar-toggle open\\\">\\n {{$:/themes/nico/notebook/images/bars}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\\n\u003C$reveal type=\\\"nomatch\\\" state=\\\"$:/state/notebook-sidebar\\\" text=\\\"yes\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar\\\" setTo=\\\"yes\\\" tooltip=\\\"Toggle menu\\\" class=\\\"tc-btn-invisible sidebar-toggle\\\">\\n {{$:/themes/nico/notebook/images/bars}}\\n \u003C/$button>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Search\": {\n \"title\": \"$:/themes/nico/notebook/ui/Search\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210126170723413\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define advanced-search-actions()\\n\u003C$action-setfield $tiddler=\\\"$:/temp/advancedsearch/input\\\" text={{$:/temp/notebook-search}}/>\\n\u003C$action-setfield $tiddler=\\\"$:/temp/advancedsearch/refresh\\\" text=\\\"yes\\\"/>\\n\u003C$action-navigate $to=\\\"$:/AdvancedSearch\\\"/>\\n\\\\end\\n\\n\\\\define input-accept-actions()\\n\u003C$list filter=\\\"[\u003C__tiddler__>get[text]!is[missing]] ~[\u003C__tiddler__>get[text]is[shadow]]\\\">\\n \u003C$action-navigate $to={{{ [\u003C__tiddler__>get[text]] }}}/>\\n \u003C$action-deletetiddler $filter=\\\"[[$:/temp/search]] [\u003CsearchTiddler>] [\u003CsearchListState>]\\\"/>\\n\u003C/$list>\\n\\\\end\\n\\n\\\\define cancel-search-actions()\\n\u003C$list filter=\\\"[\u003CsearchTiddler>get[text]!match{$:/temp/search}]\\\" emptyMessage=\\\"\\\"\\\"\u003C$action-deletetiddler $filter=\\\"[[$:/temp/search]] [\u003CsearchTiddler>] [\u003CsearchListState>]\\\"/>\\\"\\\"\\\">\\n \u003C$action-setfield $tiddler=\\\"$:/temp/search\\\" text={{{ [\u003CsearchTiddler>get[text]] }}}/>\\n \u003C$action-setfield $tiddler=\\\"$:/temp/search/refresh\\\" text=\\\"yes\\\"/>\u003C/$list>\\n\\\\end\\n\\n\u003C$vars editTiddler=\\\"$:/temp/search\\\"\\n searchTiddler=\\\"$:/temp/search/input\\\"\\n searchListState=\u003C\u003Cqualify \\\"$:/state/search-list/selected-item\\\">>>\\n \u003C$macrocall $name=\\\"keyboard-driven-input\\\"\\n\\t tiddler=\u003C\u003CeditTiddler>>\\n\\t storeTitle=\u003C\u003CsearchTiddler>>\\n\\t selectionStateTitle=\u003C\u003CsearchListState>>\\n\\t refreshTitle=\\\"$:/temp/search/refresh\\\"\\n\\t type=\\\"search\\\"\\n\\t tag=\\\"input\\\"\\n\\t focus={{$:/config/Search/AutoFocus}}\\n\\t focusPopup=\\\"$:/state/popup/notebook-search\\\"\\n\\t class=\\\"tc-popup-handle\\\"\\n\\t filterMinLength={{$:/config/Search/MinLength}}\\n\\t placeholder=\\\"Search...\\\"\\n\\t inputAcceptActions=\u003C\u003Cinput-accept-actions>>\\n\\t inputCancelActions=\u003C\u003Ccancel-search-actions>>\\n\\t cancelPopups=\\\"yes\\\"\\n\\t configTiddlerFilter=\\\"[[$:/state/search/currentTab]!is[missing]get[text]] ~[{$:/config/SearchResults/Default}]\\\"\\n\\t />\\n \u003C$button\\n tooltip={{$:/language/Buttons/AdvancedSearch/Hint}}\\n aria-label={{$:/language/Buttons/AdvancedSearch/Caption}}\\n class=\\\"tc-btn-invisible tc-page-controls\\\"\\n >\\n {{$:/core/images/advanced-search-button}}\\n \u003C\u003Cadvanced-search-actions>>\\n \u003C/$button>\\n \u003C$reveal tag=\\\"div\\\" class=\\\"tc-block-dropdown-wrapper\\\" state=\\\"$:/state/popup/notebook-search\\\" type=\\\"nomatch\\\" text=\\\"\\\" default=\\\"\\\">\\n \u003C$list filter=\\\"[\u003CsearchTiddler>get[text]minlength{$:/config/Search/MinLength}limit[1]]\\\" emptyMessage=\\\"\\\" variable=\\\"listItem\\\">\\n \u003Cdiv class=\\\"tc-block-dropdown tc-search-drop-down\\\">\\n \u003C$tiddler tiddler=\u003C\u003CconfigTiddler>>>\\n {{$:/themes/nico/notebook/ui/Sidebar/SearchResults}}\\n \u003C/$tiddler>\\n \u003C/div>\\n \u003C/$list>\\n \u003C/$reveal>\\n\u003C/$vars>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Headings\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Headings\",\n \"created\": \"20200429160014174\",\n \"modified\": \"20201210210231267\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cdiv class=\\\"segment\\\">\\n \u003Cdiv class=\\\"content\\\">\\n \u003Ch1 class=\\\"tc-site-title\\\">\\n {{$:/SiteTitle}}\\n \u003C/h1>\\n \u003Cdiv class=\\\"tc-site-subtitle\\\">\\n {{$:/SiteSubtitle}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Search\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Search\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210124220152702\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003Cdiv class=\\\"mobile-only\\\">\\n \u003Cdiv class=\\\"segment\\\">\\n \u003Cdiv class=\\\"content search\\\">\\n {{$:/themes/nico/notebook/ui/Search}}\\n \u003C/div>\\n \u003C/div>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/SearchResults\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/SearchResults\",\n \"created\": \"20200429191943257\",\n \"modified\": \"20210126164631418\",\n \"tags\": \"\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define searchResultList()\\n \u003Csmall>{{$:/language/Search/Matches/Title}}\u003C/small>\\n\\n \u003C$list filter=\\\"[!is[system]search:title{$(searchTiddler)$}sort[title]limit[250]]\\\">\\n \u003Cspan class={{{[\u003CcurrentTiddler>addsuffix[-primaryList]] -[\u003CsearchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\\n \u003C$transclude tiddler=\\\"$:/core/ui/ListItemTemplate\\\"/>\\n \u003C/span>\\n \u003C/$list>\\n\\n \u003Csmall>{{$:/language/Search/Matches/All}}\u003C/small>\\n\\n \u003C$list filter=\\\"[!is[system]search{$(searchTiddler)$}sort[title]limit[250]]\\\">\\n \u003Cspan class={{{[\u003CcurrentTiddler>addsuffix[-secondaryList]] -[\u003CsearchListState>get[text]] +[then[]else[tc-list-item-selected]] }}}>\\n \u003C$transclude tiddler=\\\"$:/core/ui/ListItemTemplate\\\"/>\\n \u003C/span>\\n \u003C/$list>\\n\\\\end\\n\\n\u003Cdiv class=\\\"tc-search-results\\\">\\n \u003C\u003CsearchResultList>>\\n\u003C/div>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/SectionTemplate\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/SectionTemplate\",\n \"created\": \"20200429161226897\",\n \"modified\": \"20210202213859460\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\define sidebarHeading()\\n\u003C$vars tv-wikilinks=\\\"no\\\">\\n \u003C$transclude field=\\\"caption\\\">\\n \u003C$view field=\\\"title\\\"/>\\n \u003C/$transclude>\\n\u003C/$vars>\\n\\\\end\\n\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar-section\\\" type=\\\"match\\\" text=\u003C\u003CcurrentTiddler>> default=\\\"no\\\" animate=\\\"no\\\">\\n \u003Cdiv class=\\\"segment section open\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar-section\\\" setTo=\\\"\\\" class=\\\"tc-btn-invisible label\\\">\\n \u003C\u003CsidebarHeading>>\\n \u003Cspan class=\\\"caret\\\">{{$:/themes/nico/notebook/images/caret-down}}\u003C/span>\\n \u003C/$button>\\n \u003Cdiv class=\\\"content\\\">\\n \u003C$transclude $tiddler=\u003C\u003CcurrentTiddler>> mode=\\\"block\\\"/>\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar-section\\\" type=\\\"nomatch\\\" text=\u003C\u003CcurrentTiddler>> default=\\\"yes\\\" animate=\\\"no\\\">\\n \u003Cdiv class=\\\"segment section\\\">\\n \u003C$button set=\\\"$:/state/notebook-sidebar-section\\\" setTo=\u003C\u003CcurrentTiddler>> class=\\\"tc-btn-invisible label\\\">\\n \u003C\u003CsidebarHeading>>\\n \u003Cspan class=\\\"caret\\\">{{$:/themes/nico/notebook/images/caret-right}}\u003C/span>\\n \u003C/$button>\\n \u003C/div>\\n\u003C/$reveal>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar/Sections\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar/Sections\",\n \"created\": \"20200429163239707\",\n \"modified\": \"20210112213620486\",\n \"tags\": \"$:/themes/nico/notebook/tags/Sidebar\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$list filter=\\\"[all[shadows+tiddlers]!has[draft.of]tag[$:/tags/SideBar]]\\\">\\n {{||$:/themes/nico/notebook/ui/Sidebar/SectionTemplate}}\\n\u003C/$list>\\n\"\n },\n \"$:/themes/nico/notebook/ui/Sidebar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Sidebar\",\n \"created\": \"20200428201218885\",\n \"modified\": \"20210112213605486\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\\\\whitespace trim\\n\\\\define config-title()\\n$:/config/SideBarSegments/Visibility/$(listItem)$\\n\\\\end\\n\\n\u003C$reveal state=\\\"$:/state/notebook-sidebar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"no\\\" retain=\\\"yes\\\" animate=\\\"no\\\">\\n \u003C$scrollable fallthrough=\\\"no\\\">\\n \u003Cdiv class=\\\"nc-sidebar\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/themes/nico/notebook/tags/Sidebar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"inline\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003C/div>\\n \u003C/$scrollable>\\n\u003C/$reveal>\\n\\n\"\n },\n \"$:/themes/nico/notebook/ui/Topbar\": {\n \"title\": \"$:/themes/nico/notebook/ui/Topbar\",\n \"created\": \"20200428203101797\",\n \"modified\": \"20210124213834458\",\n \"tags\": \"$:/tags/PageTemplate\",\n \"type\": \"text/vnd.tiddlywiki\",\n \"text\": \"\u003C$reveal state=\\\"$:/state/notebook-topbar\\\" type=\\\"match\\\" text=\\\"yes\\\" default=\\\"yes\\\" retain=\\\"yes\\\" animate=\\\"yes\\\">\\n \u003Cdiv class=\\\"nc-topbar-wrapper\\\">\\n \u003Cdiv class=\\\"nc-bar nc-topbar tc-adjust-top-of-scroll\\\">\\n \u003C$list filter=\\\"[all[shadows+tiddlers]tag[$:/tags/NotebookTopbar]!has[draft.of]]\\\" variable=\\\"listItem\\\">\\n \u003C$reveal type=\\\"nomatch\\\" state=\u003C\u003Cconfig-title>> text=\\\"hide\\\" tag=\\\"div\\\">\\n \u003C$transclude tiddler=\u003C\u003ClistItem>> mode=\\\"block\\\"/>\\n \u003C/$reveal>\\n \u003C/$list>\\n \u003Cdiv class=\\\"left\\\">\\n\\t{{$:/themes/nico/notebook/ui/Buttons/menu}}\\n {{$:/themes/nico/notebook/ui/Search}}\\n \u003C/div>\\n \u003Cdiv class=\\\"right\\\">\\n {{$:/core/ui/SideBarSegments/page-controls}}\\n \u003C/div>\\n \u003C/div>\\n \u003C/div>\\n\u003C/$reveal>\\n\\n\"\n }\n }\n}","bag":"default","revision":"0","version":"1.4.1","type":"application/json","title":"$:/themes/nico/notebook","source":"https://github.com/NicolasPetton/Notebook","plugin-type":"theme","name":"Notebook theme","list":"LICENSE changelog","description":"A clean, uncluttered TiddlyWiki theme","dependents":"$:/themes/tiddlywiki/vanilla $:/plugins/nico/notebook-mobile","core-version":">=5.1.22","author":"NicolasPetton"}, {"created":"20200429144554294","title":"$:/themes/nico/notebook/metrics/sidebar-width","modified":"20230423163514560","tags":"","type":"text/vnd.tiddlywiki","text":"300px"}, diff --git a/src/3rd/js/aframe/index.js b/src/3rd/js/aframe/index.js index ce1e8f9..7eb62ed 100644 --- a/src/3rd/js/aframe/index.js +++ b/src/3rd/js/aframe/index.js @@ -8,6 +8,8 @@ window.AFRAME.registerComponent('xrf', { document.querySelector('[camera]').setAttribute('xrf-fade','') AFRAME.fade = document.querySelector('[camera]').components['xrf-fade'] + if( document.location.host.match(/localhost/) ) document.querySelector('a-scene').setAttribute("stats",'') + document.querySelector('a-scene').addEventListener('loaded', () => { // enable XR fragments diff --git a/src/3rd/js/three/hashbus.js b/src/3rd/js/three/hashbus.js index c7df3b4..287d863 100644 --- a/src/3rd/js/three/hashbus.js +++ b/src/3rd/js/three/hashbus.js @@ -62,12 +62,15 @@ pub.XRWG = (opts) => { match.map( (w) => { if( w.key == `#${id}` ){ if( w.value && w.value[0] == '#' ){ + frag = xrf.URI.parse( w.value ) + v = Object.values(frag)[0] // if value is alias, execute fragment value xrf.hashbus.pub( w.value, xrf.model, xrf.XRF.METADATA | xrf.XRF.PV_OVERRIDE | xrf.XRF.NAVIGATOR ) + xrf.emit('dynamicKey',{ ...opts,v,frag,id,match,scene }) } } }) - xrf.emit('dynamicKey',{ ...opts,v,frag,id,match,scene }) + if( !match.length ) xrf.emit('dynamicKey',{ ...opts,v,frag,id,match,scene }) }else{ xrf.emit('dynamicKeyValue',{ ...opts,v,frag,id,match,scene }) } diff --git a/src/3rd/js/three/xrf/dynamic/filter.js b/src/3rd/js/three/xrf/dynamic/filter.js index eec91b7..bf2ec1e 100644 --- a/src/3rd/js/three/xrf/dynamic/filter.js +++ b/src/3rd/js/three/xrf/dynamic/filter.js @@ -7,7 +7,7 @@ xrf.addEventListener('dynamicKey', (opts) => { let {scene,id,match,v} = opts if( v.filter ){ let frags = {} - frags[ v.fragment ] = v + frags[ v.filter.key ] = v xrf.filter.scene({frag:frags,scene}) } }) @@ -23,7 +23,7 @@ xrf.filter = function(query, cb){ xrf.filter.scene = function(opts){ let {scene,frag} = opts - +console.dir(opts) xrf.filter .sort(frag) // get (sorted) filters from XR Fragments .process(frag,scene,opts) // show/hide things @@ -91,6 +91,9 @@ xrf.filter.process = function(frag,scene,opts){ let processed = {} scene.traverse( (m) => { + + if( filter.root && m.isSRC ) return // ignore src nodes when root is specific (#/VR #/AR e.g.) + // filter on value(expression) #foo=>3 e.g. if( filter.value && m.userData[filter.key] ){ const visible = v.filter.testProperty(filter.key, m.userData[filter.key], filter.show === false ) diff --git a/src/3rd/js/three/xrf/href.js b/src/3rd/js/three/xrf/href.js index 86f9c79..28dcf77 100644 --- a/src/3rd/js/three/xrf/href.js +++ b/src/3rd/js/three/xrf/href.js @@ -41,15 +41,14 @@ xrf.frag.href = function(v, opts){ .then( () => { const flags = v.string[0] == '#' ? xrf.XRF.PV_OVERRIDE : undefined let toFrag = xrf.URI.parse( v.string, xrf.XRF.NAVIGATOR | xrf.XRF.PV_OVERRIDE | xrf.XRF.METADATA ) - // always keep a trail of last positions before we navigate - if( !document.location.hash.match(lastPos) ) xrf.navigator.to(`#${lastPos}`) + // always commit current location (keep a trail of last positions before we navigate) + if( !e.nocommit && !document.location.hash.match(lastPos) ) xrf.navigator.to(`#${lastPos}`) xrf.navigator.to(v.string) // let's surf to HREF! }) .catch( console.error ) } let selected = mesh.userData.XRF.href.selected = (state) => () => { - console.log("select "+mesh.name) if( mesh.selected == state ) return // nothing changed xrf.interactive.objects.map( (o) => { let newState = o.name == mesh.name ? state : false diff --git a/src/3rd/js/three/xrf/src/non-euclidian.js b/src/3rd/js/three/xrf/src/non-euclidian.js index fb3c41a..1138cd9 100644 --- a/src/3rd/js/three/xrf/src/non-euclidian.js +++ b/src/3rd/js/three/xrf/src/non-euclidian.js @@ -102,7 +102,7 @@ xrf.portalNonEuclidian = function(opts){ // trigger href upon camera collide if( mesh.userData.XRF.href ){ - raycaster.far = 0.3 + raycaster.far = 0.35 let cam = xrf.camera.getCam ? xrf.camera.getCam() : camera cam.getWorldPosition(cameraPosition) cam.getWorldDirection(cameraDirection) @@ -110,7 +110,7 @@ xrf.portalNonEuclidian = function(opts){ intersects = raycaster.intersectObjects([mesh], false) if (intersects.length > 0 && !mesh.portal.teleporting ){ mesh.portal.teleporting = true - mesh.userData.XRF.href.exec() + mesh.userData.XRF.href.exec({nocommit:true}) setTimeout( () => mesh.portal.teleporting = false, 500) // dont flip back and forth } } diff --git a/src/xrfragment/Filter.hx b/src/xrfragment/Filter.hx index f23e68d..5eb62f0 100644 --- a/src/xrfragment/Filter.hx +++ b/src/xrfragment/Filter.hx @@ -52,11 +52,11 @@ class Filter { private var str:String = ""; private var q:haxe.DynamicAccess = {}; // 1. create an associative array/object to store filter-arguments as objects - private var isProp:EReg = ~/^.*=[><=]?/; // 1. detect object id's & properties `foo=1` and `foo` (reference regex= `~/^.*=[><=]?/` ) + private var isProp:EReg = ~/^.*=[><=]?/; // 1. detect object id's & properties `foo=1` and `foo` (reference regex= `~/^.*=[><=]?/` ) private var isExclude:EReg = ~/^-/; // 1. detect excluders like `-foo`,`-foo=1`,`-.foo`,`-/foo` (reference regex= `/^-/` ) private var isRoot:EReg = ~/^[-]?\//; // 1. detect root selectors like `/foo` (reference regex= `/^[-]?\//` ) private var isNumber:EReg = ~/^[0-9\.]+$/; // 1. detect number values like `foo=1` (reference regex= `/^[0-9\.]+$/` ) - private var operators:EReg = ~/(^-|\*$)/; // 1. detect operators so you can easily strip keys (reference regex= `/(^-|\*$)/` ) + private var operators:EReg = ~/(^-|\*$|\/)/; // 1. detect operators so you can easily strip keys (reference regex= `/(^-|\*$)/` ) private var isSelectorExclude:EReg = ~/^-/; // 1. detect exclude keys like `-foo` (reference regex= `/^-/` ) public function new(str:String){ diff --git a/src/xrfragment/Parser.hx b/src/xrfragment/Parser.hx index 97d0080..8e01751 100644 --- a/src/xrfragment/Parser.hx +++ b/src/xrfragment/Parser.hx @@ -9,7 +9,7 @@ import xrfragment.XRF; class Parser { public static var error:String = ""; public static var debug:Bool = false; - public static var keyClean:EReg = ~/(\*$|^-)/g; + public static var keyClean:EReg = ~/(\*$|^-|\/)/g; @:keep public static function parse(key:String,value:String,store:haxe.DynamicAccess,?index:Int):Bool { @@ -65,7 +65,7 @@ class Parser { trace("⚠ fragment '"+key+"' has incompatible value ("+value+")");// 1. don't add to store if value-type is incorrect return false; } - store.set(key, v ); // 1. if valid, add to store + store.set( keyClean.replace(key,''), v); // 1. if valid, add to store if( debug ) trace("✔ "+key+": "+v.string); }else{ // 1. expose (but mark) non-offical fragments too if( Std.isOfType(value, String) ) v.guessType(v,value);