123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230 |
- const { form, button, div, h2, p, section, textarea, label, input, br, img, a, select, option } = require("../server/node_modules/hyperaxe");
- const { template, i18n } = require('./main_views');
- const generateCVBox = (label, content, className) => {
- return div({ class: `cv-box ${className}` },
- h2(label),
- content
- );
- };
- const generateTags = (tags) => {
- return tags && tags.length
- ? div(
- tags.map(tag =>
- a({
- href: `/search?query=%23${encodeURIComponent(tag)}`,
- class: "tag-link",
- style: "margin-right:0.8em;margin-bottom:0.5em;"
- }, `#${tag}`)
- )
- )
- : null;
- };
- exports.createCVView = async (cv = {}, editMode = false) => {
- const title = editMode ? i18n.cvEditSectionTitle : i18n.cvCreateSectionTitle;
- return template(
- title,
- section(
- div({ class: "tags-header" },
- h2(title),
- p(i18n.cvDescription)
- ),
- div({ class: "cv-form" },
- form({
- method: "POST",
- action: editMode ? `/cv/update/${encodeURIComponent(cv.id)}` : "/cv/upload",
- enctype: "multipart/form-data"
- },
- generateCVBox(i18n.cvPersonal, [
- label(i18n.cvNameLabel), br(),
- input({ type: "text", name: "name", required: true, value: cv.name || "" }), br(),
- label(i18n.cvDescriptionLabel), br(),
- textarea({ name: "description", required: true }, cv.description || ""), br(),
- label(i18n.cvLanguagesLabel), br(),
- input({ type: "text", name: "languages", value: cv.languages || "" }), br(),
- label(i18n.cvPhotoLabel), br(),
- input({ type: "file", name: "image" }), br(), br(),
- label(i18n.cvPersonalExperiencesLabel), br(),
- textarea({ name: "personalExperiences", rows: 4 }, cv.personalExperiences || ""), br(),
- label(i18n.cvPersonalSkillsLabel), br(),
- input({ type: "text", name: "personalSkills", required: true, value: (cv.personalSkills || []).join(", ") }), br()
- ], "personal"),
- generateCVBox(i18n.cvOasis, [
- label(i18n.cvOasisExperiencesLabel), br(),
- textarea({ name: "oasisExperiences", rows: 4 }, cv.oasisExperiences || ""), br(),
- label(i18n.cvOasisSkillsLabel), br(),
- input({ type: "text", name: "oasisSkills", value: (cv.oasisSkills || []).join(", ") }), br()
- ], "oasis"),
- generateCVBox(i18n.cvEducational, [
- label(i18n.cvEducationExperiencesLabel), br(),
- textarea({ name: "educationExperiences", rows: 4 }, cv.educationExperiences || ""), br(),
- label(i18n.cvEducationalSkillsLabel), br(),
- input({ type: "text", name: "educationalSkills", value: (cv.educationalSkills || []).join(", ") }), br()
- ], "education"),
- generateCVBox(i18n.cvProfessional, [
- label(i18n.cvProfessionalExperiencesLabel), br(),
- textarea({ name: "professionalExperiences", rows: 4 }, cv.professionalExperiences || ""), br(),
- label(i18n.cvProfessionalSkillsLabel), br(),
- input({ type: "text", name: "professionalSkills", value: (cv.professionalSkills || []).join(", ") }), br()
- ], "professional"),
- generateCVBox(i18n.cvAvailability, [
- label(i18n.cvLocationLabel), br(),
- input({ type: "text", name: "location", required: true, value: cv.location || "UNKNOWN" }), br(),
- label(i18n.cvStatusLabel), br(),
- select({ name: "status", required: true },
- option({ value: "AVAILABLE", selected: cv.status === "AVAILABLE FOR COLLABORATION" }, "AVAILABLE FOR COLLABORATION"),
- option({ value: "UNAVAILABLE", selected: cv.status === "NOT CURRENTLY AVAILABLE" }, "NOT CURRENTLY AVAILABLE"),
- option({ value: "LOOKING FOR WORK", selected: !cv.status || cv.status === "LOOKING FOR WORK" }, "LOOKING FOR WORK")
- ), br(), br(),
- label(i18n.cvPreferencesLabel), br(),
- select({ name: "preferences", required: true },
- option({ value: "IN PERSON", selected: cv.preferences === "IN-PERSON ONLY" }, "IN-PERSON ONLY"),
- option({ value: "REMOTE WORKING", selected: !cv.preferences || cv.preferences === "REMOTE WORKING" }, "REMOTE-WORKING")
- ), br()
- ], "availability"),
- button({ type: "submit" }, editMode ? i18n.cvUpdateButton : i18n.cvCreateButton)
- )
- )
- )
- )
- };
- exports.cvView = async (cv) => {
- const title = i18n.cvTitle;
- if (!cv) {
- return template(
- title,
- section(
- div({ class: "tags-header" },
- h2(title),
- p(i18n.cvDescription)
- ),
- div({ class: "no-cv" },
- p(i18n.cvNoCV),
- form({ method: "GET", action: "/cv/create" },
- button({ type: "submit" }, i18n.cvCreateButton)
- )
- )
- )
- )
- }
- const hasPersonal = cv.contact || cv.name || cv.description || cv.photo || typeof cv.oasisContributor === "boolean" || (cv.personalSkills && cv.personalSkills.length);
- const hasPersonalExp = cv.personalExperiences;
- const hasOasis = cv.oasisExperiences || (cv.oasisSkills && cv.oasisSkills.length);
- const hasEducational = cv.educationExperiences || cv.languages || (cv.educationalSkills && cv.educationalSkills.length);
- const hasProfessional = cv.professionalExperiences || (cv.professionalSkills && cv.professionalSkills.length);
- const hasAvailability = cv.location || cv.status || cv.preferences;
- return template(
- title,
- section(
- div({ class: "tags-header" },
- h2(title),
- p(i18n.cvDescription)
- ),
- div({ class: "cv-section" },
- div({ class: "cv-item" }, ...[
- div({ class: "cv-actions" },
- form({ method: "GET", action: `/cv/edit/${encodeURIComponent(cv.id)}` },
- button({ type: "submit" }, i18n.cvEditButton)
- ),
- form({ method: "POST", action: `/cv/delete/${encodeURIComponent(cv.id)}` },
- button({ type: "submit" }, i18n.cvDeleteButton)
- )
- ),
- div({ class: "cv-meta" },
- p(`${i18n.cvCreatedAt}: ${new Date(cv.createdAt).toLocaleString()}`),
- cv.updatedAt ? p(`${i18n.cvUpdatedAt}: ${new Date(cv.updatedAt).toLocaleString()}`) : null
- ),
- hasPersonal ? div({ class: "cv-box personal" }, ...[
- cv.photo
- ? img({
- src: `/blob/${encodeURIComponent(cv.photo)}`,
- class: "cv-photo"
- })
- : null,
- cv.name ? h2(`${cv.name}`) : null,
- cv.contact ? p(a({ class: "user-link", href: `/author/${encodeURIComponent(cv.contact)}` }, cv.contact)) : null,
- cv.description ? p(`${cv.description}`) : null,
- cv.languages ? p(`${i18n.cvLanguagesLabel}: ${cv.languages}`) : null,
- (cv.personalSkills && cv.personalSkills.length)
- ? div(
- cv.personalSkills.map(tag =>
- a({
- href: `/search?query=%23${encodeURIComponent(tag)}`,
- class: "tag-link",
- style: "margin-right:0.8em;margin-bottom:0.5em;"
- }, `#${tag}`)
- )
- )
- : null
- ]) : null,
- hasOasis ? div({ class: "cv-box oasis" }, ...[
- h2(i18n.cvOasisContributorView),
- p(`${cv.oasisExperiences}`),
- (cv.oasisSkills && cv.oasisSkills.length)
- ? div(
- cv.oasisSkills.map(tag =>
- a({
- href: `/search?query=%23${encodeURIComponent(tag)}`,
- class: "tag-link",
- style: "margin-right:0.8em;margin-bottom:0.5em;"
- }, `#${tag}`)
- )
- )
- : null
- ]) : null,
- hasEducational ? div({ class: "cv-box education" }, ...[
- h2(i18n.cvEducationalView),
- cv.educationExperiences ? p(`${cv.educationExperiences}`) : null,
- (cv.educationalSkills && cv.educationalSkills.length)
- ? div(
- cv.educationalSkills.map(tag =>
- a({
- href: `/search?query=%23${encodeURIComponent(tag)}`,
- class: "tag-link",
- style: "margin-right:0.8em;margin-bottom:0.5em;"
- }, `#${tag}`)
- )
- )
- : null
- ]) : null,
- hasProfessional ? div({ class: "cv-box professional" }, ...[
- h2(i18n.cvProfessionalView),
- cv.professionalExperiences ? p(`${cv.professionalExperiences}`) : null,
- (cv.professionalSkills && cv.professionalSkills.length)
- ? div(
- cv.professionalSkills.map(tag =>
- a({
- href: `/search?query=%23${encodeURIComponent(tag)}`,
- class: "tag-link",
- style: "margin-right:0.8em;margin-bottom:0.5em;"
- }, `#${tag}`)
- )
- )
- : null
- ]) : null,
- hasAvailability ? div({ class: "cv-box availability" }, ...[
- h2(i18n.cvAvailabilityView),
- cv.location ? p(`${i18n.cvLocationLabel}: ${cv.location}`) : null,
- cv.status ? p(`${i18n.cvStatusLabel}: ${cv.status}`) : null,
- cv.preferences ? p(`${i18n.cvPreferencesLabel}: ${cv.preferences}`) : null
- ]) : null
- ])
- )
- )
- );
- };
|