111 lines
2.8 KiB
JavaScript
111 lines
2.8 KiB
JavaScript
const { batchPlay } = require('photoshop').action
|
|
const { executeAsModal } = require('photoshop').core
|
|
const { cleanLayers, getLayerIndex, selectLayers } = require('../psapi')
|
|
|
|
async function createNewLayerExe(layerName) {
|
|
await executeAsModal(async () => {
|
|
await createNewLayerCommand(layerName)
|
|
})
|
|
const new_layer = await app.activeDocument.activeLayers[0]
|
|
return new_layer
|
|
}
|
|
|
|
async function createNewLayerCommand(layerName) {
|
|
return await app.activeDocument.createLayer({
|
|
name: layerName,
|
|
opacity: 100,
|
|
mode: 'normal',
|
|
})
|
|
}
|
|
|
|
async function deleteLayers(layers) {
|
|
try {
|
|
await cleanLayers(layers)
|
|
} catch (e) {
|
|
console.warn(e)
|
|
}
|
|
}
|
|
|
|
async function getIndexCommand() {
|
|
const command = {
|
|
_obj: 'get',
|
|
_target: [
|
|
{
|
|
_property: 'itemIndex',
|
|
},
|
|
{
|
|
_ref: 'layer',
|
|
_enum: 'ordinal',
|
|
_value: 'targetEnum',
|
|
},
|
|
],
|
|
}
|
|
const result = await batchPlay([command], {
|
|
synchronousExecution: true,
|
|
modalBehavior: 'execute',
|
|
})
|
|
|
|
return result
|
|
}
|
|
|
|
async function getIndexExe() {
|
|
let index
|
|
await executeAsModal(async () => {
|
|
index = await getIndexCommand()
|
|
})
|
|
|
|
return index
|
|
}
|
|
const photoshop = require('photoshop')
|
|
|
|
const collapseFolderCommand = async (expand = false, recursive = false) => {
|
|
let result
|
|
try {
|
|
result = await batchPlay(
|
|
[
|
|
{
|
|
_obj: 'set',
|
|
_target: {
|
|
_ref: [
|
|
{ _property: 'layerSectionExpanded' },
|
|
{
|
|
_ref: 'layer',
|
|
_enum: 'ordinal',
|
|
_value: 'targetEnum',
|
|
},
|
|
],
|
|
},
|
|
to: expand,
|
|
recursive,
|
|
_options: { dialogOptions: 'dontDisplay' },
|
|
},
|
|
],
|
|
{ synchronousExecution: true }
|
|
)
|
|
} catch (e) {
|
|
console.error(e.message)
|
|
}
|
|
return result
|
|
}
|
|
async function collapseFolderExe(layers, expand = false, recursive = false) {
|
|
for (let layer of layers) {
|
|
try {
|
|
await executeAsModal(async () => {
|
|
const is_visible = await layer.visible // don't change the visiblity of the layer when collapsing
|
|
await selectLayers([layer])
|
|
await collapseFolderCommand(expand, recursive)
|
|
layer.visible = is_visible
|
|
})
|
|
} catch (e) {
|
|
console.warn(e)
|
|
}
|
|
}
|
|
}
|
|
|
|
module.exports = {
|
|
createNewLayerExe,
|
|
deleteLayers,
|
|
getIndexExe,
|
|
collapseFolderExe,
|
|
}
|