Skip to main content
Inspiring
June 23, 2015
解決済み

Expand / collapse a group via JavaScript?

  • June 23, 2015
  • 返信数 5.
  • 8518 ビュー

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!

このトピックへの返信は締め切られました。
解決に役立った回答 r-bin

Type in search collapseAllGroupsEvent

返信数 5

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

 

gregbenz作成者
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-bin解決!
Legend
January 31, 2019

Type in search collapseAllGroupsEvent

gregbenz作成者
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.

gregbenz作成者
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 10, 2017

Sorry, my suggestion was loosy. The last step would reopen the group!


I spoke too fast (well... Ok...lesson learned). It's possible too delete the temp layer without reopen the group.

Inspiring
June 24, 2015

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

buliarca's scripts BCM Tools

gregbenz作成者
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