Sketch 55 新功能
发布日期:2019 年 5 月 21 日 – 阅读发行说明
更改
URL 方案,用于将插件启动到特定命令
您可以使用新的 URL 方案来定位插件的特定命令
sketch://plugin/my.plugin.identifier/my.command.identifier
您也可以传入参数。请注意,这是第二个 URL 方案。第一个方案用于 打开特定文档,使用 sketch://path/to/file.sketch
。
当使用上述 URL 方案打开时,将触发 HandleURL
操作,其中包含一个包含三个键的操作上下文
url
触发此操作的 NSURL
。
path
一个包含 sketch://plugin
之后所有内容的字符串,例如 /my.plugin.identifier/my.command.identifier
。
query
一个包含 URL 查询的对象,例如对于 sketch://plugin/my.plugin.identifier/my.command.identifier?foo=bar&baz=qux
,query 将为
{
foo: 'bar',
baz: 'qux'
}
用法
您需要正确设置清单文件才能在 HandleURL
操作上触发函数
{
"identifier": "com.sketchapp.examples.log-message",
"compatibleVersion": 3,
"bundleVersion": 1,
"icon": "icon.png",
"commands": [
{
"name": "Log Message",
"identifier": "log-message",
"script": "./log-message.js",
"handlers": {
"actions": {
"HandleURL": "handleURL"
}
}
}
]
}
在 JavaScript 中,以以下方式实现操作处理程序,以便当用户导航到 url sketch://plugin/com.sketchapp.examples.log-message/log-message?foo=Hello%20World
时,应用程序中将出现一条包含文本“Hello World”的消息。
const sketch = require('sketch')
function handleURL(context) {
let query = context.actionContext.query
sketch.UI.message(query.foo)
}
请注意,在这种情况下,用户需要安装插件,并且已经打开了一个文档。您还可以为用户创建一个新文档,如下所示
const sketch = require('sketch')
const Document = sketch.Document
const currentDocument = sketch.getSelectedDocument()
function handleURL(context) {
let query = context.actionContext.query
if (currentDocument) {
sketch.UI.message(query.foo)
} else {
let document = new Document()
sketch.UI.message(query.foo)
}
}
完整的插件示例可以在 此处找到。
在 CurvePoint
上添加 isSelected
方法
如果用户当前正在编辑路径,您可以使用 curvePoint.isSelected()
方法检查曲线点是否被选中。
用法
如果用户正在选择形状的点,您可以使用以下方法检查它
shape.points[0].isSelected()
以下是如何在实践中使用它的示例。在您的 Sketch 文档中创建并选择一个矩形。
let sketch = require('sketch')
let document = sketch.getSelectedDocument()
let selection = document.selectedLayers.layers[0]
let isAnyPointSelected = false
let pointSelectionArray = []
selection.points.forEach(point => {
if (point.isSelected()) {
isAnyPointSelected = true
pointSelectionArray.push(true)
} else {
pointSelectionArray.push(false)
}
})
console.log(isAnyPointSelected)
// true
console.log(pointSelectionArray)
// [true, true, false, false]
getSelectedDocument()
以前在没有打开文档的情况下会抛出错误,现在改为返回 undefined
Babel 会将 [nativeDocument] = NSApplication.sharedApplication().orderedDocuments()
转换为一个适当的数组,但它不是,它是一个 NSArray
,因此它会抛出错误。
这是对之前 URL 示例的一个很好的补充。我们可以自信地检查当前是否已打开文档。
用法
let sketch = require('sketch')
let document = sketch.getSelectedDocument()
if (document) {
// has open document
}
通过弃用 Fill.fill
,改为使用 Fill.fillType
来提高一致性
这是为了与 Border.fileType
和其他类型匹配。
用法
设置填充与设置边框更加一致。
旧
const style = new Style({
fills: [{ color: '#1234', fill: Style.FillType.Color }],
})
新
const style = new Style({
fills: [{ color: '#123456', fillType: Style.FillType.Color }],
})
对包装对象的原型进行更好的日志记录
util.inspect
算法(控制台使用)中存在一个错误,它认为包装对象的原型是一个包装对象,并使用包装对象的代码路径。此问题已修复,以提供更好的日志输出。