Skip to content

Instantly share code, notes, and snippets.

@tankxu
Last active June 14, 2020 03:47
Show Gist options
  • Save tankxu/e58f11dbd3b0ac73e2fb86d2ca36eb2e to your computer and use it in GitHub Desktop.
Save tankxu/e58f11dbd3b0ac73e2fb86d2ca36eb2e to your computer and use it in GitHub Desktop.
Sketch Script
A list of sketch scripts
var ctx = null;
var sliceMaster = function(){}
sliceMaster.prototype = {
run: function() {
var theLayer;
//所选的图层合集
var loopLayer = ctx.selection.objectEnumerator();
//遍历图层
while (theLayer = loopLayer.nextObject()) {
this.handleSlice(theLayer);
}
},
handleSlice: function(layer) {
//新建一个 group 然后把 icon 移进去
var iconLayer = layer.layers()[0]
var group = MSLayerGroup.new();
group.setName('Icon');
group.moveToLayer_beforeLayer(layer, layer.firstLayer());
iconLayer.moveToLayer_beforeLayer(group, group.firstLayer());
//基于选择的图层创建切片
var slice = MSSliceLayer.sliceLayerFromLayer(layer);
slice.setName(layer.name().replace(/(.+\/)/, ""));
slice.makeOriginIntegral();
//移动切片到群组末端
slice.moveToLayer_beforeLayer(group, group.firstLayer());
//使导出切片去除背景,export group contents only
slice.exportOptions().setLayerOptions(2);
var sliceFormat = MSExportPreset.allExportPresets()[3].exportFormats()
slice.exportOptions().setExportFormats(sliceFormat);
ctx.document.reloadInspector();
//resize group
group.fixGeometryWithOptions(0);
//给 group 添加 mask
group.hasClippingMask = true;
}
}
var onRun = function(context) {
ctx = context;
new sliceMaster().run();
}
var document = require('sketch/dom').getSelectedDocument()
document.sharedLayerStyles.map((x, i) => {
changeStyleColor(x, "green-100", "#F2FFE0FF")
changeStyleColor(x, "green-200", "#DBFDB5FF")
changeStyleColor(x, "green-300", "#ADF269FF")
changeStyleColor(x, "green-400", "#7AD93AFF")
changeStyleColor(x, "green-500", "#4FBE0EFF")
changeStyleColor(x, "green-600", "#3EA00EFF")
changeStyleColor(x, "green-700", "#2E7D0CFF")
changeStyleColor(x, "green-800", "#205C0AFF")
})
function changeStyleColor(layerStyle, marryName, newColor) {
let styleName = layerStyle.name
let styleColor = layerStyle.style.fills[0].color
if (styleName.indexOf(marryName) != -1) {
console.log("Changing style:" + styleName)
console.log("Old color:" + styleColor)
layerStyle.style.fills[0].color = newColor
console.log("New color:" + layerStyle.style.fills[0].color)
layerStyle.sketchObject.resetReferencingInstances();
console.log("Instances layer style has been reset")
}
}
function resetInstancesStyle(layerStyle, marryName){
let styleName = layerStyle.name
if (styleName.indexOf(marryName) != -1) {
console.log("Find style:" + styleName)
layerStyle.sketchObject.resetReferencingInstances();
}
}
var sketch = require("sketch");
var selection = sketch.getSelectedDocument().selectedLayers.layers;
var n = 800
selection.forEach(function(layer) {
layer.text = "$color-blue-" + n
n = n - 100
});
var sketch = require("sketch");
var document = require('sketch/dom').getSelectedDocument()
document.sharedLayerStyles.map((x, i) => {
const styleName = x.name
if (styleName.indexOf("violet") != -1) {
console.log(styleName)
x.name = styleName.replace(/violet/, "purple")
console.log(document.sharedLayerStyles[i].name)
}
})
var sketch = require("sketch");
var selection = sketch.getSelectedDocument().selectedLayers.layers;
selection.forEach(function(layer) {
var colorLayer = layer.parent.layers[0].style.fills["0"].color;
layer.text = colorLayer.replace(/ff$/,"")
});
var sketch = require("sketch");
var document = require('sketch/dom').getSelectedDocument()
var selection = document.selectedLayers.layers;
selection.forEach(function(layer) {
var colorText = layer.layers[2].text;
colorName = colorText.replace(/\$/,"");
var colorLayer = layer.layers[1].layers[0];
document.sharedLayerStyles.push({
name: colorName,
style: colorLayer.style,
});
var newSharedLayerStyles = document.sharedLayerStyles.find(style => style.name == colorName)
colorLayer.sharedStyle = newSharedLayerStyles
});
var document = context.document;
var selection = context.selection;
var loopSelection = selection.objectEnumerator();
var layer;
while (layer = loopSelection.nextObject()) {
var layers = MSLayerArray.arrayWithLayers([layer]);
if (MSSymbolCreator.canCreateSymbolFromLayers(layers)) {
var symbolName = layer.parentGroup().name();
var symbolInstance = MSSymbolCreator.createSymbolFromLayers_withName_onSymbolsPage(layers, symbolName, true);
var symbolMaster = symbolInstance.symbolMaster();
symbolMaster
}
};
// copy from https://github.com/Ashung/Automate-Sketch
var sketch = require("sketch");
var colors = sketch.globalAssets.colors;
// show all colors
console.log(colors);
// use splice()to delete all colors, splice(x,n) can only delete the colors you want
colors.splice();
// add colors to palette
colors.push({ type: 'ColorAsset', name: 'color-black', color: '#000000ff' },
{ type: 'ColorAsset', name: 'color-white', color: '#ffffffff' });
var sketch = require("sketch");
var Style = require('sketch/dom').Style
var selection = sketch.getSelectedDocument().selectedLayers.layers;
selection.forEach(function(layer) {
var colors = ['#00B1D1','#0355B2','#0086D4','#0070C4','#00A3E5'];
var randomColor = colors[Math.floor(Math.random()*colors.length)];
layer.style.fills = [
{
color: randomColor,
fillType: Style.FillType.Color,
},
]
});
var sketch = require("sketch");
var selectedLayers = sketch.getSelectedDocument().selectedLayers.layers;
selectedLayers.forEach(function(layer) {
var resultName = layer.name.replace(/(.+\/)/, "")
layer.name = resultName;
});
var sketch = require("sketch");
var selectedLayers = sketch.getSelectedDocument().selectedLayers.layers;
selectedLayers.forEach(function(layer) {
var resultName = layer.name.replace(/\s+/g, "")
layer.name = resultName;
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment