Skip to main content
Inspiring
June 23, 2015
Answered

Expand / collapse a group via JavaScript?

  • June 23, 2015
  • 5 replies
  • 8518 views

I work with a lot of groups (layersets) that contain content that clutters the screen.  It would be great to use some ExtendScript command to collapse groups (similar to pressing the triangle next to the group, not talking about visibility).  Is there a way to do this?  The Script Listener does not record any code when doing this, and I can't find any documentation on it.  But it seems like something that should be addressable in code.  Thanks for any suggestions!

This topic has been closed for replies.
Correct answer r-bin

Type in search collapseAllGroupsEvent

5 replies

Stephen Marsh
Community Expert
Community Expert
August 10, 2022

I have extended the script from @Vova_p and collected some related scripts here:

 

https://gist.github.com/MarshySwamp/a39e3e1efee41174b3b92ee68c40fcd8

 

gregbenzAuthor
Inspiring
January 31, 2019

the suggestions listed here so far work under limited assumptions. But closing a group this way removes a lot of information from the group: layer styles, lock status, color, blendIf, opacity changes, etc.

Is there no JSX command to do it without altering the group?

r-binCorrect answer
Legend
January 31, 2019

Type in search collapseAllGroupsEvent

gregbenzAuthor
Inspiring
January 31, 2019

Thank you

Vova_p
Participant
February 16, 2016

Hi =)

I had this broblem too. But i found a answer. It strange a little bit, but it works.

So, we have a layers in the group, and group is expand. Group is a acive layer.

var groupname = app.activeDocument.activeLayer.name // remember name of group

var idungroupLayersEvent = stringIDToTypeID( "ungroupLayersEvent" ); // this part from  Script Listene -- ungroup group

var desc14 = new ActionDescriptor();

var idnull = charIDToTypeID( "null" );

var ref13 = new ActionReference();

var idLyr = charIDToTypeID( "Lyr " );

var idOrdn = charIDToTypeID( "Ordn" );

var idTrgt = charIDToTypeID( "Trgt" );

ref13.putEnumerated( idLyr, idOrdn, idTrgt );

desc14.putReference( idnull, ref13 );

executeAction( idungroupLayersEvent, desc14, DialogModes.NO );

var idMk = charIDToTypeID( "Mk  " ); // this part from  Script Listene --  group selected layers

var desc15 = new ActionDescriptor();

var idnull = charIDToTypeID( "null" );

var ref14 = new ActionReference();

var idlayerSection = stringIDToTypeID( "layerSection" );

ref14.putClass( idlayerSection );

desc15.putReference( idnull, ref14 );

var idFrom = charIDToTypeID( "From" );

var ref15 = new ActionReference();

var idLyr = charIDToTypeID( "Lyr " );

var idOrdn = charIDToTypeID( "Ordn" );

var idTrgt = charIDToTypeID( "Trgt" );

ref15.putEnumerated( idLyr, idOrdn, idTrgt );

desc15.putReference( idFrom, ref15 );

executeAction( idMk, desc15, DialogModes.NO );

app.activeDocument.activeLayer.name = groupname // recall group name

P.S. Sorry of my english. It doesn't my mother tonque.

gregbenzAuthor
Inspiring
May 8, 2017

Works when multiple layers are selected.  Any idea how to create a closed group that only contains a single layer?

Inspiring
May 9, 2017

A workaround could be to create a temporary layer inside the group, then to use the above script by Vova_p, and then to delete the temp layer ?

Inspiring
June 24, 2015

The work-a-round could be these scripts here.

buliarca's scripts BCM Tools

gregbenzAuthor
Inspiring
June 24, 2015

Thanks!

c.pfaffenbichler
Community Expert
Community Expert
June 24, 2015

If I remember correctly there was a work-around, probably the thread was over at the now-defunct ps-scripts.com.

You might be able to find something in the archive:

ps-scripts.com • Index page