-
Notifications
You must be signed in to change notification settings - Fork 22
/
Create Dropdown From Text.jsx
112 lines (94 loc) · 2.75 KB
/
Create Dropdown From Text.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
/**
* Provides a panel to quickly create a populated dropdown effect on a layer
*
* @author Zack Lovatt <[email protected]>
* @version 0.1.0
*/
(function createDropdownFromText(thisObj) {
if (parseFloat(app.version) < 17.0) {
alert("This script requires AE 17.0 or newer to run!");
return;
}
var ui = _createUI(thisObj);
ui.show();
/**
* Builds UI
*
* @returns {Window | Panel} Created window
*/
function _createUI(thisObj) {
var win =
thisObj instanceof Panel
? thisObj
: new Window("palette", "Create Dropdown from Text", undefined, {
resizeable: true
});
win.orientation = "column";
win.margins = 5;
win.spacing = 5;
var pnlText = win.add("panel");
pnlText.preferredSize.width = 300;
pnlText.alignChildren = "fill";
pnlText.add("statictext", undefined, "Enter items below, one line per item.");
pnlText.add("statictext", undefined, "For a separator, use: (-");
var etInput = pnlText.add(
"edittext",
undefined,
["Enter", "Items", "Here"].join("\n"),
{ multiline: true }
);
var btnCreateDropdown = win.add(
"button",
undefined,
"Create Dropdown From Text"
);
btnCreateDropdown.onClick = function () {
// Trim the input
var input = etInput.text.replace(/^\s+|\s+$/g, "");
// Break it into lines
var inputSplit = input.replace(/\n\r|\n|\r/gm, "||||").split("||||");
// Check for empty text or empty split
if (input == "" || inputSplit.length == 0) {
alert("Enter some text!");
return;
}
// Validate vs AE rules
if (input.indexOf("|") > -1) {
alert("Text can't contain pipe symbol ('|')!");
return;
}
_createDropdown(inputSplit);
};
return win;
}
/**
* Creates a dropdown controller on the given layer with provided text
*
* @param {string[]} text Multiline text to create with
*/
function _createDropdown(text) {
var comp = app.project.activeItem;
if (!(comp && comp instanceof CompItem)) {
alert("Open a comp!", "Create Dropdown from Text");
return;
}
var layer = comp.selectedLayers[0];
if (!(layer && layer instanceof AVLayer)) {
alert("Select a layer!");
return;
}
app.beginUndoGroup("Create Dropdown from Text");
try {
// Create the dropdown effect & name it
var dropdownEffect = layer.effect.addProperty("ADBE Dropdown Control");
var updatedDropdown = dropdownEffect
.property(1)
.setPropertyParameters(text);
updatedDropdown.propertyGroup(1).name = "Created Dropdown";
} catch (e) {
alert(e, "Create Dropdown from Text");
} finally {
app.endUndoGroup();
}
}
})(this);