mirror of
https://github.com/dilllxd/gitfolio.git
synced 2024-08-14 22:28:09 +00:00
217 lines
11 KiB
JavaScript
217 lines
11 KiB
JavaScript
const fs = require("fs");
|
|
const emoji = require("github-emoji");
|
|
const jsdom = require("jsdom").JSDOM,
|
|
options = {
|
|
resources: "usable"
|
|
};
|
|
const { getConfig, outDir } = require("./utils");
|
|
const { getRepos, getUser } = require("./api");
|
|
|
|
function convertToEmoji(text) {
|
|
if (text == null) return;
|
|
text = text.toString();
|
|
var pattern = /(?<=:\s*).*?(?=\s*:)/gs;
|
|
if (text.match(pattern) != null) {
|
|
var str = text.match(pattern);
|
|
str = str.filter(function(arr) {
|
|
return /\S/.test(arr);
|
|
});
|
|
for (i = 0; i < str.length; i++) {
|
|
if (emoji.URLS[str[i]] != undefined) {
|
|
text = text.replace(
|
|
`:${str[i]}:`,
|
|
`<img src="${emoji.URLS[str[i]]}" class="emoji">`
|
|
);
|
|
}
|
|
}
|
|
return text;
|
|
} else {
|
|
return text;
|
|
}
|
|
}
|
|
|
|
module.exports.updateHTML = (username, opts) => {
|
|
const {
|
|
includeFork,
|
|
codepen,
|
|
dev,
|
|
dribbble,
|
|
email,
|
|
facebook,
|
|
instagram,
|
|
keybase,
|
|
reddit,
|
|
telegram,
|
|
twitter
|
|
} = opts;
|
|
//add data to assets/index.html
|
|
jsdom
|
|
.fromFile(`${__dirname}/assets/index.html`, options)
|
|
.then(function(dom) {
|
|
let window = dom.window,
|
|
document = window.document;
|
|
(async () => {
|
|
try {
|
|
console.log("Building HTML/CSS...");
|
|
const repos = await getRepos(username, opts);
|
|
|
|
for (var i = 0; i < repos.length; i++) {
|
|
let element;
|
|
if (repos[i].fork == false) {
|
|
element = document.getElementById("work_section");
|
|
} else if (includeFork == true) {
|
|
document.getElementById("forks").style.display = "block";
|
|
element = document.getElementById("forks_section");
|
|
} else {
|
|
continue;
|
|
}
|
|
element.innerHTML += `
|
|
<a href="${repos[i].html_url}" target="_blank">
|
|
<section>
|
|
<div class="section_title">${repos[i].name}</div>
|
|
<div class="about_section">
|
|
<span style="display:${
|
|
repos[i].description == undefined
|
|
? "none"
|
|
: "block"
|
|
};">${convertToEmoji(repos[i].description)}</span>
|
|
</div>
|
|
<div class="bottom_section">
|
|
<span style="display:${
|
|
repos[i].language == null
|
|
? "none"
|
|
: "inline-block"
|
|
};"><i class="mdi mdi-code-tags"></i> ${
|
|
repos[i].language
|
|
}</span>
|
|
<span><i class="mdi mdi-star"></i> ${
|
|
repos[i].stargazers_count
|
|
}</span>
|
|
<span><i class="mdi mdi-source-branch"></i> ${
|
|
repos[i].forks_count
|
|
}</span>
|
|
</div>
|
|
</section>
|
|
</a>`;
|
|
}
|
|
const user = await getUser(username);
|
|
document.title = user.login;
|
|
var icon = document.createElement("link");
|
|
icon.setAttribute("rel", "icon");
|
|
icon.setAttribute("href", user.avatar_url);
|
|
icon.setAttribute("type", "image/png");
|
|
|
|
document.getElementsByTagName("head")[0].appendChild(icon);
|
|
document.getElementsByTagName("head")[0].innerHTML += `
|
|
<meta name="description" content="${user.bio}" />
|
|
<meta property="og:image" content="${user.avatar_url}" />
|
|
<meta property="og:type" content="profile" />
|
|
<meta property="og:title" content="${user.login}" />
|
|
<meta property="og:url" content="${user.html_url}" />
|
|
<meta property="og:description" content="${user.bio}" />
|
|
<meta property="profile:username" content="${user.login}" />
|
|
<meta name="twitter:image:src" content="${user.avatar_url}" />
|
|
<meta name="twitter:card" content="summary" />
|
|
<meta name="twitter:title" content="${user.login}" />
|
|
<meta name="twitter:description" content="${user.bio}" />`;
|
|
document.getElementById(
|
|
"username"
|
|
).innerHTML = `<span id="text" style="display:${
|
|
user.name == null || !user.name ? "none" : "block"
|
|
};"></span><div class='console-underscore' id='console'>_</div>`;
|
|
document.getElementById("userbio").innerHTML = convertToEmoji(
|
|
user.bio
|
|
);
|
|
document.getElementById("userbio").style.display =
|
|
user.bio == null || !user.bio ? "none" : "block";
|
|
document.getElementById("about").innerHTML = `
|
|
<span style="display:${
|
|
user.company == null || !user.company ? "none" : "block"
|
|
};"><i class="mdi-face"></i> ${user.company}</span>
|
|
<span style="display:${
|
|
user.email == null || !user.email ? "none" : "block"
|
|
};"><i class="mdi mdi-email"></i> ${user.email}</span>
|
|
<span style="display:block;"><a href="${
|
|
user.html_url
|
|
}"><i class="mdi mdi-github-circle"></i> @${
|
|
user.login
|
|
}</a>
|
|
</span>
|
|
<span style="display:${
|
|
user.location == null || !user.location ? "none" : "block"
|
|
};"><i class="mdi mdi-map-marker"></i> ${
|
|
user.location
|
|
}</span>
|
|
<span style="display:${
|
|
user.hireable == false || !user.hireable ? "none" : "block"
|
|
};"><i class="mdi mdi-account-tie"></i> Available for hire</span>
|
|
<div class="socials">
|
|
<span style="display:${
|
|
codepen == null ? "none !important" : "block"
|
|
};"><a href="https://codepen.io/${codepen}" target="_blank" class="socials"><i class="mdi mdi-codepen"></i></a></span>
|
|
<span style="display:${
|
|
dev == null ? "none !important" : "block"
|
|
};"><a href="https://dev.to/${dev}" target="_blank" class="socials"><i class="mdi mdi-dev-to"></i></a></span>
|
|
<span style="display:${
|
|
dribbble == null ? "none !important" : "block"
|
|
};"><a href="https://www.dribbble.com/${dribbble}" target="_blank" class="socials"><i class="mdi mdi-dribbble"></i></a></span>
|
|
<span style="display:${
|
|
email == null ? "none !important" : "block"
|
|
};"><a href="mailto:${email}" target="_blank" class="socials"><i class="mdi mdi-email"></i></a></span>
|
|
<span style="display:${
|
|
facebook == null ? "none !important" : "block"
|
|
};"><a href="https://facebook.com/${facebook}" target="_blank" class="socials"><i class="mdi mdi-facebook-box"></i></a></span>
|
|
<span style="display:${
|
|
instagram == null ? "none !important" : "block"
|
|
};"><a href="https://www.instagram.com/${instagram}" target="_blank" class="socials"><i class="mdi mdi-instagram"></i></a></span>
|
|
<span style="display:${
|
|
keybase == null ? "none !important" : "block"
|
|
};"><a href="https://keybase.io/${keybase}" target="_blank" class="socials"><svg height="24" width="24" viewBox="0 0 448 512">
|
|
<path
|
|
fill="currentColor"
|
|
d="M286.17 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18zm111.92-147.6c-9.5-14.62-39.37-52.45-87.26-73.71q-9.1-4.06-18.38-7.27a78.43 78.43 0 0 0-47.88-104.13c-12.41-4.1-23.33-6-32.41-5.77-.6-2-1.89-11 9.4-35L198.66 32l-5.48 7.56c-8.69 12.06-16.92 23.55-24.34 34.89a51 51 0 0 0-8.29-1.25c-41.53-2.45-39-2.33-41.06-2.33-50.61 0-50.75 52.12-50.75 45.88l-2.36 36.68c-1.61 27 19.75 50.21 47.63 51.85l8.93.54a214 214 0 0 0-46.29 35.54C14 304.66 14 374 14 429.77v33.64l23.32-29.8a148.6 148.6 0 0 0 14.56 37.56c5.78 10.13 14.87 9.45 19.64 7.33 4.21-1.87 10-6.92 3.75-20.11a178.29 178.29 0 0 1-15.76-53.13l46.82-59.83-24.66 74.11c58.23-42.4 157.38-61.76 236.25-38.59 34.2 10.05 67.45.69 84.74-23.84.72-1 1.2-2.16 1.85-3.22a156.09 156.09 0 0 1 2.8 28.43c0 23.3-3.69 52.93-14.88 81.64-2.52 6.46 1.76 14.5 8.6 15.74 7.42 1.57 15.33-3.1 18.37-11.15C429 443 434 414 434 382.32c0-38.58-13-77.46-35.91-110.92zM142.37 128.58l-15.7-.93-1.39 21.79 13.13.78a93 93 0 0 0 .32 19.57l-22.38-1.34a12.28 12.28 0 0 1-11.76-12.79L107 119c1-12.17 13.87-11.27 13.26-11.32l29.11 1.73a144.35 144.35 0 0 0-7 19.17zm148.42 172.18a10.51 10.51 0 0 1-14.35-1.39l-9.68-11.49-34.42 27a8.09 8.09 0 0 1-11.13-1.08l-15.78-18.64a7.38 7.38 0 0 1 1.34-10.34l34.57-27.18-14.14-16.74-17.09 13.45a7.75 7.75 0 0 1-10.59-1s-3.72-4.42-3.8-4.53a7.38 7.38 0 0 1 1.37-10.34L214 225.19s-18.51-22-18.6-22.14a9.56 9.56 0 0 1 1.74-13.42 10.38 10.38 0 0 1 14.3 1.37l81.09 96.32a9.58 9.58 0 0 1-1.74 13.44zM187.44 419a18 18 0 1 0 18 18 18 18 0 0 0-18-18z"></path>
|
|
</svg>
|
|
</a>
|
|
</span>
|
|
<span style="display:${
|
|
reddit == null ? "none !important" : "block"
|
|
};"><a href="https://www.reddit.com/u/${reddit}" target="_blank" class="socials"><i class="mdi mdi-reddit"></i></a></span>
|
|
<span style="display:${
|
|
telegram == null ? "none !important" : "block"
|
|
};"><a href="https://t.me/${telegram}" target="_blank" class="socials"><i class="mdi mdi-telegram"></i></a></span>
|
|
<span style="display:${
|
|
twitter == null ? "none !important" : "block"
|
|
};"><a href="https://www.twitter.com/${twitter}" target="_blank" class="socials"><i class="mdi mdi-twitter"></i></a></span>
|
|
</div>
|
|
`;
|
|
//add data to config.json
|
|
const data = await getConfig();
|
|
data[0].username = user.login;
|
|
data[0].name = user.name;
|
|
data[0].userimg = user.avatar_url;
|
|
|
|
await fs.writeFile(
|
|
`${outDir}/config.json`,
|
|
JSON.stringify(data, null, " "),
|
|
function(err) {
|
|
if (err) throw err;
|
|
console.log("Config file updated.");
|
|
}
|
|
);
|
|
await fs.writeFile(
|
|
`${outDir}/index.html`,
|
|
"<!DOCTYPE html>" + window.document.documentElement.outerHTML,
|
|
function(error) {
|
|
if (error) throw error;
|
|
console.log(`Build Complete, Files can be Found @ ${outDir}\n`);
|
|
}
|
|
);
|
|
} catch (error) {
|
|
console.log(error);
|
|
}
|
|
})();
|
|
})
|
|
.catch(function(error) {
|
|
console.log(error);
|
|
});
|
|
};
|