indesign-cli 0.2.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- cli_anything/indesign/README.md +32 -0
- cli_anything/indesign/__init__.py +1 -0
- cli_anything/indesign/__main__.py +5 -0
- cli_anything/indesign/core/artifacts.py +57 -0
- cli_anything/indesign/core/catalog.py +405 -0
- cli_anything/indesign/core/domains.py +178 -0
- cli_anything/indesign/core/envelope.py +65 -0
- cli_anything/indesign/core/errors.py +30 -0
- cli_anything/indesign/core/health.py +46 -0
- cli_anything/indesign/core/hidden_backend.py +116 -0
- cli_anything/indesign/core/hidden_handler_schemas.py +223 -0
- cli_anything/indesign/core/mcp_backend.py +152 -0
- cli_anything/indesign/core/node_setup.py +35 -0
- cli_anything/indesign/core/paths.py +41 -0
- cli_anything/indesign/core/plugins/__init__.py +2 -0
- cli_anything/indesign/core/plugins/backend.py +90 -0
- cli_anything/indesign/core/plugins/discovery.py +69 -0
- cli_anything/indesign/core/plugins/host_actions.py +76 -0
- cli_anything/indesign/core/plugins/install.py +38 -0
- cli_anything/indesign/core/plugins/manifest.py +279 -0
- cli_anything/indesign/core/plugins/validate.py +181 -0
- cli_anything/indesign/core/router.py +217 -0
- cli_anything/indesign/core/runtime.py +59 -0
- cli_anything/indesign/core/scripts.py +44 -0
- cli_anything/indesign/core/session.py +68 -0
- cli_anything/indesign/indesign_cli.py +320 -0
- cli_anything/indesign/node/hidden_handler_bridge.mjs +111 -0
- cli_anything/indesign/server/package-lock.json +168 -0
- cli_anything/indesign/server/package.json +45 -0
- cli_anything/indesign/server/src/advanced/index.js +76 -0
- cli_anything/indesign/server/src/core/InDesignMCPServer.js +273 -0
- cli_anything/indesign/server/src/core/scriptExecutor.js +271 -0
- cli_anything/indesign/server/src/core/sessionManager.js +545 -0
- cli_anything/indesign/server/src/handlers/advancedTemplateHandlers.js +1072 -0
- cli_anything/indesign/server/src/handlers/bookHandlers.js +490 -0
- cli_anything/indesign/server/src/handlers/documentHandlers.js +1472 -0
- cli_anything/indesign/server/src/handlers/exportHandlers.js +208 -0
- cli_anything/indesign/server/src/handlers/graphicsHandlers.js +605 -0
- cli_anything/indesign/server/src/handlers/groupHandlers.js +358 -0
- cli_anything/indesign/server/src/handlers/helpHandlers.js +347 -0
- cli_anything/indesign/server/src/handlers/index.js +77 -0
- cli_anything/indesign/server/src/handlers/layerHandlers.js +75 -0
- cli_anything/indesign/server/src/handlers/masterSpreadHandlers.js +451 -0
- cli_anything/indesign/server/src/handlers/pageHandlers.js +698 -0
- cli_anything/indesign/server/src/handlers/pageItemHandlers.js +704 -0
- cli_anything/indesign/server/src/handlers/presentationHandlers.js +220 -0
- cli_anything/indesign/server/src/handlers/spreadHandlers.js +348 -0
- cli_anything/indesign/server/src/handlers/styleHandlers.js +458 -0
- cli_anything/indesign/server/src/handlers/textHandlers.js +431 -0
- cli_anything/indesign/server/src/handlers/utilityHandlers.js +83 -0
- cli_anything/indesign/server/src/index.js +17 -0
- cli_anything/indesign/server/src/types/index.js +106 -0
- cli_anything/indesign/server/src/types/toolDefinitionsAdvancedTemplates.js +144 -0
- cli_anything/indesign/server/src/types/toolDefinitionsBook.js +224 -0
- cli_anything/indesign/server/src/types/toolDefinitionsContent.js +353 -0
- cli_anything/indesign/server/src/types/toolDefinitionsDocument.js +409 -0
- cli_anything/indesign/server/src/types/toolDefinitionsExport.js +65 -0
- cli_anything/indesign/server/src/types/toolDefinitionsLayer.js +40 -0
- cli_anything/indesign/server/src/types/toolDefinitionsMasterSpread.js +160 -0
- cli_anything/indesign/server/src/types/toolDefinitionsPage.js +271 -0
- cli_anything/indesign/server/src/types/toolDefinitionsPageItemGroup.js +437 -0
- cli_anything/indesign/server/src/types/toolDefinitionsPresentation.js +83 -0
- cli_anything/indesign/server/src/types/toolDefinitionsSpread.js +158 -0
- cli_anything/indesign/server/src/types/toolDefinitionsUtility.js +40 -0
- cli_anything/indesign/server/src/utils/stringUtils.js +107 -0
- cli_anything/indesign/skills/SKILL.md +198 -0
- indesign_cli-0.2.0.dist-info/METADATA +267 -0
- indesign_cli-0.2.0.dist-info/RECORD +72 -0
- indesign_cli-0.2.0.dist-info/WHEEL +5 -0
- indesign_cli-0.2.0.dist-info/entry_points.txt +3 -0
- indesign_cli-0.2.0.dist-info/licenses/LICENSE +21 -0
- indesign_cli-0.2.0.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,451 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Master spread management handlers
|
|
3
|
+
*/
|
|
4
|
+
import { ScriptExecutor } from '../core/scriptExecutor.js';
|
|
5
|
+
import { formatResponse, escapeJsxString } from '../utils/stringUtils.js';
|
|
6
|
+
|
|
7
|
+
export class MasterSpreadHandlers {
|
|
8
|
+
/**
|
|
9
|
+
* Create a master spread
|
|
10
|
+
*/
|
|
11
|
+
static async createMasterSpread(args) {
|
|
12
|
+
const { name, namePrefix, baseName, showMasterItems = true } = args;
|
|
13
|
+
|
|
14
|
+
let resolvedNamePrefix = namePrefix;
|
|
15
|
+
let resolvedBaseName = baseName;
|
|
16
|
+
if (name && (!resolvedNamePrefix || !resolvedBaseName)) {
|
|
17
|
+
const match = String(name).match(/^([A-Za-z]+)-(.+)$/);
|
|
18
|
+
if (match) {
|
|
19
|
+
resolvedNamePrefix = resolvedNamePrefix || match[1];
|
|
20
|
+
resolvedBaseName = resolvedBaseName || match[2];
|
|
21
|
+
} else {
|
|
22
|
+
resolvedBaseName = resolvedBaseName || name;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const escapedNamePrefix = escapeJsxString(resolvedNamePrefix);
|
|
27
|
+
const escapedBaseName = escapeJsxString(resolvedBaseName);
|
|
28
|
+
|
|
29
|
+
const script = [
|
|
30
|
+
'if (app.documents.length === 0) {',
|
|
31
|
+
' "No document open";',
|
|
32
|
+
'} else {',
|
|
33
|
+
' var doc = app.activeDocument;',
|
|
34
|
+
' var masterSpread = null;',
|
|
35
|
+
...(resolvedNamePrefix ? [
|
|
36
|
+
` for (var i = 0; i < doc.masterSpreads.length; i++) {`,
|
|
37
|
+
` if (doc.masterSpreads[i].namePrefix === "${escapedNamePrefix}") { masterSpread = doc.masterSpreads[i]; break; }`,
|
|
38
|
+
' }'
|
|
39
|
+
] : []),
|
|
40
|
+
' if (masterSpread === null) {',
|
|
41
|
+
' masterSpread = doc.masterSpreads.add();',
|
|
42
|
+
...(resolvedNamePrefix ? [` masterSpread.namePrefix = "${escapedNamePrefix}";`] : []),
|
|
43
|
+
' }',
|
|
44
|
+
'',
|
|
45
|
+
` masterSpread.showMasterItems = ${showMasterItems};`,
|
|
46
|
+
// Apply naming if provided
|
|
47
|
+
...(resolvedBaseName ? [` masterSpread.baseName = "${escapedBaseName}";`] : []),
|
|
48
|
+
'',
|
|
49
|
+
' "Master spread created successfully: " + masterSpread.name;',
|
|
50
|
+
'}'
|
|
51
|
+
].join('\n');
|
|
52
|
+
|
|
53
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
54
|
+
return formatResponse(result, "Create Master Spread");
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
/**
|
|
58
|
+
* List all master spreads
|
|
59
|
+
*/
|
|
60
|
+
static async listMasterSpreads(args) {
|
|
61
|
+
const script = [
|
|
62
|
+
'if (app.documents.length === 0) {',
|
|
63
|
+
' "No document open";',
|
|
64
|
+
'} else {',
|
|
65
|
+
' var doc = app.activeDocument;',
|
|
66
|
+
' var masterSpreads = doc.masterSpreads;',
|
|
67
|
+
' var result = "=== MASTER SPREADS ===\\n";',
|
|
68
|
+
'',
|
|
69
|
+
' for (var i = 0; i < masterSpreads.length; i++) {',
|
|
70
|
+
' var master = masterSpreads[i];',
|
|
71
|
+
' result += "Index: " + i + "\\n";',
|
|
72
|
+
' result += "Name: " + master.name + "\\n";',
|
|
73
|
+
' result += "Name Prefix: " + master.namePrefix + "\\n";',
|
|
74
|
+
' result += "Base Name: " + master.baseName + "\\n";',
|
|
75
|
+
' result += "Show Master Items: " + master.showMasterItems + "\\n";',
|
|
76
|
+
' result += "Pages: " + master.pages.length + "\\n";',
|
|
77
|
+
' result += "---\\n";',
|
|
78
|
+
' }',
|
|
79
|
+
'',
|
|
80
|
+
' result;',
|
|
81
|
+
'}'
|
|
82
|
+
].join('\n');
|
|
83
|
+
|
|
84
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
85
|
+
return formatResponse(result, "List Master Spreads");
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Delete a master spread
|
|
90
|
+
*/
|
|
91
|
+
static async deleteMasterSpread(args) {
|
|
92
|
+
const { masterIndex } = args;
|
|
93
|
+
|
|
94
|
+
const script = [
|
|
95
|
+
'if (app.documents.length === 0) {',
|
|
96
|
+
' "No document open";',
|
|
97
|
+
'} else {',
|
|
98
|
+
' var doc = app.activeDocument;',
|
|
99
|
+
` if (${masterIndex} >= doc.masterSpreads.length) {`,
|
|
100
|
+
' "Master spread index out of range";',
|
|
101
|
+
' } else {',
|
|
102
|
+
` var masterSpread = doc.masterSpreads[${masterIndex}];`,
|
|
103
|
+
' var name = masterSpread.name;',
|
|
104
|
+
' masterSpread.remove();',
|
|
105
|
+
' "Master spread deleted: " + name;',
|
|
106
|
+
' }',
|
|
107
|
+
'}'
|
|
108
|
+
].join('\n');
|
|
109
|
+
|
|
110
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
111
|
+
return formatResponse(result, "Delete Master Spread");
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Duplicate a master spread
|
|
116
|
+
*/
|
|
117
|
+
static async duplicateMasterSpread(args) {
|
|
118
|
+
const { masterIndex, position = 'AT_END', referenceMaster } = args;
|
|
119
|
+
|
|
120
|
+
const script = [
|
|
121
|
+
'if (app.documents.length === 0) {',
|
|
122
|
+
' "No document open";',
|
|
123
|
+
'} else {',
|
|
124
|
+
' var doc = app.activeDocument;',
|
|
125
|
+
` if (${masterIndex} >= doc.masterSpreads.length) {`,
|
|
126
|
+
' "Master spread index out of range";',
|
|
127
|
+
' } else {',
|
|
128
|
+
` var masterSpread = doc.masterSpreads[${masterIndex}];`,
|
|
129
|
+
' var newMasterSpread;',
|
|
130
|
+
'',
|
|
131
|
+
` if ("${position}" === "AT_END") {`,
|
|
132
|
+
' newMasterSpread = masterSpread.duplicate();',
|
|
133
|
+
` } else if ("${position}" === "AT_BEGINNING") {`,
|
|
134
|
+
' newMasterSpread = masterSpread.duplicate(LocationOptions.AT_BEGINNING);',
|
|
135
|
+
` } else if ("${position}" === "BEFORE" && ${referenceMaster} !== undefined) {`,
|
|
136
|
+
` newMasterSpread = masterSpread.duplicate(LocationOptions.BEFORE, doc.masterSpreads[${referenceMaster}]);`,
|
|
137
|
+
` } else if ("${position}" === "AFTER" && ${referenceMaster} !== undefined) {`,
|
|
138
|
+
` newMasterSpread = masterSpread.duplicate(LocationOptions.AFTER, doc.masterSpreads[${referenceMaster}]);`,
|
|
139
|
+
' } else {',
|
|
140
|
+
' newMasterSpread = masterSpread.duplicate();',
|
|
141
|
+
' }',
|
|
142
|
+
'',
|
|
143
|
+
' "Master spread duplicated successfully. New master index: " + newMasterSpread.index;',
|
|
144
|
+
' }',
|
|
145
|
+
'}'
|
|
146
|
+
].join('\n');
|
|
147
|
+
|
|
148
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
149
|
+
return formatResponse(result, "Duplicate Master Spread");
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Apply a master spread to pages
|
|
154
|
+
*/
|
|
155
|
+
static async applyMasterSpread(args) {
|
|
156
|
+
const { masterName, pageRange } = args;
|
|
157
|
+
|
|
158
|
+
const escapedMasterName = escapeJsxString(masterName);
|
|
159
|
+
const escapedPageRange = escapeJsxString(pageRange);
|
|
160
|
+
|
|
161
|
+
const script = [
|
|
162
|
+
'if (app.documents.length === 0) {',
|
|
163
|
+
' "No document open";',
|
|
164
|
+
'} else {',
|
|
165
|
+
' var doc = app.activeDocument;',
|
|
166
|
+
` var masterSpread = doc.masterSpreads.itemByName("${escapedMasterName}");`,
|
|
167
|
+
'',
|
|
168
|
+
' if (!masterSpread.isValid) {',
|
|
169
|
+
` "Master spread not found: ${escapedMasterName}";`,
|
|
170
|
+
' } else {',
|
|
171
|
+
' var pages = doc.pages;',
|
|
172
|
+
'',
|
|
173
|
+
` if ("${escapedPageRange}" === "all") {`,
|
|
174
|
+
' for (var i = 0; i < pages.length; i++) {',
|
|
175
|
+
' pages[i].appliedMaster = masterSpread;',
|
|
176
|
+
' }',
|
|
177
|
+
` } else if ("${escapedPageRange}".indexOf("-") !== -1) {`,
|
|
178
|
+
` var range = "${escapedPageRange}".split("-");`,
|
|
179
|
+
' var start = parseInt(range[0]) - 1;',
|
|
180
|
+
' var end = parseInt(range[1]) - 1;',
|
|
181
|
+
' for (var i = start; i <= end && i < pages.length; i++) {',
|
|
182
|
+
' pages[i].appliedMaster = masterSpread;',
|
|
183
|
+
' }',
|
|
184
|
+
' } else {',
|
|
185
|
+
` var pageIndex = parseInt("${escapedPageRange}") - 1;`,
|
|
186
|
+
' if (pageIndex >= 0 && pageIndex < pages.length) {',
|
|
187
|
+
' pages[pageIndex].appliedMaster = masterSpread;',
|
|
188
|
+
' }',
|
|
189
|
+
' }',
|
|
190
|
+
'',
|
|
191
|
+
' "Master spread applied successfully";',
|
|
192
|
+
' }',
|
|
193
|
+
'}'
|
|
194
|
+
].join('\n');
|
|
195
|
+
|
|
196
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
197
|
+
return formatResponse(result, "Apply Master Spread");
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
/**
|
|
201
|
+
* Create a text frame on a master spread
|
|
202
|
+
*/
|
|
203
|
+
static async createMasterTextFrame(args) {
|
|
204
|
+
const {
|
|
205
|
+
masterName,
|
|
206
|
+
content,
|
|
207
|
+
x,
|
|
208
|
+
y,
|
|
209
|
+
width,
|
|
210
|
+
height,
|
|
211
|
+
fontSize = 12,
|
|
212
|
+
fontFamily = "Arial",
|
|
213
|
+
fontStyle = "Normal",
|
|
214
|
+
alignment = "LEFT_ALIGN"
|
|
215
|
+
} = args;
|
|
216
|
+
|
|
217
|
+
const escapedMasterName = escapeJsxString(masterName);
|
|
218
|
+
const escapedContent = escapeJsxString(content);
|
|
219
|
+
const escapedFontFamily = escapeJsxString(fontFamily);
|
|
220
|
+
|
|
221
|
+
const script = [
|
|
222
|
+
'if (app.documents.length === 0) {',
|
|
223
|
+
' "No document open";',
|
|
224
|
+
'} else {',
|
|
225
|
+
' var doc = app.activeDocument;',
|
|
226
|
+
` var masterSpread = doc.masterSpreads.itemByName("${escapedMasterName}");`,
|
|
227
|
+
'',
|
|
228
|
+
' if (!masterSpread.isValid) {',
|
|
229
|
+
` "Master spread not found: ${escapedMasterName}";`,
|
|
230
|
+
' } else {',
|
|
231
|
+
' var page = masterSpread.pages[0];',
|
|
232
|
+
' var textFrame = page.textFrames.add();',
|
|
233
|
+
'',
|
|
234
|
+
` textFrame.geometricBounds = [${y}, ${x}, ${y + height}, ${x + width}];`,
|
|
235
|
+
` textFrame.contents = "${escapedContent}";`,
|
|
236
|
+
` try { textFrame.texts[0].pointSize = ${fontSize}; } catch (e) {}`,
|
|
237
|
+
` try { textFrame.texts[0].appliedFont = app.fonts.itemByName("${escapedFontFamily}"); } catch (e) {}`,
|
|
238
|
+
` try { textFrame.texts[0].fontStyle = "${fontStyle}"; } catch (e) {}`,
|
|
239
|
+
` try { textFrame.texts[0].justification = Justification.${alignment}; } catch (e) {}`,
|
|
240
|
+
'',
|
|
241
|
+
' "Master text frame created successfully";',
|
|
242
|
+
' }',
|
|
243
|
+
'}'
|
|
244
|
+
].join('\n');
|
|
245
|
+
|
|
246
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
247
|
+
return formatResponse(result, "Create Master Text Frame");
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
/**
|
|
251
|
+
* Create a rectangle on a master spread
|
|
252
|
+
*/
|
|
253
|
+
static async createMasterRectangle(args) {
|
|
254
|
+
const {
|
|
255
|
+
masterName,
|
|
256
|
+
x,
|
|
257
|
+
y,
|
|
258
|
+
width,
|
|
259
|
+
height,
|
|
260
|
+
fillColor = "None",
|
|
261
|
+
strokeColor = "Black",
|
|
262
|
+
strokeWeight = 1
|
|
263
|
+
} = args;
|
|
264
|
+
|
|
265
|
+
const escapedMasterName = escapeJsxString(masterName);
|
|
266
|
+
const escapedFillColor = escapeJsxString(fillColor);
|
|
267
|
+
const escapedStrokeColor = escapeJsxString(strokeColor);
|
|
268
|
+
|
|
269
|
+
const script = [
|
|
270
|
+
'if (app.documents.length === 0) {',
|
|
271
|
+
' "No document open";',
|
|
272
|
+
'} else {',
|
|
273
|
+
' var doc = app.activeDocument;',
|
|
274
|
+
` var masterSpread = doc.masterSpreads.itemByName("${escapedMasterName}");`,
|
|
275
|
+
'',
|
|
276
|
+
' if (!masterSpread.isValid) {',
|
|
277
|
+
` "Master spread not found: ${escapedMasterName}";`,
|
|
278
|
+
' } else {',
|
|
279
|
+
' var page = masterSpread.pages[0];',
|
|
280
|
+
' var rectangle = page.rectangles.add();',
|
|
281
|
+
'',
|
|
282
|
+
` rectangle.geometricBounds = [${y}, ${x}, ${y + height}, ${x + width}];`,
|
|
283
|
+
` rectangle.fillColor = doc.colors.itemByName("${escapedFillColor}");`,
|
|
284
|
+
` rectangle.strokeColor = doc.colors.itemByName("${escapedStrokeColor}");`,
|
|
285
|
+
` rectangle.strokeWeight = ${strokeWeight};`,
|
|
286
|
+
'',
|
|
287
|
+
' "Master rectangle created successfully";',
|
|
288
|
+
' }',
|
|
289
|
+
'}'
|
|
290
|
+
].join('\n');
|
|
291
|
+
|
|
292
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
293
|
+
return formatResponse(result, "Create Master Rectangle");
|
|
294
|
+
}
|
|
295
|
+
|
|
296
|
+
/**
|
|
297
|
+
* Create guides on a master spread
|
|
298
|
+
*/
|
|
299
|
+
static async createMasterGuides(args) {
|
|
300
|
+
const {
|
|
301
|
+
masterName,
|
|
302
|
+
numberOfRows = 0,
|
|
303
|
+
numberOfColumns = 0,
|
|
304
|
+
rowGutter,
|
|
305
|
+
columnGutter,
|
|
306
|
+
guideColor = '[0, 0, 255]',
|
|
307
|
+
fitMargins = false,
|
|
308
|
+
removeExisting = false
|
|
309
|
+
} = args;
|
|
310
|
+
|
|
311
|
+
const escapedMasterName = escapeJsxString(masterName);
|
|
312
|
+
|
|
313
|
+
const script = [
|
|
314
|
+
'if (app.documents.length === 0) {',
|
|
315
|
+
' "No document open";',
|
|
316
|
+
'} else {',
|
|
317
|
+
' var doc = app.activeDocument;',
|
|
318
|
+
` var masterSpread = doc.masterSpreads.itemByName("${escapedMasterName}");`,
|
|
319
|
+
'',
|
|
320
|
+
' if (!masterSpread.isValid) {',
|
|
321
|
+
` "Master spread not found: ${escapedMasterName}";`,
|
|
322
|
+
' } else {',
|
|
323
|
+
'',
|
|
324
|
+
` masterSpread.createGuides(${numberOfRows}, ${numberOfColumns}, "${rowGutter || ''}", "${columnGutter || ''}", ${guideColor}, ${fitMargins}, ${removeExisting});`,
|
|
325
|
+
'',
|
|
326
|
+
' "Master guides created successfully";',
|
|
327
|
+
' }',
|
|
328
|
+
'}'
|
|
329
|
+
].join('\n');
|
|
330
|
+
|
|
331
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
332
|
+
return formatResponse(result, "Create Master Guides");
|
|
333
|
+
}
|
|
334
|
+
|
|
335
|
+
/**
|
|
336
|
+
* Get master spread information
|
|
337
|
+
*/
|
|
338
|
+
static async getMasterSpreadInfo(args) {
|
|
339
|
+
const { masterIndex } = args;
|
|
340
|
+
|
|
341
|
+
const script = [
|
|
342
|
+
'if (app.documents.length === 0) {',
|
|
343
|
+
' "No document open";',
|
|
344
|
+
'} else {',
|
|
345
|
+
' var doc = app.activeDocument;',
|
|
346
|
+
` if (${masterIndex} >= doc.masterSpreads.length) {`,
|
|
347
|
+
' "Master spread index out of range";',
|
|
348
|
+
' } else {',
|
|
349
|
+
` var masterSpread = doc.masterSpreads[${masterIndex}];`,
|
|
350
|
+
' var info = "=== MASTER SPREAD INFO ===\\n";',
|
|
351
|
+
'',
|
|
352
|
+
' info += "Name: " + masterSpread.name + "\\n";',
|
|
353
|
+
' info += "Name Prefix: " + masterSpread.namePrefix + "\\n";',
|
|
354
|
+
' info += "Base Name: " + masterSpread.baseName + "\\n";',
|
|
355
|
+
' info += "Show Master Items: " + masterSpread.showMasterItems + "\\n";',
|
|
356
|
+
' info += "Index: " + masterSpread.index + "\\n";',
|
|
357
|
+
' info += "ID: " + masterSpread.id + "\\n";',
|
|
358
|
+
'',
|
|
359
|
+
' // Content counts',
|
|
360
|
+
' info += "\\n=== CONTENT COUNTS ===\\n";',
|
|
361
|
+
' info += "Pages: " + masterSpread.pages.length + "\\n";',
|
|
362
|
+
' info += "Text Frames: " + masterSpread.textFrames.length + "\\n";',
|
|
363
|
+
' info += "Rectangles: " + masterSpread.rectangles.length + "\\n";',
|
|
364
|
+
' info += "Ovals: " + masterSpread.ovals.length + "\\n";',
|
|
365
|
+
' info += "Polygons: " + masterSpread.polygons.length + "\\n";',
|
|
366
|
+
' info += "Groups: " + masterSpread.groups.length + "\\n";',
|
|
367
|
+
' info += "Guides: " + masterSpread.guides.length + "\\n";',
|
|
368
|
+
' info += "All Page Items: " + masterSpread.allPageItems.length + "\\n";',
|
|
369
|
+
'',
|
|
370
|
+
' info;',
|
|
371
|
+
' }',
|
|
372
|
+
'}'
|
|
373
|
+
].join('\n');
|
|
374
|
+
|
|
375
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
376
|
+
return formatResponse(result, "Get Master Spread Info");
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
/**
|
|
380
|
+
* Detach master items on a page (override to page)
|
|
381
|
+
*/
|
|
382
|
+
static async detachMasterItems(args) {
|
|
383
|
+
const { pageIndex, itemIndex } = args;
|
|
384
|
+
const script = [
|
|
385
|
+
'if (app.documents.length === 0) {',
|
|
386
|
+
' "No document open";',
|
|
387
|
+
'} else {',
|
|
388
|
+
' var doc = app.activeDocument;',
|
|
389
|
+
` if (${pageIndex} >= doc.pages.length) {`,
|
|
390
|
+
' "Page index out of range";',
|
|
391
|
+
' } else {',
|
|
392
|
+
` var page = doc.pages[${pageIndex}];`,
|
|
393
|
+
' var master = page.appliedMaster;',
|
|
394
|
+
' if (!master || !master.isValid) {',
|
|
395
|
+
' "No master applied to page";',
|
|
396
|
+
' } else {',
|
|
397
|
+
' var count = 0;',
|
|
398
|
+
` if (${itemIndex} !== undefined) {`,
|
|
399
|
+
` if (${itemIndex} >= master.allPageItems.length) {`,
|
|
400
|
+
' "Master item index out of range";',
|
|
401
|
+
' } else {',
|
|
402
|
+
` try { master.allPageItems[${itemIndex}].override(page); count=1; } catch (e) { "Error overriding: " + e.message; }`,
|
|
403
|
+
' "Detached 1 master item";',
|
|
404
|
+
' }',
|
|
405
|
+
' } else {',
|
|
406
|
+
' for (var i=0;i<master.allPageItems.length;i++){',
|
|
407
|
+
' try { master.allPageItems[i].override(page); count++; } catch(e) {}',
|
|
408
|
+
' }',
|
|
409
|
+
' "Detached " + count + " master items";',
|
|
410
|
+
' }',
|
|
411
|
+
' }',
|
|
412
|
+
' }',
|
|
413
|
+
'}'
|
|
414
|
+
].join('\n');
|
|
415
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
416
|
+
return formatResponse(result, 'Detach Master Items');
|
|
417
|
+
}
|
|
418
|
+
|
|
419
|
+
/**
|
|
420
|
+
* Remove override from a master page item on a page
|
|
421
|
+
* Implementation: deletes the overridden instance so master item shows again
|
|
422
|
+
*/
|
|
423
|
+
static async removeMasterOverride(args) {
|
|
424
|
+
const { pageIndex, itemIndex } = args;
|
|
425
|
+
const script = [
|
|
426
|
+
'if (app.documents.length === 0) {',
|
|
427
|
+
' "No document open";',
|
|
428
|
+
'} else {',
|
|
429
|
+
' var doc = app.activeDocument;',
|
|
430
|
+
` if (${pageIndex} >= doc.pages.length) {`,
|
|
431
|
+
' "Page index out of range";',
|
|
432
|
+
' } else {',
|
|
433
|
+
` var page = doc.pages[${pageIndex}];`,
|
|
434
|
+
` if (${itemIndex} >= page.pageItems.length) {`,
|
|
435
|
+
' "Page item index out of range";',
|
|
436
|
+
' } else {',
|
|
437
|
+
` var it = page.pageItems[${itemIndex}];`,
|
|
438
|
+
' try {',
|
|
439
|
+
' it.remove();',
|
|
440
|
+
' "Master override removed (item deleted)";',
|
|
441
|
+
' } catch (e) {',
|
|
442
|
+
' "Error removing override: " + e.message;',
|
|
443
|
+
' }',
|
|
444
|
+
' }',
|
|
445
|
+
' }',
|
|
446
|
+
'}'
|
|
447
|
+
].join('\n');
|
|
448
|
+
const result = await ScriptExecutor.executeInDesignScript(script);
|
|
449
|
+
return formatResponse(result, 'Remove Master Override');
|
|
450
|
+
}
|
|
451
|
+
}
|