Skip to content

Commit 43eb8c9

Browse files
committed
new version with all pages
1 parent 2b0fc1d commit 43eb8c9

File tree

8 files changed

+296
-2
lines changed

8 files changed

+296
-2
lines changed

.github/workflows/deploy.yml

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,14 @@ jobs:
5353
with:
5454
node-version: "20"
5555
cache: ${{ steps.detect-package-manager.outputs.manager }}
56+
#- name: Setup Pages
57+
# uses: actions/configure-pages@v4
58+
# with:
59+
# Automatically inject basePath in your Next.js configuration file and disable
60+
# server side image optimization (https://nextjs.org/docs/api-reference/next/image#unoptimized).
61+
#
62+
# You may remove this line if you want to manage the configuration yourself.
63+
# static_site_generator: next
5664
- name: Restore cache
5765
uses: actions/cache@v4
5866
with:
@@ -74,7 +82,7 @@ jobs:
7482
- name: Upload artifact
7583
uses: actions/upload-pages-artifact@v3
7684
with:
77-
path: ./mybuild
85+
path: ./out
7886

7987
# Deployment job
8088
deploy:

app/about/page.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"use client"
2+
3+
import Header from "@/components/Header";
4+
import Footer from "@/components/Footer";
5+
6+
export default function About (props) {
7+
8+
return (
9+
<div className="about">
10+
<Header route={"/about"}/>
11+
<main>
12+
<section className="about_description">
13+
14+
<p>We have gathered a long teaching experience at the University. Our main research interests are focused
15+
on the last technologies in Internet and the WWW, such as HTML5. We have extensive experience in
16+
video-conferencing systems, social networks websites and e-Learning. Our latest participation in
17+
research projects include ongoing EU-founded projects such as Global Excursions and FI-WARE</p>
18+
19+
</section>
20+
21+
<h2>Where are we?</h2>
22+
<section className="location">
23+
24+
<div className="col1">
25+
<div className="location_map map-responsive">
26+
<iframe title="maps"
27+
src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3036.0248536844406!2d-3.7286225846430923!3d40.45258687936105!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0xd422834b7a8fb4d%3A0x2a3c66a12ada73f9!2sUPM+Escuela+T%C3%A9cnica+Superior+de+Ingenieros+de+Telecomunicaci%C3%B3n!5e0!3m2!1ses!2ses!4v1561459882911!5m2!1ses!2ses"
28+
width="600" height="450" frameBorder="0" style={{border:0}} allowfullscreen></iframe>
29+
</div>
30+
</div>
31+
<div className="col2">
32+
<div className="location_info">
33+
<h2>E.T.S. DE INGENIEROS DE TELECOMUNICACIÓN</h2>
34+
<h3>Av. Complutense, 30, 28040 Madrid
35+
Edificio B</h3>
36+
</div>
37+
<div className="contact">
38+
<h2>Contact</h2>
39+
<ul>
40+
<li>
41+
<h3>E-mail</h3><p>[email protected]</p>
42+
</li>
43+
<li>
44+
<h3>Phone</h3><p>91 336 73 31</p>
45+
</li>
46+
<li>
47+
<h3>Fax</h3><p>91 336 73 33</p>
48+
</li>
49+
</ul>
50+
</div>
51+
</div>
52+
53+
</section>
54+
55+
</main>
56+
<Footer/>
57+
</div>
58+
);
59+
60+
}

