Skip to main content

var sketch

var sketch = require('sketch');

var ss = context.document.documentData().layerTextStyles();
var sty = ss.objects();
var artboard = context.selection.firstObject();
artboard.removeAllLayers();

var bg = artboard.backgroundColor();
bg.setRed(0.83);
bg.setGreen(0.90);
bg.setBlue(1.0);
artboard.hasBackgroundColor = true;

var ts = context.document.documentData().layerTextStyles();
var styles = ts.objects();

var sortedStyles = [];

for(var i = 0 ; i < styles.length ; ++i){
  sortedStyles.push({
    name: styles[i].name(),
    style: styles[i],
    textStyle: styles[i].style().textStyle()
  });
}

sortedStyles.sort(function(a,b){
  if(a.name < b.name){
    return -1;
  }
  if(a.name > b.name){
    return 1;
  }
  return 0;
});

var previousSection = null;

var offset = 30;
var maxWidth = 60;

for(var i = 0 ; i < sortedStyles.length ; ++i){
  var sharedStyle = sortedStyles[i];

  var tempLayer = MSTextLayer.alloc().init();
  tempLayer.name = sharedStyle.name;
  tempLayer.stringValue = sharedStyle.name;
  artboard.addLayer_(tempLayer);

  var apiTempLayer = sketch.fromNative(tempLayer);
  var apiSharedStyle = sketch.fromNative(sharedStyle.style);

  apiTempLayer.style.syncWithSharedStyle(apiSharedStyle);

  var sections = sharedStyle.name.split('/');
  var section = sections[0] + sections[1] ? ('/' + sections[1]) : '';
  if(previousSection && previousSection !== section){
    offset += 30;
  }

  tempLayer.frame().setY(offset);
  tempLayer.frame().setX(30);

  offset += tempLayer.frame().height();
  maxWidth = maxWidth < tempLayer.frame().width() + 60 ? tempLayer.frame().width() + 60 : maxWidth;

  if(offset > artboard.frame().height()){
    artboard.frame().setHeight(offset);
  }

  if(maxWidth > artboard.frame().width()){
    artboard.frame().setWidth(maxWidth);
  }

  previousSection = section;
}

artboard.frame().setHeight(offset + 30);