-
Notifications
You must be signed in to change notification settings - Fork 6
/
faker.js
106 lines (92 loc) · 3.01 KB
/
faker.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
const sketch = require("sketch");
const { DataSupplier } = sketch;
const util = require("util");
const faker = require("faker");
import { showUserErrors } from "./utilities";
export function supplyFakerData(context, type) {
let dataKey = context.data.key;
const document = sketch.getSelectedDocument();
const items = util.toArray(context.data.items).map(sketch.fromNative);
let errors = [];
items.forEach((item, index) => {
let newLayerData = null;
let custom = false;
let layerError = false;
// In order to work in both layers and symbols we grab the original
// layer by getting the id from either the override or the layer
let layer;
let originalLayerName;
if (item.type === "Text") {
// item.id is for regular layers
layer = document.getLayerWithID(item.id);
originalLayerName = layer.name;
} else if (item.type === "DataOverride") {
// For overrides we can just grab the name directly
// Sketch already knows the layer it's going to apply to so we don't
// actually need the full layer
originalLayerName = item.override.affectedLayer.name;
}
let search = originalLayerName.split("|")[0];
let locale = originalLayerName.split("|")[1];
// Set up search string
let searchTerm = "{{" + search + "}}";
// Set up locale
if (locale) {
faker.locale = locale;
} else {
faker.locale = "en";
}
switch (type) {
case "fullName":
newLayerData = faker.name.findName();
break;
case "firstName":
newLayerData = faker.name.firstName();
break;
case "lastName":
newLayerData = faker.name.lastName();
break;
case "email":
newLayerData = faker.internet.email();
break;
case "phoneNumber":
newLayerData = faker.phone.phoneNumber();
break;
case "loremSentence":
newLayerData = faker.lorem.sentence();
break;
case "loremParagraph":
newLayerData = faker.lorem.paragraph();
break;
case "loremParagraphs":
newLayerData = faker.lorem.paragraphs();
break;
default:
// Set custom to true so we can override layer name
custom = true;
try {
newLayerData = faker.fake(searchTerm);
} catch (e) {
layerError = true;
errors.push({
type: "noData",
layer: {
name: layer && layer.name ? layer.name : originalLayerName
}
});
}
break;
}
// If this specific layer has an error, go to next layer
if (layerError) return;
// Replace the layer text
DataSupplier.supplyDataAtIndex(dataKey, newLayerData, index);
// The DataSupplier method above overwrites the layer name
// so we now put the original layer name back again so the next
// time the user runs our plugin, the name is correct
if (layer && custom === true) {
layer.name = originalLayerName;
}
});
if (errors) showUserErrors(errors);
}