forked from algorithm-visualizer/algorithm-visualizer
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathutil.js
50 lines (42 loc) · 1.35 KB
/
util.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
const classes = (...arr) => arr.filter(v => v).join(' ');
const distance = (a, b) => {
const dx = a.x - b.x;
const dy = a.y - b.y;
return Math.sqrt(dx * dx + dy * dy);
};
const extension = fileName => /(?:\.([^.]+))?$/.exec(fileName)[1];
const refineGist = gist => {
const gistId = gist.id;
const title = gist.description;
delete gist.files['algorithm-visualizer'];
const { login, avatar_url } = gist.owner;
const files = Object.values(gist.files).map(file => ({
name: file.filename,
content: file.content,
contributors: [{ login, avatar_url }],
}));
return { login, gistId, title, files };
};
const createFile = (name, content, contributors) => ({ name, content, contributors });
const createProjectFile = (name, content) => createFile(name, content, [{
login: 'algorithm-visualizer',
avatar_url: 'https://github.com/algorithm-visualizer.png',
}]);
const createUserFile = (name, content) => createFile(name, content, undefined);
const isSaved = ({ titles, files, lastTitles, lastFiles }) => {
const serialize = (titles, files) => JSON.stringify({
titles,
files: files.map(({ name, content }) => ({ name, content })),
});
return serialize(titles, files) === serialize(lastTitles, lastFiles);
};
export {
classes,
distance,
extension,
refineGist,
createFile,
createProjectFile,
createUserFile,
isSaved,
};