# Manually toggle Perspective appBar in scripting

**URL:** <https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565>\
**Category:** Ignition\
**Tags:** perspective, ignition81, scripting\
**Created:** [November 16, 2022, 4:06am UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565 "2022-11-16T04:06:02Z")\
**Posts on this page:** 11\
**Page:** 1

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [November 16, 2022, 4:06am UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/1 "2022-11-16T04:06:02Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [November 16, 2022, 4:53am UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/2 "2022-11-16T04:53:31Z")

</div>

> [@kgamble](#):
>
> am fairly certain some cheaty @victordcq hack on a markdown component could do it,

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.

```javascript
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

```xml
<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.

```css
.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](https://us1.discourse-cdn.com/inductiveautomation/original/3X/6/3/63f8a380e3ace155841f7803dca43d327795a107.gif)

---

<div class="post-metadata">

**Author:** ![victordcq](https://avatars.discourse-cdn.com/v4/letter/v/f6c823/32.png) [@victordcq](https://forum.inductiveautomation.com/u/victordcq)\
**Post date:** [November 16, 2022, 7:36am UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/3 "2022-11-16T07:36:18Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [November 16, 2022, 3:30pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/4 "2022-11-16T15:30:32Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![dkhayes117](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/dkhayes117/32/68344_2.png) [@dkhayes117](https://forum.inductiveautomation.com/u/dkhayes117)\
**Post date:** [November 16, 2022, 5:00pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/5 "2022-11-16T17:00:00Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [November 16, 2022, 5:00pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/6 "2022-11-16T17:00:56Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 16, 2022, 6:14pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/7 "2022-11-16T18:14:18Z")

</div>

> [@kgamble](#):
>
> It gets rid of the whole thing, it can’t retrieve it 🙁

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

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

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [November 16, 2022, 6:22pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/8 "2022-11-16T18:22:46Z")

</div>

> [@paul-griffith](#):
>
> Writing true to `page.props.appBarVisible` doesn't make it show up again?

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:

```auto
self.page.props.appBarVisible = not self.page.props.appBarVisible

```

---

<div class="post-metadata">

**Author:** ![paul-griffith](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/paul-griffith/32/37249_2.png) [@paul-griffith](https://forum.inductiveautomation.com/u/paul-griffith)\
**Post date:** [November 16, 2022, 6:25pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/9 "2022-11-16T18:25:23Z")

</div>

> [@kgamble](#):
>
> 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.

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

---

<div class="post-metadata">

**Author:** ![kgamble](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kgamble/32/8019_2.png) [@kgamble](https://forum.inductiveautomation.com/u/kgamble)\
**Post date:** [November 16, 2022, 6:26pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/10 "2022-11-16T18:26:35Z")

</div>

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

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?

---

<div class="post-metadata">

**Author:** ![Lynn\_Martineau](https://avatars.discourse-cdn.com/v4/letter/l/f1d935/32.png) [@Lynn\_Martineau](https://forum.inductiveautomation.com/u/Lynn_Martineau)\
**Post date:** [September 29, 2025, 9:02pm UTC](https://forum.inductiveautomation.com/t/manually-toggle-perspective-appbar-in-scripting/66565/11 "2025-09-29T21:02:34Z")

</div>

For folks like me that are slow to keep up or remember things:  
There is now a Page Configuration property to set the AppBar position that includes “hidden”

 ![2025-09-29_14-54-08](https://us1.discourse-cdn.com/inductiveautomation/original/3X/a/e/aedecc5e5e22470a0bca8156430b63aef3d2ee83.jpeg)

To see the change, close and reopen your session in the browser..
