diff --git a/apps/react-app/src/common-app/components/modal/index.ts b/apps/react-app/src/common-app/components/modal/index.ts index 4434fee2..0c42f837 100644 --- a/apps/react-app/src/common-app/components/modal/index.ts +++ b/apps/react-app/src/common-app/components/modal/index.ts @@ -1 +1 @@ -export * from './modal.component' +export * from './modal.component'; diff --git a/apps/react-app/src/common-app/components/modal/modal.component.tsx b/apps/react-app/src/common-app/components/modal/modal.component.tsx index d8fdc534..f2c6aae1 100644 --- a/apps/react-app/src/common-app/components/modal/modal.component.tsx +++ b/apps/react-app/src/common-app/components/modal/modal.component.tsx @@ -6,8 +6,8 @@ interface Props { isOpen: boolean; } -export const Modal: React.FC = (props) => { +export const Modal: React.FC = props => { const { children, isOpen } = props; - - return isOpen &&
{children}
+ + return isOpen &&
{children}
; }; diff --git a/apps/react-app/src/common-app/components/select/customSelect.component.tsx b/apps/react-app/src/common-app/components/select/customSelect.component.tsx index a0cca9d9..4a32c3c7 100644 --- a/apps/react-app/src/common-app/components/select/customSelect.component.tsx +++ b/apps/react-app/src/common-app/components/select/customSelect.component.tsx @@ -4,8 +4,10 @@ import * as classes from './customSelect.styles'; interface Props { listOptions: string[]; label: string; + onSelectedOption: (option: string) => void; } -export const CustomSelect: React.FC = ({ listOptions, label }) => { +export const CustomSelect: React.FC = props => { + const { listOptions, label, onSelectedOption } = props; const [isOpen, setIsOpen] = React.useState(false); const [selectedOption, setSelectedOption] = React.useState(label); @@ -14,6 +16,7 @@ export const CustomSelect: React.FC = ({ listOptions, label }) => { }; const handleOptionSelect = (option: string) => { + onSelectedOption(option); setSelectedOption(option); setIsOpen(false); }; diff --git a/apps/react-app/src/pods/template-export/components/customSelectColor/components/index.ts b/apps/react-app/src/pods/template-export/components/customSelectColor/components/index.ts new file mode 100644 index 00000000..a3d6fe86 --- /dev/null +++ b/apps/react-app/src/pods/template-export/components/customSelectColor/components/index.ts @@ -0,0 +1 @@ +export * from './inputRadioButton.component'; diff --git a/apps/react-app/src/pods/template-export/components/customSelectColor/components/inputRadioButton.component.tsx b/apps/react-app/src/pods/template-export/components/customSelectColor/components/inputRadioButton.component.tsx new file mode 100644 index 00000000..a540096f --- /dev/null +++ b/apps/react-app/src/pods/template-export/components/customSelectColor/components/inputRadioButton.component.tsx @@ -0,0 +1,22 @@ +import { HexColor, ColorTheme } from '@lemoncode/manfred2html'; +import * as classes from './inputRadioButton.styles'; + +interface Props { + value: ColorTheme; + hexColor: HexColor; + onChange: (event: React.ChangeEvent) => void; +} + +export const InputRadioButton: React.FC = ({ value, hexColor, onChange }) => { + return ( + + ); +}; diff --git a/apps/react-app/src/pods/template-export/components/customSelectColor/components/inputRadioButton.styles.ts b/apps/react-app/src/pods/template-export/components/customSelectColor/components/inputRadioButton.styles.ts new file mode 100644 index 00000000..802b4958 --- /dev/null +++ b/apps/react-app/src/pods/template-export/components/customSelectColor/components/inputRadioButton.styles.ts @@ -0,0 +1,17 @@ +import { css } from '@emotion/css'; +import { theme } from '@/core/theme'; + +export const inputRadioButton = (color: string) => css` + appearance: none; + width: 82px; + height: 82px; + box-shadow: 8px 8px 16px 0px rgba(0, 0, 0, 0.25); + border-radius: 50%; + background-color: ${color}; + cursor: pointer; + outline: none; + border: 15px solid ${theme.palette.info[50]}; + &[type='radio']:checked { + box-shadow: 0px 0px 0px 4px ${theme.palette.dark[200]}; + } +`; diff --git a/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.component.tsx b/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.component.tsx index e0527022..2d716192 100644 --- a/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.component.tsx +++ b/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.component.tsx @@ -1,7 +1,8 @@ import React from 'react'; -import { theme } from '@/core/theme'; -import * as classes from './customSelectColor.styles'; import { cx } from '@emotion/css'; +import { ColorTheme, HexColor } from '@lemoncode/manfred2html'; +import { InputRadioButton } from './components'; +import * as classes from './customSelectColor.styles'; interface Props { label: string; @@ -31,55 +32,14 @@ export const CustomSelectColor: React.FC = ({ label, onChange }) => { />
- - - - - - + {Object.keys(HexColor).map(colorKey => ( + + ))}
); diff --git a/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.styles.ts b/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.styles.ts index a5abd57c..16bf642c 100644 --- a/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.styles.ts +++ b/apps/react-app/src/pods/template-export/components/customSelectColor/customSelectColor.styles.ts @@ -57,20 +57,6 @@ export const colorFieldset = css` justify-content: center; gap: ${theme.spacing(8)}; `; -export const inputRadioButton = (color: string) => css` - appearance: none; - width: 82px; - height: 82px; - box-shadow: 8px 8px 16px 0px rgba(0, 0, 0, 0.25); - border-radius: 50%; - background-color: ${color}; - cursor: pointer; - outline: none; - border: 15px solid ${theme.palette.info[50]}; - &[type='radio']:checked { - box-shadow: 0px 0px 0px 4px ${theme.palette.dark[200]}; - } -`; export const rotate = (customSelectState: boolean) => css` rotate: ${customSelectState ? '180deg' : '0deg'}; diff --git a/apps/react-app/src/pods/template-export/components/export-config/export-config.component.tsx b/apps/react-app/src/pods/template-export/components/export-config/export-config.component.tsx index 007a2a27..7973c137 100644 --- a/apps/react-app/src/pods/template-export/components/export-config/export-config.component.tsx +++ b/apps/react-app/src/pods/template-export/components/export-config/export-config.component.tsx @@ -1,8 +1,12 @@ import React from 'react'; -import { ExportHTMLSettings } from '@lemoncode/manfred2html'; -import { theme } from '@/core/theme'; +import { + TemplateCV, + ColorTheme, + Language, + ExportHTMLSettings, + createDefaultExportHTMLSettings, +} from '@lemoncode/manfred2html'; import { Button, CustomSelect } from '@/common-app/components'; -import { useUserChoiceContext } from '@/core/user-choice'; import { CustomSelectColor } from '../customSelectColor/customSelectColor.component'; import * as classes from './export-config.styles'; interface Props { @@ -13,15 +17,14 @@ interface Props { } const DOWNLOAD_MESSAGE_TIMEOUT = 2500; -const OPTIONSDESING = ['Item 1', 'Item 2', 'Item 3']; -const OPTIONSlANGUAGE = ['Item 1', 'Item 2', 'Item 3']; +const DESING_OPTIONS: TemplateCV[] = ['default', 'CV-1']; +const LANGUAGE_OPTIONS: Language[] = ['es', 'en']; export const ExportConfig: React.FC = props => { const { onExportToHTML, cancelExport, htmlTemplate, onHTMLSettingSelectionChanged } = props; - const { userChoice } = useUserChoiceContext(); - const [exportHTMLSettings, setExportHTMLSettings] = React.useState({ - primaryColor: theme.palette.primary[600], - }); + const [exportHTMLSettings, setExportHTMLSettings] = React.useState( + createDefaultExportHTMLSettings() + ); const [isDownloadInProgress, setIsDownloadInProgress] = React.useState(false); const [htmlPreview, setHtmlPreview] = React.useState( @@ -29,8 +32,27 @@ export const ExportConfig: React.FC = props => { ); const handleColorChange = (event: React.ChangeEvent) => { - setExportHTMLSettings({ primaryColor: event.target.value }); - onHTMLSettingSelectionChanged(htmlTemplate, { primaryColor: event.target.value }); + setExportHTMLSettings({ ...exportHTMLSettings, colorTheme: event.target.value as ColorTheme }); + onHTMLSettingSelectionChanged(htmlTemplate, { + ...exportHTMLSettings, + colorTheme: event.target.value as ColorTheme, + }); + }; + + const handleTemplateChange = (templateCV: string) => { + setExportHTMLSettings({ ...exportHTMLSettings, template: templateCV as TemplateCV }); + onHTMLSettingSelectionChanged(htmlTemplate, { + ...exportHTMLSettings, + template: templateCV as TemplateCV, + }); + }; + + const handleLanguageChange = (language: string) => { + setExportHTMLSettings({ ...exportHTMLSettings, language: language as Language }); + onHTMLSettingSelectionChanged(htmlTemplate, { + ...exportHTMLSettings, + language: language as Language, + }); }; const handleExportConfigSelection = () => { setIsDownloadInProgress(true); @@ -51,8 +73,12 @@ export const ExportConfig: React.FC = props => {
- - + +
diff --git a/apps/react-app/src/pods/template-export/template-export.component.tsx b/apps/react-app/src/pods/template-export/template-export.component.tsx index 5a1a00bb..58b3ce0a 100644 --- a/apps/react-app/src/pods/template-export/template-export.component.tsx +++ b/apps/react-app/src/pods/template-export/template-export.component.tsx @@ -2,8 +2,8 @@ import React from 'react'; import { ExportHTMLSettings } from '@lemoncode/manfred2html'; import { useUserChoiceContext } from '@/core'; import { Button, Footer, Header, Modal, Navbar } from '@/common-app/components'; -import * as classes from './template-export.styles'; import { ExportConfig } from './components/export-config'; +import * as classes from './template-export.styles'; interface Props { error: boolean; diff --git a/apps/react-app/src/pods/template-export/template-export.container.tsx b/apps/react-app/src/pods/template-export/template-export.container.tsx index 9fe87295..a6a63c55 100644 --- a/apps/react-app/src/pods/template-export/template-export.container.tsx +++ b/apps/react-app/src/pods/template-export/template-export.container.tsx @@ -1,7 +1,7 @@ import React from 'react'; import { exportManfredJSonToWordAndDownload, parseStringToManfredJSon } from '@lemoncode/manfred2word'; import { exportManfredJSonToMarkdown } from '@lemoncode/manfred2md'; -import { exportManfredJSonToHTML, ExportHTMLSettings } from '@lemoncode/manfred2html'; +import { exportHTMLTemplate, ExportHTMLSettings } from '@lemoncode/manfred2html'; import { DEFAULT_EXPORT_FILENAME } from '@/core'; import { download } from '@/common'; import { TemplateExport } from './template-export.component'; @@ -38,7 +38,7 @@ export const TemplateExportContainer: React.FC = () => { const onExportToHTML = async (text: string, exportHTMLSettings: ExportHTMLSettings) => { try { const manfredJsonContent = parseManfredJson(text); - const content = exportManfredJSonToHTML(manfredJsonContent, exportHTMLSettings); + const content = exportHTMLTemplate(manfredJsonContent, exportHTMLSettings); const blob = new Blob([content], { type: 'text/html' }); await download(blob, 'manfred.html'); @@ -49,7 +49,7 @@ export const TemplateExportContainer: React.FC = () => { const onHTMLSettingChanged = (text: string, exportHTMLSettings: ExportHTMLSettings): string => { const manfredJsonContent = parseManfredJson(text); - const content = exportManfredJSonToHTML(manfredJsonContent, exportHTMLSettings); + const content = exportHTMLTemplate(manfredJsonContent, exportHTMLSettings); return content; }; diff --git a/packages/manfred2html/src/engine/html-parts/html-document-start/html-document-start.part.ts b/packages/manfred2html/src/engine/html-parts/html-document-start/html-document-start.part.ts deleted file mode 100644 index f7c92c5d..00000000 --- a/packages/manfred2html/src/engine/html-parts/html-document-start/html-document-start.part.ts +++ /dev/null @@ -1,4 +0,0 @@ -import ejs from 'ejs'; -import htmlDocumentStartTemplate from './html-document-start.ejs?raw'; - -export const generateHtmlDocumentStart = (color: string): string => ejs.render(htmlDocumentStartTemplate, { color }); diff --git a/packages/manfred2html/src/engine/index.ts b/packages/manfred2html/src/engine/index.ts index 02cb6f68..222b82c9 100644 --- a/packages/manfred2html/src/engine/index.ts +++ b/packages/manfred2html/src/engine/index.ts @@ -1,57 +1,20 @@ import { ManfredAwesomicCV, ExportHTMLSettings } from '@/model'; -import { - generateHtmlDocumentStart, - generateHtmlDocumentEnd, - generateHeaderElementStart, - generateHeaderElementEnd, - generateAboutMeSection, - generateAsideElementStart, - generateAsideElementEnd, - generateRelevantsLinksSection, - generateLanguageSection, - generateHardSkillsSection, - generateSoftSkillsSection, - generateMainElementStart, - generateMainElementEnd, - generateExperiencesSection, - generateStudiesSection, -} from './html-parts'; +import { mapExportHTMLSettingsToSettings } from '@/mappers'; +import { exportManfredJSonToHTMLTemplateA } from './template-a'; +import { exportManfredJSonToHTMLTemplateB } from './template-b'; -export const exportManfredJSonToHTML = ( +export const exportHTMLTemplate = ( manfredJsonContent: ManfredAwesomicCV, exportHTMLSettings: ExportHTMLSettings ): string => { - const htmlDocumentStart = generateHtmlDocumentStart(exportHTMLSettings.primaryColor); - const htmlDocumentEnd = generateHtmlDocumentEnd(); - const headerElementStart = generateHeaderElementStart(); - const headerElementEnd = generateHeaderElementEnd(); - const aboutMeSection = generateAboutMeSection(manfredJsonContent); - const asideElementStart = generateAsideElementStart(); - const asideElementEnd = generateAsideElementEnd(); - const relevantsLinksSection = generateRelevantsLinksSection(manfredJsonContent); - const mainElementStart = generateMainElementStart(); - const mainElementEnd = generateMainElementEnd(); - const languageSection = generateLanguageSection(manfredJsonContent); - const hardSkillsSection = generateHardSkillsSection(manfredJsonContent); - const softSkillsSection = generateSoftSkillsSection(manfredJsonContent); - const experienceSection = generateExperiencesSection(manfredJsonContent); - const studiesSection = generateStudiesSection(manfredJsonContent); + const settings = mapExportHTMLSettingsToSettings(exportHTMLSettings); - return ` - ${htmlDocumentStart} - ${headerElementStart} - ${aboutMeSection} - ${headerElementEnd} - ${asideElementStart} - ${relevantsLinksSection} - ${languageSection} - ${hardSkillsSection} - ${softSkillsSection} - ${asideElementEnd} - ${mainElementStart} - ${experienceSection} - ${studiesSection} - ${mainElementEnd} - ${htmlDocumentEnd} - `; + switch (settings.template) { + case 'default': + return exportManfredJSonToHTMLTemplateA(manfredJsonContent, settings); + case 'CV-1': + return exportManfredJSonToHTMLTemplateB(manfredJsonContent, settings); + default: + throw new Error('Template not found'); + } }; diff --git a/packages/manfred2html/src/engine/html-parts/about-me-section/about-me-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/about-me-section/about-me-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/about-me-section/about-me-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/about-me-section/about-me-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/about-me-section/about-me-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/about-me-section/about-me-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/about-me-section/about-me-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/about-me-section/about-me-section.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/about-me-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/about-me-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/about-me-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/about-me-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/aside-element-end/aside-element-end.ejs b/packages/manfred2html/src/engine/template-a/html-parts/aside-element-end/aside-element-end.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/aside-element-end/aside-element-end.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/aside-element-end/aside-element-end.ejs diff --git a/packages/manfred2html/src/engine/html-parts/aside-element-end/aside-element-end.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/aside-element-end/aside-element-end.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/aside-element-end/aside-element-end.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/aside-element-end/aside-element-end.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/aside-element-end/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/aside-element-end/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/aside-element-end/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/aside-element-end/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/aside-element-start/aside-element-start.ejs b/packages/manfred2html/src/engine/template-a/html-parts/aside-element-start/aside-element-start.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/aside-element-start/aside-element-start.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/aside-element-start/aside-element-start.ejs diff --git a/packages/manfred2html/src/engine/html-parts/aside-element-start/aside-element-start.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/aside-element-start/aside-element-start.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/aside-element-start/aside-element-start.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/aside-element-start/aside-element-start.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/aside-element-start/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/aside-element-start/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/aside-element-start/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/aside-element-start/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/experience-section/experience-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/experience-section/experience-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/experience-section/experience-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/experience-section/experience-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/experience-section/experience-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/experience-section/experience-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/experience-section/experience-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/experience-section/experience-section.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/experience-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/experience-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/experience-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/experience-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/hard-skills-section/hard-skills-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/hard-skills-section/hard-skills-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/hard-skills-section/hard-skills-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/hard-skills-section/hard-skills-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/hard-skills-section/hard-skills-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/hard-skills-section/hard-skills-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/hard-skills-section/hard-skills-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/hard-skills-section/hard-skills-section.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/hard-skills-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/hard-skills-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/hard-skills-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/hard-skills-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/header-element-end/header-element-end.ejs b/packages/manfred2html/src/engine/template-a/html-parts/header-element-end/header-element-end.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/header-element-end/header-element-end.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/header-element-end/header-element-end.ejs diff --git a/packages/manfred2html/src/engine/html-parts/header-element-end/header-element-end.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/header-element-end/header-element-end.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/header-element-end/header-element-end.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/header-element-end/header-element-end.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/header-element-end/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/header-element-end/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/header-element-end/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/header-element-end/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/header-element-start/header-element-start.ejs b/packages/manfred2html/src/engine/template-a/html-parts/header-element-start/header-element-start.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/header-element-start/header-element-start.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/header-element-start/header-element-start.ejs diff --git a/packages/manfred2html/src/engine/html-parts/header-element-start/header-element-start.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/header-element-start/header-element-start.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/header-element-start/header-element-start.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/header-element-start/header-element-start.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/header-element-start/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/header-element-start/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/header-element-start/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/header-element-start/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/html-document-end/html-document-end.ejs b/packages/manfred2html/src/engine/template-a/html-parts/html-document-end/html-document-end.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/html-document-end/html-document-end.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/html-document-end/html-document-end.ejs diff --git a/packages/manfred2html/src/engine/html-parts/html-document-end/html-document-end.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/html-document-end/html-document-end.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/html-document-end/html-document-end.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/html-document-end/html-document-end.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/html-document-end/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/html-document-end/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/html-document-end/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/html-document-end/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/html-document-start/html-document-start.ejs b/packages/manfred2html/src/engine/template-a/html-parts/html-document-start/html-document-start.ejs similarity index 99% rename from packages/manfred2html/src/engine/html-parts/html-document-start/html-document-start.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/html-document-start/html-document-start.ejs index 7439a53b..b7c4a92b 100644 --- a/packages/manfred2html/src/engine/html-parts/html-document-start/html-document-start.ejs +++ b/packages/manfred2html/src/engine/template-a/html-parts/html-document-start/html-document-start.ejs @@ -1,5 +1,5 @@ - - + + diff --git a/packages/manfred2html/src/engine/template-a/html-parts/html-document-start/html-document-start.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/html-document-start/html-document-start.part.ts new file mode 100644 index 00000000..08456f9e --- /dev/null +++ b/packages/manfred2html/src/engine/template-a/html-parts/html-document-start/html-document-start.part.ts @@ -0,0 +1,5 @@ +import ejs from 'ejs'; +import { HexColor } from '@/model'; +import htmlDocumentStartTemplate from './html-document-start.ejs?raw'; + +export const generateHtmlDocumentStart = (color: HexColor): string => ejs.render(htmlDocumentStartTemplate, { color }); diff --git a/packages/manfred2html/src/engine/html-parts/html-document-start/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/html-document-start/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/html-document-start/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/html-document-start/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/language-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/language-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/language-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/language-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/language-section/language-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/language-section/language-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/language-section/language-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/language-section/language-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/language-section/language-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/language-section/language-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/language-section/language-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/language-section/language-section.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/main-element-end/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/main-element-end/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/main-element-end/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/main-element-end/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/main-element-end/main-element-end.ejs b/packages/manfred2html/src/engine/template-a/html-parts/main-element-end/main-element-end.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/main-element-end/main-element-end.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/main-element-end/main-element-end.ejs diff --git a/packages/manfred2html/src/engine/html-parts/main-element-end/main-element-end.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/main-element-end/main-element-end.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/main-element-end/main-element-end.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/main-element-end/main-element-end.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/main-element-start/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/main-element-start/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/main-element-start/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/main-element-start/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/main-element-start/main-element-start.ejs b/packages/manfred2html/src/engine/template-a/html-parts/main-element-start/main-element-start.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/main-element-start/main-element-start.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/main-element-start/main-element-start.ejs diff --git a/packages/manfred2html/src/engine/html-parts/main-element-start/main-element-start.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/main-element-start/main-element-start.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/main-element-start/main-element-start.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/main-element-start/main-element-start.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/relevants-links-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/relevants-links-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/relevants-links-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/relevants-links-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/relevants-links-section/relevants-links-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/relevants-links-section/relevants-links-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/relevants-links-section/relevants-links-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/relevants-links-section/relevants-links-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/relevants-links-section/relevants-links-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/relevants-links-section/relevants-links-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/relevants-links-section/relevants-links-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/relevants-links-section/relevants-links-section.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/soft-skills-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/soft-skills-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/soft-skills-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/soft-skills-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/soft-skills-section/soft-skills-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/soft-skills-section/soft-skills-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/soft-skills-section/soft-skills-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/soft-skills-section/soft-skills-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/soft-skills-section/soft-skills-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/soft-skills-section/soft-skills-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/soft-skills-section/soft-skills-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/soft-skills-section/soft-skills-section.part.ts diff --git a/packages/manfred2html/src/engine/html-parts/studies-section/index.ts b/packages/manfred2html/src/engine/template-a/html-parts/studies-section/index.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/studies-section/index.ts rename to packages/manfred2html/src/engine/template-a/html-parts/studies-section/index.ts diff --git a/packages/manfred2html/src/engine/html-parts/studies-section/studies-section.ejs b/packages/manfred2html/src/engine/template-a/html-parts/studies-section/studies-section.ejs similarity index 100% rename from packages/manfred2html/src/engine/html-parts/studies-section/studies-section.ejs rename to packages/manfred2html/src/engine/template-a/html-parts/studies-section/studies-section.ejs diff --git a/packages/manfred2html/src/engine/html-parts/studies-section/studies-section.part.ts b/packages/manfred2html/src/engine/template-a/html-parts/studies-section/studies-section.part.ts similarity index 100% rename from packages/manfred2html/src/engine/html-parts/studies-section/studies-section.part.ts rename to packages/manfred2html/src/engine/template-a/html-parts/studies-section/studies-section.part.ts diff --git a/packages/manfred2html/src/engine/template-a/index.ts b/packages/manfred2html/src/engine/template-a/index.ts new file mode 100644 index 00000000..ab79d39a --- /dev/null +++ b/packages/manfred2html/src/engine/template-a/index.ts @@ -0,0 +1,54 @@ +import { ManfredAwesomicCV, Settings } from '@/model'; +import { + generateHtmlDocumentStart, + generateHtmlDocumentEnd, + generateHeaderElementStart, + generateHeaderElementEnd, + generateAboutMeSection, + generateAsideElementStart, + generateAsideElementEnd, + generateRelevantsLinksSection, + generateLanguageSection, + generateHardSkillsSection, + generateSoftSkillsSection, + generateMainElementStart, + generateMainElementEnd, + generateExperiencesSection, + generateStudiesSection, +} from './html-parts'; + +export const exportManfredJSonToHTMLTemplateA = (manfredJsonContent: ManfredAwesomicCV, settings: Settings): string => { + const htmlDocumentStart = generateHtmlDocumentStart(settings.colorTheme); + const htmlDocumentEnd = generateHtmlDocumentEnd(); + const headerElementStart = generateHeaderElementStart(); + const headerElementEnd = generateHeaderElementEnd(); + const aboutMeSection = generateAboutMeSection(manfredJsonContent); + const asideElementStart = generateAsideElementStart(); + const asideElementEnd = generateAsideElementEnd(); + const relevantsLinksSection = generateRelevantsLinksSection(manfredJsonContent); + const mainElementStart = generateMainElementStart(); + const mainElementEnd = generateMainElementEnd(); + const languageSection = generateLanguageSection(manfredJsonContent); + const hardSkillsSection = generateHardSkillsSection(manfredJsonContent); + const softSkillsSection = generateSoftSkillsSection(manfredJsonContent); + const experienceSection = generateExperiencesSection(manfredJsonContent); + const studiesSection = generateStudiesSection(manfredJsonContent); + + return ` + ${htmlDocumentStart} + ${headerElementStart} + ${aboutMeSection} + ${headerElementEnd} + ${asideElementStart} + ${relevantsLinksSection} + ${languageSection} + ${hardSkillsSection} + ${softSkillsSection} + ${asideElementEnd} + ${mainElementStart} + ${experienceSection} + ${studiesSection} + ${mainElementEnd} + ${htmlDocumentEnd} + `; +}; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/about-me-section.ejs b/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/about-me-section.ejs new file mode 100644 index 00000000..acf71af2 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/about-me-section.ejs @@ -0,0 +1,11 @@ + <%_ if (profile && profile !== 'undefined' ) { -%> +
+
+

Sobre mi

+
+
+

<%= profile?.description %>

+
+<%_ } -%> + + diff --git a/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/about-me-section.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/about-me-section.part.ts new file mode 100644 index 00000000..d945a21a --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/about-me-section.part.ts @@ -0,0 +1,18 @@ +import { ManfredAwesomicCV } from '@/model'; +import { ProfileSectionVm, mapFromMacCvToProfileSectionVm } from '@lemoncode/manfred-common/profile-section'; +import aboutMe from './about-me-section.ejs?raw'; +import ejs from 'ejs'; + +export const generateAboutMeSection = (cv: ManfredAwesomicCV): string => { + const profileSectionVm = mapFromMacCvToProfileSectionVm(cv); + + return generateAboutMeSectionInner(profileSectionVm); +}; + +const generateAboutMeSectionInner = (profileSectionVm: ProfileSectionVm): string => { + const rootObject = { + profile: profileSectionVm, + }; + + return ejs.render(aboutMe, rootObject); +}; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/index.ts new file mode 100644 index 00000000..b0ee7d15 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/about-me-section/index.ts @@ -0,0 +1 @@ +export * from './about-me-section.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/aside-element-end.ejs b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/aside-element-end.ejs new file mode 100644 index 00000000..0124ef29 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/aside-element-end.ejs @@ -0,0 +1 @@ + diff --git a/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/aside-element-end.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/aside-element-end.part.ts new file mode 100644 index 00000000..34639985 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/aside-element-end.part.ts @@ -0,0 +1,4 @@ +import ejs from 'ejs'; +import asideElementEndTemplate from './aside-element-end.ejs?raw'; + +export const generateAsideElementEnd = (): string => ejs.render(asideElementEndTemplate); diff --git a/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/index.ts new file mode 100644 index 00000000..e1b267cb --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-end/index.ts @@ -0,0 +1 @@ +export * from './aside-element-end.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/aside-element-start/aside-element-start.ejs b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-start/aside-element-start.ejs new file mode 100644 index 00000000..fbfaf4bc --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/aside-element-start/aside-element-start.ejs @@ -0,0 +1 @@ +
+ + diff --git a/packages/manfred2html/src/engine/template-b/html-parts/html-document-end/html-document-end.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/html-document-end/html-document-end.part.ts new file mode 100644 index 00000000..43b00dee --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/html-document-end/html-document-end.part.ts @@ -0,0 +1,4 @@ +import ejs from 'ejs'; +import htmlDocumentEndTemplate from './html-document-end.ejs?raw'; + +export const generateHtmlDocumentEnd = (): string => ejs.render(htmlDocumentEndTemplate); diff --git a/packages/manfred2html/src/engine/template-b/html-parts/html-document-end/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/html-document-end/index.ts new file mode 100644 index 00000000..b8cab897 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/html-document-end/index.ts @@ -0,0 +1 @@ +export * from './html-document-end.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/html-document-start.ejs b/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/html-document-start.ejs new file mode 100644 index 00000000..baac6313 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/html-document-start.ejs @@ -0,0 +1,281 @@ + + + + + + + + + CV Manfred Export + + + +
+ diff --git a/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/html-document-start.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/html-document-start.part.ts new file mode 100644 index 00000000..08456f9e --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/html-document-start.part.ts @@ -0,0 +1,5 @@ +import ejs from 'ejs'; +import { HexColor } from '@/model'; +import htmlDocumentStartTemplate from './html-document-start.ejs?raw'; + +export const generateHtmlDocumentStart = (color: HexColor): string => ejs.render(htmlDocumentStartTemplate, { color }); diff --git a/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/index.ts new file mode 100644 index 00000000..d4b22932 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/html-document-start/index.ts @@ -0,0 +1 @@ +export * from './html-document-start.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/index.ts new file mode 100644 index 00000000..15718c41 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/index.ts @@ -0,0 +1,16 @@ +export * from './html-document-start'; +export * from './html-document-end'; +export * from './aside-element-start'; +export * from './aside-element-end'; +export * from './main-element-start'; +export * from './main-element-end'; +export * from './header-element-start'; +export * from './header-element-end'; +export * from './header-section'; +export * from './relevants-links-section'; +export * from './language-section'; +export * from './hard-skills-section'; +export * from './soft-skills-section'; +export * from './about-me-section'; +export * from './experience-section'; +export * from './studies-section'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/language-section/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/language-section/index.ts new file mode 100644 index 00000000..c79bff55 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/language-section/index.ts @@ -0,0 +1 @@ +export * from './language-section.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/language-section/language-section.ejs b/packages/manfred2html/src/engine/template-b/html-parts/language-section/language-section.ejs new file mode 100644 index 00000000..4fca980c --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/language-section/language-section.ejs @@ -0,0 +1,11 @@ +<%_ if (languageCollection && languageCollection.length !== 0) { -%> +
+

Idiomas / Nivel

+
    + <%_ for (const language of languageCollection) { -%> +
  • <%- language.name %> (<%- language.level %>)
  • + <%_ } -%> +
+
+<%_ } -%> + diff --git a/packages/manfred2html/src/engine/template-b/html-parts/language-section/language-section.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/language-section/language-section.part.ts new file mode 100644 index 00000000..f27fbf9b --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/language-section/language-section.part.ts @@ -0,0 +1,16 @@ +import ejs from 'ejs'; +import { ManfredAwesomicCV } from '@/model'; +import { LanguageVm, mapFromCvToLanguageVm } from '@lemoncode/manfred-common/language-section' +import languageSection from './language-section.ejs?raw'; + +export const generateLanguageSection = (cv: ManfredAwesomicCV): string => { + const languageSectionVm = mapFromCvToLanguageVm(cv); + return generateLanguageSectionInner(languageSectionVm); +}; + +const generateLanguageSectionInner = (languageSectionVm: LanguageVm[]): string => { + const rootObject = { + languageCollection: languageSectionVm, + } + return ejs.render(languageSection, rootObject) +}; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/index.ts new file mode 100644 index 00000000..43da82c1 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/index.ts @@ -0,0 +1 @@ +export * from './main-element-end.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/main-element-end.ejs b/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/main-element-end.ejs new file mode 100644 index 00000000..0f4bf453 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/main-element-end.ejs @@ -0,0 +1 @@ + diff --git a/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/main-element-end.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/main-element-end.part.ts new file mode 100644 index 00000000..ad9c1b96 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/main-element-end/main-element-end.part.ts @@ -0,0 +1,4 @@ +import ejs from 'ejs'; +import mainElementEndTemplate from './main-element-end.ejs?raw'; + +export const generateMainElementEnd = (): string => ejs.render(mainElementEndTemplate); diff --git a/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/index.ts new file mode 100644 index 00000000..5286e5ba --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/index.ts @@ -0,0 +1 @@ +export * from './main-element-start.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/main-element-start.ejs b/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/main-element-start.ejs new file mode 100644 index 00000000..506713e2 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/main-element-start.ejs @@ -0,0 +1 @@ +
diff --git a/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/main-element-start.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/main-element-start.part.ts new file mode 100644 index 00000000..0ebd42f9 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/main-element-start/main-element-start.part.ts @@ -0,0 +1,4 @@ +import ejs from 'ejs'; +import mainElementStartTemplate from './main-element-start.ejs?raw'; + +export const generateMainElementStart = (): string => ejs.render(mainElementStartTemplate); diff --git a/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/index.ts new file mode 100644 index 00000000..12fe55f6 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/index.ts @@ -0,0 +1 @@ +export * from './relevants-links-section.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/relevants-links-section.ejs b/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/relevants-links-section.ejs new file mode 100644 index 00000000..85834f3d --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/relevants-links-section.ejs @@ -0,0 +1,137 @@ +<%_ if (profile.relevantLinks && profile.relevantLinks.length !== 0) { -%> +
+

Mis enlaces

+ +
+<%_ } -%> + diff --git a/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/relevants-links-section.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/relevants-links-section.part.ts new file mode 100644 index 00000000..929d0526 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/relevants-links-section/relevants-links-section.part.ts @@ -0,0 +1,18 @@ +import ejs from 'ejs'; +import { ManfredAwesomicCV } from '@/model'; +import { ProfileSectionVm, mapFromMacCvToProfileSectionVm } from '@lemoncode/manfred-common/profile-section'; +import relevantsLinksSection from './relevants-links-section.ejs?raw'; + +export const generateRelevantsLinksSection = (cv: ManfredAwesomicCV): string => { + const profileSectionVm = mapFromMacCvToProfileSectionVm(cv); + + return generateRelevantsLinksSectionInner(profileSectionVm); +}; + +const generateRelevantsLinksSectionInner = (profileSectionVm: ProfileSectionVm): string => { + const rootObject = { + profile: profileSectionVm, + }; + + return ejs.render(relevantsLinksSection, rootObject); +}; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/index.ts new file mode 100644 index 00000000..caf64397 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/index.ts @@ -0,0 +1 @@ +export * from './soft-skills-section.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/soft-skills-section.ejs b/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/soft-skills-section.ejs new file mode 100644 index 00000000..e85a62fc --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/soft-skills-section.ejs @@ -0,0 +1,11 @@ +<%_ if (softSkillsCollection && softSkillsCollection.length !== 0) { -%> +
+

Habilidades interpersonales

+
    + <%_ for (const item of softSkillsCollection) { -%> +
  • <%- item.skill.name %>
  • + <%_ } -%> +
+
+ <%_ } -%> + \ No newline at end of file diff --git a/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/soft-skills-section.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/soft-skills-section.part.ts new file mode 100644 index 00000000..915d2484 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/soft-skills-section/soft-skills-section.part.ts @@ -0,0 +1,16 @@ +import ejs from 'ejs'; +import { ManfredAwesomicCV } from '@/model'; +import { SoftSkillVM, mapFromCvToSoftSkillVm } from '@lemoncode/manfred-common/soft-skill-section'; +import softSkillsSection from './soft-skills-section.ejs?raw'; + +export const generateSoftSkillsSection = (cv: ManfredAwesomicCV): string => { + const softSkillsSectionVm = mapFromCvToSoftSkillVm(cv); + return generateSoftSkillsSectionInner(softSkillsSectionVm); +}; + +const generateSoftSkillsSectionInner = (softSkillsSectionVm: SoftSkillVM[]): string => { + const rootObject = { + softSkillsCollection: softSkillsSectionVm, + }; + return ejs.render(softSkillsSection, rootObject); +}; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/studies-section/index.ts b/packages/manfred2html/src/engine/template-b/html-parts/studies-section/index.ts new file mode 100644 index 00000000..bd83d5eb --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/studies-section/index.ts @@ -0,0 +1 @@ +export * from './studies-section.part'; diff --git a/packages/manfred2html/src/engine/template-b/html-parts/studies-section/studies-section.ejs b/packages/manfred2html/src/engine/template-b/html-parts/studies-section/studies-section.ejs new file mode 100644 index 00000000..d454cf62 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/studies-section/studies-section.ejs @@ -0,0 +1,69 @@ +<%_ if (studiesCollection && studiesCollection.length !== 0) { -%> +
+
+

Educación

+
+
+ <%_ for (const study of studiesCollection) { -%> +
+
+ + + +
+
+

<%- study.name %>

+ <%_ if (study.description) { -%> +

<%- study.description %>

+ <%_ } -%> + +

Tipo de estudios: <%- study.studyType %>

+

+ Grado obtenido: <% if (study.degreeAchieved) { %> + Obtenido + <%} else { %> + No obtenido + <% } %> +

+

Nombre de la institución: <%- study.institution.name %>

+ <%_ if (study.location) { -%> +

+ Ubicación de la institución: + <%- study.institution.location.region %> , <%- study.institution.location.country %> +

+ <%_ } -%> +
+
+ <%_ } -%> +
+ <%_ } -%> + \ No newline at end of file diff --git a/packages/manfred2html/src/engine/template-b/html-parts/studies-section/studies-section.part.ts b/packages/manfred2html/src/engine/template-b/html-parts/studies-section/studies-section.part.ts new file mode 100644 index 00000000..512e6471 --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/html-parts/studies-section/studies-section.part.ts @@ -0,0 +1,18 @@ +import ejs from 'ejs'; +import { StudiesSectionVm, mapFromMacCvToStudiesSectionVm } from '@lemoncode/manfred-common/studies-section'; +import { ManfredAwesomicCV } from '@/model'; +import studiesTemplate from './studies-section.ejs?raw'; + +export const generateStudiesSection = (cv: ManfredAwesomicCV): string => { + const studiesSectionVm = mapFromMacCvToStudiesSectionVm(cv); + + return generateStudiesSectionInner(studiesSectionVm); +}; + +const generateStudiesSectionInner = (studiesSectionVm: StudiesSectionVm[]): string => { + const rootObject = { + studiesCollection: studiesSectionVm, + }; + + return ejs.render(studiesTemplate, rootObject); +}; diff --git a/packages/manfred2html/src/engine/template-b/index.ts b/packages/manfred2html/src/engine/template-b/index.ts new file mode 100644 index 00000000..3bd2850b --- /dev/null +++ b/packages/manfred2html/src/engine/template-b/index.ts @@ -0,0 +1,56 @@ +import { ManfredAwesomicCV, Settings } from '@/model'; +import { + generateHtmlDocumentStart, + generateHtmlDocumentEnd, + generateHeaderElementStart, + generateHeaderElementEnd, + generateHeaderSection, + generateAsideElementStart, + generateAsideElementEnd, + generateMainElementStart, + generateMainElementEnd, + generateRelevantsLinksSection, + generateLanguageSection, + generateHardSkillsSection, + generateSoftSkillsSection, + generateAboutMeSection, + generateExperiencesSection, + generateStudiesSection, +} from './html-parts'; + +export const exportManfredJSonToHTMLTemplateB = (manfredJsonContent: ManfredAwesomicCV, settings: Settings): string => { + const htmlDocumentStart = generateHtmlDocumentStart(settings.colorTheme); + const htmlDocumentEnd = generateHtmlDocumentEnd(); + const headerElementStart = generateHeaderElementStart(); + const headerElementEnd = generateHeaderElementEnd(); + const headerSection = generateHeaderSection(manfredJsonContent); + const relevantsLinksSection = generateRelevantsLinksSection(manfredJsonContent); + const hardSkillsSection = generateHardSkillsSection(manfredJsonContent); + const softSkillsSection = generateSoftSkillsSection(manfredJsonContent); + const languageSection = generateLanguageSection(manfredJsonContent); + const asideElementStart = generateAsideElementStart(); + const asideElementEnd = generateAsideElementEnd(); + const mainElementStart = generateMainElementStart(); + const mainElementEnd = generateMainElementEnd(); + const aboutMeSection = generateAboutMeSection(manfredJsonContent); + const experienceSection = generateExperiencesSection(manfredJsonContent); + const studiesSection = generateStudiesSection(manfredJsonContent); + return ` + ${htmlDocumentStart} + ${asideElementStart} + ${headerElementStart} + ${headerSection} + ${headerElementEnd} + ${relevantsLinksSection} + ${languageSection} + ${hardSkillsSection} + ${softSkillsSection} + ${asideElementEnd} + ${mainElementStart} + ${aboutMeSection} + ${experienceSection} + ${studiesSection} + ${mainElementEnd} + ${htmlDocumentEnd} + `; +}; diff --git a/packages/manfred2html/src/index.ts b/packages/manfred2html/src/index.ts index 18539350..2f7c68aa 100644 --- a/packages/manfred2html/src/index.ts +++ b/packages/manfred2html/src/index.ts @@ -1,2 +1,3 @@ export * from '@/engine'; export * from '@/model'; +export * from '@/mappers'; diff --git a/packages/manfred2html/src/mappers/exportHTMLSettings.mappers.ts b/packages/manfred2html/src/mappers/exportHTMLSettings.mappers.ts new file mode 100644 index 00000000..6ba8989d --- /dev/null +++ b/packages/manfred2html/src/mappers/exportHTMLSettings.mappers.ts @@ -0,0 +1,26 @@ +import { ColorTheme, ExportHTMLSettings, Settings, HexColor } from '@/model'; + +export const mapColorThemeToHex = (colorTheme: ColorTheme): HexColor => { + switch (colorTheme) { + case 'default': + return HexColor.default; + case 'red': + return HexColor.red; + case 'green': + return HexColor.green; + case 'orange': + return HexColor.orange; + case 'yellow': + return HexColor.yellow; + case 'dark': + return HexColor.dark; + default: + return HexColor.default; + } +}; + +export const mapExportHTMLSettingsToSettings = (exportHTMLSettings: ExportHTMLSettings): Settings => ({ + colorTheme: mapColorThemeToHex(exportHTMLSettings.colorTheme), + template: exportHTMLSettings.template || 'default', + language: exportHTMLSettings.language || 'es', +}); diff --git a/packages/manfred2html/src/mappers/index.ts b/packages/manfred2html/src/mappers/index.ts new file mode 100644 index 00000000..00e00995 --- /dev/null +++ b/packages/manfred2html/src/mappers/index.ts @@ -0,0 +1 @@ +export * from './exportHTMLSettings.mappers'; diff --git a/packages/manfred2html/src/model/export-html-settings.model.ts b/packages/manfred2html/src/model/export-html-settings.model.ts index 88f8deda..c291d231 100644 --- a/packages/manfred2html/src/model/export-html-settings.model.ts +++ b/packages/manfred2html/src/model/export-html-settings.model.ts @@ -1,4 +1,29 @@ +export type ColorTheme = 'default' | 'red' | 'green' | 'orange' | 'yellow' | 'dark'; +export type TemplateCV = 'default' | 'CV-1'; +export type Language = 'es' | 'en'; +export enum HexColor { + default = '#247A7E', + red = '#E61934', + green = '#1DB155', + orange = '#CD562F', + yellow = '#DEBC19', + dark = '#1B2B33', +} + export interface ExportHTMLSettings { - primaryColor: string; - // TODO: More settings to be added here + colorTheme: ColorTheme; + template: TemplateCV; + language: Language; +} + +export interface Settings { + colorTheme: HexColor; + template: TemplateCV; + language: Language; } + +export const createDefaultExportHTMLSettings = (): ExportHTMLSettings => ({ + colorTheme: 'default', + template: 'default', + language: 'es', +});