app/research/page.js

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,89 @@
1+
"use client"
2+
3+
import { useEffect, useState } from "react";
4+
import Header from "@/components/Header";
5+
import Footer from "@/components/Footer";
6+
import Filters from "@/components/Filters";
7+
import Link from 'next/link';
8+
import { mypublications } from '@/constants/publications';
9+
10+
11+
export default function Research() {
12+
const [state, setState] = useState({papers: mypublications, search: "", year: undefined, type: undefined});
13+
14+
useEffect(() => {
15+
window.scrollTo(0,0);
16+
}, []);
17+
18+
const {papers, search, year, type } = state;
19+
20+
let papersFiltered = null;
21+
22+
papersFiltered=papers.filter(paper => {
23+
return (!search || search.toLowerCase()
24+
.replace(new RegExp(/\s/g),"")
25+
.replace(new RegExp(/[àáâãäå]/g),"a")
26+
.replace(new RegExp(/æ/g),"ae")
27+
.replace(new RegExp(/ç/g),"c")
28+
.replace(new RegExp(/[èéêë]/g),"e")
29+
.replace(new RegExp(/[ìíîï]/g),"i")
30+
.replace(new RegExp(/ñ/g),"n")
31+
.replace(new RegExp(/[òóôõö]/g),"o")
32+
.replace(new RegExp(/œ/g),"oe")
33+
.replace(new RegExp(/[ùúûü]/g),"u")
34+
.replace(new RegExp(/[ýÿ]/g),"y")
35+
.replace(new RegExp(/\W/g),"")
36+
.split(" ").every(item => paper.content.toLowerCase()
37+
.replace(new RegExp(/\s/g),"")
38+
.replace(new RegExp(/[àáâãäå]/g),"a")
39+
.replace(new RegExp(/æ/g),"ae")
40+
.replace(new RegExp(/ç/g),"c")
41+
.replace(new RegExp(/[èéêë]/g),"e")
42+
.replace(new RegExp(/[ìíîï]/g),"i")
43+
.replace(new RegExp(/ñ/g),"n")
44+
.replace(new RegExp(/[òóôõö]/g),"o")
45+
.replace(new RegExp(/œ/g),"oe")
46+
.replace(new RegExp(/[ùúûü]/g),"u")
47+
.replace(new RegExp(/[ýÿ]/g),"y")
48+
.replace(new RegExp(/\W/g),"")
49+
.includes(item)))
50+
&& (!year || (paper.date && paper.date[0] && paper.date[0].toString() === year))
51+
&& (!type || (paper.type && paper.type === type));
52+
});
53+
54+
55+
56+
return (
57+
<div className="research">
58+
<Header route={"/research"}/>
59+
<main>
60+
<section className="research">
61+
<Filters search = {search} year={year} type={type} papers={papers} changeSearch={search=>setState({...state, search: search})} changeYear={year=>setState({...state, year: year})} changeType={type=>setState({...state, type: type})} results={papersFiltered instanceof Array ? papersFiltered.length : 0}/>
62+
{
63+
papersFiltered.map(({date,doi,content},ind)=>{
64+
return (
65+
<div key={ind} className="paper">
66+
<div className="paper_date">
67+
<h4>{date ? date[0] : ""}</h4>
68+
</div>
69+
70+
<div className="paper_main">
71+
<a rel="noopener noreferrer" target="_blank" href={doi}>
72+
<div className="paper_content">
73+
<div className="paper_title">
74+
<h2 dangerouslySetInnerHTML={{__html: content}}></h2>
75+
</div>
76+
</div>
77+
</a>
78+
</div>
79+
</div>
80+
);
81+
})
82+
}
83+
</section>
84+
</main>
85+
<Footer/>
86+
</div>
87+
)
88+
89+
}

app/team/page.js

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
"use client"
2+
3+
import { useEffect, useState } from "react";
4+
import Header from "@/components/Header";
5+
import Footer from "@/components/Footer";
6+
import Filters from "@/components/Filters";
7+
import Link from 'next/link';
8+
import { myteam } from '@/constants/team';
9+
10+
11+
export default function Team (props){
12+
const [team, setTeam] = useState(myteam);
13+
14+
useEffect(() => {
15+
window.scrollTo(0,0);
16+
}, []);
17+
18+
return (
19+
<div className="team">
20+
<Header route={"/team"}/>
21+
<main>
22+
<section className="teammates">
23+
{
24+
Object.values(team).map(({title,members})=>{
25+
return (<div className="teamgrouptitle" key={title}><h2>{title}</h2>
26+
{members.map(({name, description, photo, github, email})=>{
27+
const emailAddress = email ? email.split("@"):null;
28+
return (
29+
<div className="teammate" key={name}>
30+
<div className="mate_img">
31+
<a href={github} target="_blank" rel="noopener noreferrer">
32+
<img alt={"Team member"} src={process.env.PUBLIC_URL + photo} className="grayscale"/>
33+
</a>
34+
</div>
35+
36+
<div className="mate_info">
37+
<div className="mate_name">
38+
<h3>{name}</h3>
39+
</div>
40+
<div className="mate_description">
41+
<p>{description}</p>
42+
<p><b>{emailAddress ?
43+
(<span>{emailAddress[0]} <img alt="at" className="at" src={process.env.PUBLIC_URL + "/assets/img/arroba-symbol.svg"}/>
44+
{emailAddress[1]}</span>
45+
):""}</b></p>
46+
</div>
47+
</div>
48+
</div>
49+
)})}
50+
</div>)
51+
})
52+
}
53+
54+
</section>
55+
</main>
56+
<Footer/>
57+
</div>
58+
)
59+
60+
}

