instance.detachInstance() turns an instance into a frame that keeps its content, as in Figma, from scripts run through eval. It reuses the graph's shared detach implementation, asserts editability like the proxy's other mutations, and joins the instance surface check against @figma/plugin-typings.
3.6 KiB
| title | description |
|---|---|
| Skrypty | Wykonywanie JavaScript przez API zgodne z Figma Plugin API do wyszukiwania, masowych zmian i tworzenia projektu. |
Skrypty
openpencil eval wykonuje JavaScript dla dokumentu OpenPencil i udostępnia globalny obiekt figma zgodny z Figma Plugin API. Polecenie nadaje się do zmian zbiorczych, sprawdzania dokumentów, przygotowywania danych testowych i automatyzacji bez interfejsu edytora.
Pierwsze wywołanie
openpencil eval design.fig -c "return figma.currentPage.children.length"
Opcja -c przyjmuje JavaScript. Jeśli kod nie zaczyna się od return, OpenPencil umieszcza go w funkcji asynchronicznej i zwraca jej wynik, jeśli istnieje.
Wyszukiwanie obiektów
openpencil eval design.fig -c "
return figma.currentPage
.findAll((node) => node.type === 'FRAME' && node.name.includes('Button'))
.map((button) => ({ id: button.id, name: button.name }))
"
Zmiana i zapis
--write albo -w zapisuje zmiany w pliku wejściowym. --output albo -o tworzy nowy plik.
Skrypt ze standardowego wejścia
cat transform.js | openpencil eval design.fig --stdin --write
Otwarta aplikacja
Nie podawaj pliku, aby wykonać skrypt dla bieżącego dokumentu w aplikacji komputerowej.
Wyjście
Po przekierowaniu wyjścia domyślnie używany jest JSON. Opcja --json włącza go jawnie, a --quiet wyłącza wyjście.
Dostępne API
API jest celowo zbliżone do Figma Plugin API, ale pracuje z SceneGraph i formatami plików OpenPencil.
Dokument i strony
figma.rootfigma.currentPagefigma.currentPage.selectionfigma.getNodeById(id)figma.createPage()
Tworzenie obiektów
figma.createFrame()figma.createRectangle()figma.createEllipse()figma.createText()figma.createLine()figma.createPolygon()figma.createStar()figma.createVector()figma.createComponent()figma.createSection()
Drzewo
node.childrennode.parentnode.appendChild(child)node.insertChild(index, child)node.clone()node.remove()node.findAll(callback?)node.findOne(callback)figma.group(nodes, parent)figma.ungroup(node)
Komponenty i zmienne
Nazwy metod, takie jak component.createInstance(), figma.getLocalVariables() i figma.bindVariable(), pozostają zgodne z Figma Plugin API.
Właściwości
Najczęściej używane właściwości można odczytywać i zapisywać przez pośrednika:
- geometria:
x,y,width,height,rotation,resize(width, height); - wygląd:
fills,strokes,effects,opacity,visible,locked,blendMode,clipsContent; - tekst:
characters,fontSize,fontName,fontWeight, wyrównanie, interlinia, odstęp między znakami i funkcje zakresów stylów; - automatyczny układ:
layoutMode,primaryAxisAlignItems,counterAxisAlignItems,itemSpacing, wypełnienie, rozmiary i położenie; - obwiednia:
strokeWeight,strokeAlign,dashPattern.
Narzędzia pomocnicze
figma.mixedfigma.createImage(data)figma.loadFontAsync(fontName)niczego nie wykonuje, ponieważ OpenPencil nie blokuje zmiany tekstu do czasu załadowania czcionki przez wtyczkęfigma.listAvailableFontsAsync()zwraca dostępne czcionki systemowefigma.notify(message)zapisuje ostrzeżenie w trybie bez interfejsufigma.viewport
Brak pełnej zgodności z Figmą
Nie są jeszcze dostępne między innymi node.exportAsync(), node.setBoundVariable(), figma.combineAsVariants() i API stylów Figmy.
Zamiast nich używaj poleceń eksportu CLI, narzędzi głównego pakietu albo bezpośrednich funkcji pomocniczych SceneGraph.