Skip to content

Commit

Permalink
If artboards have the same width it won’t group them into an artboard…
Browse files Browse the repository at this point in the history
… set if they have the same prefix

Wasn’t removing external links if you set another attribute
  • Loading branch information
markhorgan committed Mar 11, 2017
1 parent 45ff310 commit e1d3327
Show file tree
Hide file tree
Showing 6 changed files with 67 additions and 72 deletions.
20 changes: 4 additions & 16 deletions Click-Thru Prototype.sketchplugin/Contents/Sketch/artboard_link.js
Original file line number Diff line number Diff line change
Expand Up @@ -28,31 +28,19 @@ var getBaseName = function(artboard, artboards, artboardNames) {
return baseName
}
}


}

// includeNone: optional, default: true
var getArtboardNamesInPage = function(page, includeNone) {
if (includeNone == null) {
includeNone = true
}
var artboards = page.artboards()
var artboardNames = new Array()
artboards.forEach(function(artboard) {
var retVals = Utils.getArtboardNameParts(artboard, artboards)
if (retVals != null) {
// part of a set
var baseName = retVals[0]
if (!artboardNames.includes(baseName)) {
artboardNames.push(baseName)
}
} else {
// not part of a set
artboardNames.push(artboard.name())
}
var artboardSets = Utils.getArtboardSets(page.artboards())
artboardSets.forEach(function(artboardSet){
artboardNames.push(artboardSet[0].baseName)
})
artboardNames.sort()
artboardNames.sort()
if (includeNone) {
artboardNames.unshift("None")
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,8 @@ var Constants = {
JS_DIRECTORY: "js/"
}

Constants.KEYS = [Constants.ARTBOARD_LINK, Constants.IS_MOBILE_MENU_BUTTON, Constants.IS_MOBILE_MENU, Constants.DIALOG_TYPE,
Constants.DIALOG_TEXT]
Constants.KEYS = [Constants.ARTBOARD_LINK, Constants.EXTERNAL_LINK, Constants.OPEN_LINK_IN_NEW_WINDOW,
Constants.IS_MOBILE_MENU_BUTTON, Constants.IS_MOBILE_MENU, Constants.DIALOG_TYPE, Constants.DIALOG_TEXT]

var ResizingType = {
STRETCH: 0,
Expand Down
44 changes: 10 additions & 34 deletions Click-Thru Prototype.sketchplugin/Contents/Sketch/exporter.js
Original file line number Diff line number Diff line change
Expand Up @@ -429,7 +429,6 @@ Exporter.prototype.exportImage = function(layer, scale, imagePath) {
}

Exporter.prototype.exportImages = function(artboardSet) {
var doc = this.context.document
var imagesPath = this.outputPath + "/" + Constants.IMAGES_DIRECTORY
artboardSet.forEach(function(artboardData){
var mobileMenuLayer = artboardData.mobileMenuLayer
Expand Down Expand Up @@ -457,39 +456,16 @@ Exporter.prototype.exportImages = function(artboardSet) {
}

Exporter.prototype.getArtboardSets = function(){
var artboardSets = new Array()
var artboardSetsByBaseName = new Object()

// group into artboard sets
var artboards = this.page.artboards()
artboards.forEach(function(artboard){
var baseName, suffix, artboardSet
var retVals = Utils.getArtboardNameParts(artboard, artboards)
if (retVals != null) {
// part of a set
baseName = retVals[0]
suffix = retVals[1]
if (suffix.length == 0) {
suffix = null
}
artboardSet = artboardSetsByBaseName[baseName]
if (artboardSet == null) {
artboardSet = new Array()
artboardSets.push(artboardSet)
artboardSetsByBaseName[baseName] = artboardSet
}
} else {
// not part of a set
baseName = artboard.name()
artboardSet = new Array()
artboardSets.push(artboardSet)
}
artboardSet.push({artboard: artboard, baseName: baseName, suffix: suffix, mobileMenuLayer: this.findLayer(Constants.IS_MOBILE_MENU, artboard)})
}, this)
var artboardSets = Utils.getArtboardSets(this.page.artboards())

// sort by width
for (var i = 0; i < artboardSets.length; i++) {
artboardSets[i].sort(function(a, b){
artboardSets.forEach(function(artboardSet){
// set mobile menu layer
artboardSet.forEach(function(artboardData) {
artboardData.mobileMenuLayer = this.findLayer(Constants.IS_MOBILE_MENU, artboardData.artboard)
}, this)

// sort artboards within a set by width
artboardSet.sort(function(a, b){
if (a.artboard.frame().width() < b.artboard.frame().width()) {
return 1
} else if (a.artboard.frame().width() > b.artboard.frame().width()) {
Expand All @@ -498,7 +474,7 @@ Exporter.prototype.getArtboardSets = function(){
return 0
}
})
}
}, this)

/*artboardSets.forEach(function(artboardSet){
artboardSet.forEach(function(artboardData){
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
"author" : "Mark Horgan",
"identifier" : "com.markhorgan.sketch.clickThruPrototype",
"compatibleVersion": 3,
"version" : "1.0.1",
"version" : "1.0.2",
"commands" : [
{
"script" : "artboard_link.js",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

var buildAlertWindow = function(title, informationText, isOn) {
var alertWindow = COSAlertWindow.new()
alertWindow.addButtonWithTitle("Add")
alertWindow.addButtonWithTitle("Set")
alertWindow.addButtonWithTitle("Remove")
alertWindow.addButtonWithTitle("Cancel")
alertWindow.setMessageText(title)
Expand Down
67 changes: 49 additions & 18 deletions Click-Thru Prototype.sketchplugin/Contents/Sketch/utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -125,45 +125,76 @@ Utils.tab = function(count, tabSize) {
return Utils.repeatStr(count * tabSize)
}

Utils.getArtboardNameParts = function(artboard, artboards) {
for (var i = 0; i < artboards.length; i++) {
var itArtboard = artboards[i]
var retVals = Utils._getArtboardNameParts(artboard.name(), itArtboard.name())
Utils.getArtboardSets = function(artboards) {
var artboardSets = new Array()
var artboardSetsByBaseName = new Object()

artboards.forEach(function(artboard){
var retVals, suffix = null, baseName

for (var i = 0; i < artboards.length; i++) {
var otherArtboard = artboards[i]
retVals = Utils.getArtboardNameParts(artboard, otherArtboard)
if (retVals != null) {
break
}
}

if (retVals != null) {
return retVals
// part of a set
baseName = retVals[0]
suffix = retVals[1]
if (suffix.length == 0) {
suffix = null
}
artboardSet = artboardSetsByBaseName[baseName]
if (artboardSet == null) {
artboardSet = new Array()
artboardSets.push(artboardSet)
artboardSetsByBaseName[baseName] = artboardSet
}
} else {
// not part of a set
baseName = artboard.name()
artboardSet = new Array()
artboardSets.push(artboardSet)
}
}
return null
artboardSet.push({artboard: artboard, baseName: baseName, suffix: suffix})
})
return artboardSets
}

Utils._getArtboardNameParts = function(str1, str2) {
str1 = String(str1)
str2 = String(str2)
if (str1 == str2) {
Utils.getArtboardNameParts = function(artboard1, artboard2) {
if (artboard1.frame().width() == artboard2.frame().width()) {
return
}
var name1 = String(artboard1.name())
var name2 = String(artboard2.name())
if (name1 == name2) {
return
}
var i = 0
// find where they diverge
while (i <= str1.length && i <= str2.length && str1.substring(0, i) == str2.substring(0, i)) {
while (i <= name1.length && i <= name2.length && name1.substring(0, i) == name2.substring(0, i)) {
i++
}
if (i > 0) {
i--
}
if (i < str1.length && i < str2.length) {
if (i < name1.length && i < name2.length) {
// go back to the separator
var seperatorRegex = /[\s-_]/
while (i > 1 && seperatorRegex.test(str1.substr(i - 1, 1))) {
while (i > 1 && seperatorRegex.test(name1.substr(i - 1, 1))) {
i--
}
}
var baseName = str1.substr(0, i)
var suffix = str1.substr(i)
var baseName = name1.substr(0, i)
var suffix = name1.substr(i)
if (i > 0 && (suffix.length == 0 || /^[\s-_]+.[^\s-_]+/.test(suffix))) {
//log("str1: " + str1 + ", str2: " + str2 + ", baseName:" + baseName + ":, suffix:" + suffix.replace(/^[\s-_]+/, "").trim() + ":")
//log("name1: " + name1 + ", name2: " + name2 + ", baseName:" + baseName + ":, suffix:" + suffix.replace(/^[\s-_]+/, "").trim() + ":")
return [baseName, suffix.replace(/^[\s-_]+/, "").trim()]
} /* else {
log("str1: " + str1 + ", str2: " + str2 + ", baseName:" + baseName + ":, suffix:" + suffix + ": - rejected")
log("name1: " + name1 + ", name2: " + name2 + ", baseName:" + baseName + ":, suffix:" + suffix + ": - rejected")
} */
}

Expand Down

0 comments on commit e1d3327

Please sign in to comment.