components/Filters.js

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
import React from 'react';
2+
3+
export default function Filters (props) {
4+
5+
function getYears(papers) {
6+
let yearSet = new Set()
7+
for (let i in papers) {
8+
try {
9+
const date = papers[i].date[0];
10+
yearSet.add(date.toString())
11+
} catch(e) {
12+
}
13+
}
14+
return Array.from(yearSet);
15+
}
16+
17+
let years = getYears(props.papers);
18+
19+
return (<div className="filters">
20+
<div className="filter">
21+
<label htmlFor="search">Search</label>
22+
<input key={" "} type={"text"} value ={props.search}
23+
onChange={e => props.changeSearch(e.target.value === "" ? undefined: e.target.value)}
24+
/>
25+
</div>
26+
<div className="filter">
27+
<label htmlFor="publication">Publication type</label>
28+
<select id="publication" name="publication" onChange={(e)=>props.changeType(e.target.value === "all" ? undefined: e.target.value)}>
29+
<option key={"all"} value={"all"}>All</option>
30+
<option key={"journal"} value={"article-journal"}>Journal article</option>
31+
<option key={"conference"} value={"paper-conference"}>Conference proceedings</option>
32+
</select>
33+
</div>
34+
<div className="filter">
35+
<label htmlFor="year">Year</label>
36+
<select id="year" name="year" onChange={(e)=>props.changeYear(e.target.value === "all" ? undefined: e.target.value)}>
37+
<option key={"all"} value={"all"}>All</option>
38+
{years.map(y=><option key={y} value={y}>{y}</option>)}
39+
</select>
40+
</div>
41+
{props.results === undefined ? null:<div><label>Results: {props.results} </label></div>}
42+
</div>)
43+
44+
}

mybuild/_events.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[{"eventName":"NEXT_CLI_SESSION_STOPPED","payload":{"nextVersion":"14.1.0","nodeVersion":"v18.17.1","cliCommand":"dev","durationMilliseconds":841839,"turboFlag":false,"pagesDir":false,"appDir":true}}]

next.config.mjs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ const nextConfig = {
2424
unoptimized: true,
2525
},
2626

27-
distDir: 'mybuild',
2827
};
2928

3029
export default nextConfig;

public/sitemap.xml

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
3+
<url>
4+
<loc>https://cyberaula.github.io</loc>
5+
<lastmod>2024-01-12</lastmod>
6+
<changefreq>monthly</changefreq>
7+
<priority>1</priority>
8+
</url>
9+
<url>
10+
<loc>https://cyberaula.github.io/projects</loc>
11+
<lastmod>2024-01-12</lastmod>
12+
<changefreq>monthly</changefreq>
13+
<priority>1</priority>
14+
</url>
15+
<url>
16+
<loc>https://cyberaula.github.io/research</loc>
17+
<lastmod>2024-01-12</lastmod>
18+
<changefreq>monthly</changefreq>
19+
<priority>1</priority>
20+
</url>
21+
<url>
22+
<loc>https://cyberaula.github.io/team</loc>
23+
<lastmod>2024-01-12</lastmod>
24+
<changefreq>monthly</changefreq>
25+
<priority>1</priority>
26+
</url>
27+
<url>
28+
<loc>https://cyberaula.github.io/about</loc>
29+
<lastmod>2024-01-12</lastmod>
30+
<changefreq>monthly</changefreq>
31+
<priority>1</priority>
32+
</url>
33+
</urlset>

0 commit comments

Comments
 (0)