+<$eventcatcher tag="div" class="tc-sidebar-resizer-pointerdown-eventcatcher" selector=".tc-sidebar-resizer" matchSelector=".tc-sidebar-resizer" $pointerdown=<> $pointerup=<>> + +<$eventcatcher tag="div" selector=".tc-sidebar-resizer-pointermove" matchSelector=".tc-sidebar-resizer-pointermove" class="tc-sidebar-resizer-pointermove-eventcatcher" $pointerup=<> $pointermove=<> $pointerleave=<> $pointerout=<>> + +
+ + + +
+ + +
<$list filter="[all[shadows+tiddlers]tag[$:/tags/AboveStory]!has[draft.of]]"> diff --git a/core/wiki/macros/sidebar-resizer.tid b/core/wiki/macros/sidebar-resizer.tid new file mode 100644 index 000000000..11cf95361 --- /dev/null +++ b/core/wiki/macros/sidebar-resizer.tid @@ -0,0 +1,32 @@ +title: $:/core/macros/sidebar-resizer +tags: $:/tags/Global + +\procedure sidebar-resizer-pointerdown-actions() +<%if [[$:/state/sidebar/resizing]is[missing]thenmatch[left]] %> + <$let leftOffset={{{ [subtract] }}} viewportWidth={{{ [add] }}} dragDiff=<> dragDiffPercentage={{{ [divide] }}} dragWidthPercentage={{{ [divide] }}} sidebarOffsetPercentage={{{ [[22]divide] }}} storyRiverPercentage={{{ [subtractdividesubtract] }}} sidebarPercentage={{{ [[1]subtractsubtract] }}}> + <$action-setfield $tiddler="$:/state/sidebar/posx" + drag-width=<> + drag-diff=<> + drag-diff-percentage=<> + drag-width-percentage=<> + sidebar-offset-percentage=<> + story-river-percentage=<> + sidebar-percentage=<>/> + <$action-setfield $tiddler="$:/state/sidebar/resizing" text="yes"/> + +<% endif %> +\end +\procedure sidebar-resizer-pointerup-actions() +<%if [[$:/state/sidebar/resizing]!is[missing]] %> + <$action-deletetiddler $tiddler="$:/state/sidebar/resizing"/> +<% endif %> +\end +\procedure sidebar-resizer-pointermove-actions() +<%if [[$:/state/sidebar/resizing]!is[missing]] %> + <$let leftOffset={{{ [subtract] }}} viewportWidth={{{ [add] }}} storyRiverPercentage={{{ [subtractdividesubtract{$:/state/sidebar/posx!!drag-diff-percentage}] }}} sidebarPercentage={{{ [[1]subtractsubtract{$:/state/sidebar/posx!!sidebar-offset-percentage}] }}}> + <$action-setfield $tiddler="$:/state/sidebar/posx" + story-river-percentage=<> + sidebar-percentage=<>/> + +<% endif %> +\end \ No newline at end of file diff --git a/themes/tiddlywiki/vanilla/metrics.multids b/themes/tiddlywiki/vanilla/metrics.multids index 3607bd6c9..9579e8a63 100644 --- a/themes/tiddlywiki/vanilla/metrics.multids +++ b/themes/tiddlywiki/vanilla/metrics.multids @@ -5,9 +5,10 @@ bodylineheight: 22px fontsize: 14px lineheight: 20px storyleft: 0px +storyminwidth: 350px storytop: 0px storyright: 770px storywidth: 770px -tiddlerwidth: 686px sidebarbreakpoint: 960px sidebarwidth: 350px +tiddlerwidth: 686px \ No newline at end of file diff --git a/themes/tiddlywiki/vanilla/sidebar-resizer.tid b/themes/tiddlywiki/vanilla/sidebar-resizer.tid index 6bec06639..391b6d3f5 100644 --- a/themes/tiddlywiki/vanilla/sidebar-resizer.tid +++ b/themes/tiddlywiki/vanilla/sidebar-resizer.tid @@ -1 +1,123 @@ title: $:/themes/tiddlywiki/vanilla/sidebar-resizer +tags: [[$:/tags/Stylesheet]] +code-body: yes + +\define sidebarbreakpoint() +<$text text={{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}}/> +\end + +\define sidebarbreakpoint-minus-one() +<$text text={{{ [{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}removesuffix[px]subtract[1]addsuffix[px]] ~[{$:/themes/tiddlywiki/vanilla/metrics/sidebarbreakpoint}] }}}/> +\end + +@media (min-width: <>) { + +.tc-sidebar-scrollable { + padding-left: 20px; + width: calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 22px); + z-index: 1; +} + +.tc-sidebar-resizer-pointerdown-eventcatcher { + position: absolute; + top: calc(0px - {{$:/themes/tiddlywiki/vanilla/metrics/storytop}}); + left: 0; + right: calc(-{{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}}); + height: 100%; + min-height: 100vh; + z-index: 0; +} + +.tc-sidebar-resizer-pointermove-eventcatcher { + position: absolute; + top: 0; + left: 0; + right: 0; + width: 100%; + height: 100%; + min-height: 100vh; + z-index: -1; +} + +.tc-sidebar-resizer-pointermove { + position: absolute; + top: 0; + left: calc(100% - 100vw); + right: 0; + width: 100vw; + height: 100%; + min-height: 100vh; + z-index: -1; +} + +.tc-sidebar-resizer { + position: fixed; + top: 0; + right: calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 22px); + height: 100vh; + width: 22px; + z-index: 2; + transition: opacity 100ms; + opacity: 0; + cursor: ew-resize; + background: linear-gradient(<>, <>) no-repeat center/2px 100%; +} + +.tc-sidebar-resizer:hover { + opacity: 0.8; +} + +<%if [[$:/state/sidebar/resizing]!is[missing]] %> + + .tc-sidebar-scrollable { + z-index: -1; + } + + .tc-sidebar-resizer-pointerdown-eventcatcher { + z-index: 3; + } + + .tc-sidebar-resizer-pointermove-eventcatcher { + z-index: 4; + } + + .tc-sidebar-resizer-pointermove { + z-index: 5; + cursor: ew-resize; + } + + .tc-sidebar-resizer { + opacity: 0.8; + } + +<% endif %> + +<%if [[$:/state/sidebar/posx]!is[missing]then{$:/state/sidebar}!match[no]] %> + + .tc-sidebar-resizer-pointerdown-eventcatcher { + right: auto; + width: calc(100% + (100vw - 100%)); + } + + .tc-sidebar-resizer { + right: min(max(calc(({{$:/state/sidebar/posx!!sidebar-percentage}} * 100%)),calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 22px)),calc((100vw - 100%) + (100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyminwidth}}) - 22px)); + } + + .tc-story-river { + width: min(max(calc({{$:/state/sidebar/posx!!story-river-percentage}} * 100%),{{$:/themes/tiddlywiki/vanilla/metrics/storyminwidth}}),calc(100% - {{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}})); + } + + .tc-sidebar-scrollable { + width: min(max(calc(({{$:/state/sidebar/posx!!sidebar-percentage}} * 100%)),calc({{$:/themes/tiddlywiki/vanilla/metrics/sidebarwidth}} - 22px)),calc((100vw - 100%) + (100% - {{$:/themes/tiddlywiki/vanilla/metrics/storyminwidth}}) - 22px)); + } + +<% endif %> + +} + +@media (max-width: <>) { + + .tc-sidebar-resizer-pointermove-eventcatcher, .tc-sidebar-resizer { + display: none; + } +} \ No newline at end of file