Manually toggle Perspective appBar in scripting

I am not sure if this is possible at all, or should be an ideas post, but is it possible to toggle the appBar through scripting?

I have a user interface that just doesn't really work well with having a little arrow on the bottom left or right side of the screen, but ideally baking it into the pre-existing UI.

Is it possible to toggle this through scripting? I am fairly certain some cheaty @victordcq hack on a markdown component could do it, but a first party solution seems ideal.

Figured I would try out the hacky answer, since I hadn't tried it yet...

Here is the js needed to click either the show icon or collapse icon.

onclick="event.preventDefault();document.getElementsByClassName(window.__client.page._appBarVisible ? 'hide-icon material-icons md-32' : 'show-icon material-icons md-32 show-icon-visible')[0].dispatchEvent(new MouseEvent('click', {'view': window,'bubbles': true,'cancelable': false}));">

Here it is wrapped into a markdown component that gives a settings gear

<div style="display: flex; flex-direction: column; justify-content: center; align-items: center;"
	onclick="event.preventDefault();document.getElementsByClassName(window.__client.page._appBarVisible ? 'hide-icon material-icons md-32' : 'show-icon material-icons md-32 show-icon-visible')[0].dispatchEvent(new MouseEvent('click', {'view': window,'bubbles': true,'cancelable': false}));">
	<svg viewBox="0 0 24 24" data-component="ia.display.icon" data-component-path="C.0:1" data-icon="material/settings" style="fill: currentcolor; flex: 1 1 96px;">
		<g class="icon" id="settings">
		<g>
			<path d="M0,0h24v24H0V0z" fill="none"></path>
			<path d="M19.14,12.94c0.04-0.3,0.06-0.61,0.06-0.94c0-0.32-0.02-0.64-0.07-0.94l2.03-1.58c0.18-0.14,0.23-0.41,0.12-0.61 l-1.92-3.32c-0.12-0.22-0.37-0.29-0.59-0.22l-2.39,0.96c-0.5-0.38-1.03-0.7-1.62-0.94L14.4,2.81c-0.04-0.24-0.24-0.41-0.48-0.41 h-3.84c-0.24,0-0.43,0.17-0.47,0.41L9.25,5.35C8.66,5.59,8.12,5.92,7.63,6.29L5.24,5.33c-0.22-0.08-0.47,0-0.59,0.22L2.74,8.87 C2.62,9.08,2.66,9.34,2.86,9.48l2.03,1.58C4.84,11.36,4.8,11.69,4.8,12s0.02,0.64,0.07,0.94l-2.03,1.58 c-0.18,0.14-0.23,0.41-0.12,0.61l1.92,3.32c0.12,0.22,0.37,0.29,0.59,0.22l2.39-0.96c0.5,0.38,1.03,0.7,1.62,0.94l0.36,2.54 c0.05,0.24,0.24,0.41,0.48,0.41h3.84c0.24,0,0.44-0.17,0.47-0.41l0.36-2.54c0.59-0.24,1.13-0.56,1.62-0.94l2.39,0.96 c0.22,0.08,0.47,0,0.59-0.22l1.92-3.32c0.12-0.22,0.07-0.47-0.12-0.61L19.14,12.94z M12,15.6c-1.98,0-3.6-1.62-3.6-3.6 s1.62-3.6,3.6-3.6s3.6,1.62,3.6,3.6S13.98,15.6,12,15.6z"></path>
		</g>
		</g>
	</svg>
</div>

And here is the css needed to hide the button without removing it, so that the click can still hit it.

.bar-reveal.bar-reveal-visible {
	visibility: hidden !important;
}

And the final result, for some reason slowed down because I can't make a normal speed gif...
Screen Recording 2022-11-15 at 8.50.07 PM

1 Like

I'm pretty sure you can just change the session props about the appBar^^
Tho maybe thats just the tiny button idk

It gets rid of the whole thing, it can’t retrieve it :slightly_frowning_face:

1 Like

I thought that changes to the app bar required a session restart to take effect?

It’s visibility and position does, that’s why I used CSS to make it invisible.

1 Like

Writing true to page.props.appBarVisible doesn't make it show up again?

It certainly did years ago when I implemented that toggle...

I didn’t even know that property existed…. it does work... lol

I was tweaking session.props.appBar.togglePosition

It would be convenient if there was an easier way for users to know about page props other than clicking into the property explorer in a binding.

Here is the easy answer for those curious:

self.page.props.appBarVisible = not self.page.props.appBarVisible
1 Like

You're telling me :slight_smile: If you come up with a good place to put it (that wouldn't be confusing), you tell me :laughing:

I thought about that for a good few minutes before I posted it and came up with nothing :joy:

Maybe the same way you have a sidebar for component props, you have a sidebar for page props? Maybe?

This makes me wonder, could you technically put a binding on a page prop if you could access it?