Commit dd8afa92 authored by Wolfgang Knopki's avatar Wolfgang Knopki
Browse files

Merge branch 'testing' into 'prepareprod'

Testing

See merge request !36
parents d68dd57c 03fdf274
...@@ -55,12 +55,10 @@ app.use(function(req, res, next) { ...@@ -55,12 +55,10 @@ app.use(function(req, res, next) {
next() next()
}) })
//require('./routes/routes-account')(app, config, passport, i18n);
require('./routes/routes-project')(app, config, passport) require('./routes/routes-project')(app, config, passport)
// Handle 404 // Handle 404
app.use(function (req, res, next) { app.use(function (req, res, next) {
//res.status(404).send('404: Page not Found', 404)
res.status(404).render('./DE/404') res.status(404).render('./DE/404')
}) })
......
...@@ -29,6 +29,9 @@ module.exports = { ...@@ -29,6 +29,9 @@ module.exports = {
authPass: 'passwordmail', authPass: 'passwordmail',
tlsCiphers: 'SSLv3', tlsCiphers: 'SSLv3',
from: 'email_from', from: 'email_from',
},
gitlab: {
token_readWriteProjects: 'putyourtokenhere'
} }
}, },
testing: { testing: {
...@@ -61,6 +64,9 @@ module.exports = { ...@@ -61,6 +64,9 @@ module.exports = {
authPass: 'passwordmail', authPass: 'passwordmail',
tlsCiphers: 'SSLv3', tlsCiphers: 'SSLv3',
from: 'email_from', from: 'email_from',
},
gitlab: {
token_readWriteProjects: 'putyourtokenhere'
} }
}, },
production: { production: {
......
This diff is collapsed.
...@@ -7,8 +7,7 @@ ...@@ -7,8 +7,7 @@
"email": "rosanny.sihombing@hft-stuttgart.de" "email": "rosanny.sihombing@hft-stuttgart.de"
}, },
"keywords": [ "keywords": [
"m4_lab", "m4_lab"
"prjects"
], ],
"repository": { "repository": {
"type": "git", "type": "git",
...@@ -20,7 +19,7 @@ ...@@ -20,7 +19,7 @@
}, },
"dependencies": { "dependencies": {
"async": "^3.2.0", "async": "^3.2.0",
"axios": "^0.20.0", "axios": "^0.21.1",
"body-parser": "^1.19.0", "body-parser": "^1.19.0",
"compression": "^1.7.4", "compression": "^1.7.4",
"cookie-parser": "1.4.3", "cookie-parser": "1.4.3",
...@@ -34,8 +33,8 @@ ...@@ -34,8 +33,8 @@
"morgan": "^1.10.0", "morgan": "^1.10.0",
"mysql": "^2.18.1", "mysql": "^2.18.1",
"passport": "0.3.2", "passport": "0.3.2",
"passport-saml": "^1.3.4", "passport-saml": "^2.0.6",
"pug": "^2.0.4" "pug": "^3.0.2"
}, },
"engines": { "engines": {
"node": ">= 4.0.0" "node": ">= 4.0.0"
......
const axios = require('axios')
var gitlab = {
getProjects: async function(perPage, idAfter) {
try {
let projects = await axios({
method: 'get',
url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects?visibility=public&pagination=keyset&per_page='+perPage+'&order_by=id&sort=asc&id_after='+idAfter
})
let data = projects.data
let reposArr = []
let pagesArr = []
for(let i = 0; i < data.length; i++){
// skip template project
if (data[i].name == 'page_basic' || data[i].name == 'generic' || data[i].name == 'simple_raw' || data[i].name == 'simple_thesis') {
continue
} else if(data[i].tag_list.includes('website')) {
pagesArr.push(data[i])
} else {
reposArr.push(data[i])
}
}
return {
error: false,
data: [reposArr, pagesArr]}
}
catch (err) {
return {
error: true,
data: err}
}
},
getLatestPipelineStatus: async function(projectId) {
return axios({
method: 'get',
url: 'https://transfer.hft-stuttgart.de/gitlab/api/v4/projects/'+projectId+'/pipelines'
})
.then(res => res.data[0].status)
.catch(err => console.error(err))
}
}
module.exports = gitlab
\ No newline at end of file
const fs = require('fs')
//const SamlStrategy = require('passport-saml').Strategy //const SamlStrategy = require('passport-saml').Strategy
const dbconn = require('./dbconn')
const methods = require('./methods') const methods = require('./methods')
const gitlab = require('./gitlab')
// pwd encryption // pwd encryption
//const bcrypt = require('bcryptjs'); //const bcrypt = require('bcryptjs');
//const saltRounds = 10; //const saltRounds = 10;
...@@ -10,10 +9,8 @@ const methods = require('./methods') ...@@ -10,10 +9,8 @@ const methods = require('./methods')
const async = require('async') const async = require('async')
//const crypto = require('crypto') //const crypto = require('crypto')
//const mailer = require('./mailer') //const mailer = require('./mailer')
const helpers = require('./helpers') const helpers = require('./helpers')
const pictSizeLimit = 1000000 // 1 MB const pictSizeLimit = 1000000 // 1 MB
const axios = require('axios')
module.exports = function (app) { module.exports = function (app) {
...@@ -53,59 +50,6 @@ module.exports = function (app) { ...@@ -53,59 +50,6 @@ module.exports = function (app) {
]) ])
}) })
app.get('/project_', function (req, res) {
async.waterfall([
// get all projects from projectdb
function(done) {
methods.getAllProjects(function(projectsOverview, err) {
if (!err) {
done(err, projectsOverview)
}
})
},
// create JSON object for front-end
function(projectsOverview, done) {
var activeProjects = []
var nonActiveProjects = []
for (var i = 0; i < projectsOverview.length; i++) {
var project = {
id: projectsOverview[i].id,
logo: projectsOverview[i].logo,
akronym: projectsOverview[i].pname,
title: projectsOverview[i].title,
summary: projectsOverview[i].onelinesummary,
category: projectsOverview[i].category,
cp: projectsOverview[i].contact_email,
gitlab: projectsOverview[i].gitlab
}
if (projectsOverview[i].projectstatus == 0) {
nonActiveProjects.push(project)
}
else if (projectsOverview[i].projectstatus == 1) {
activeProjects.push(project)
}
}
// render the page
if (req.isAuthenticated()) {
res.render(lang+'/project/projects', {
isUserAuthenticated: true,
nonActive: nonActiveProjects,
active: activeProjects
});
}
else {
res.render(lang+'/project/projects', {
isUserAuthenticated: false,
nonActive: nonActiveProjects,
active: activeProjects
});
}
}
])
})
app.get('/', function (req, res) { app.get('/', function (req, res) {
res.render(lang+'/project/project-simplified', { res.render(lang+'/project/project-simplified', {
isUserAuthenticated: req.isAuthenticated(), isUserAuthenticated: req.isAuthenticated(),
...@@ -121,52 +65,6 @@ module.exports = function (app) { ...@@ -121,52 +65,6 @@ module.exports = function (app) {
res.redirect('/login') res.redirect('/login')
} }
}) })
app.post('/addprojectoverview__', function (req, res) {
if (req.isAuthenticated()) {
var wiki = 0
if (req.body.wiki)
wiki = 1
var projectTerm = req.body.termForm + " - " + req.body.termTo
var projectOverviewData = {
pname: req.body.pname,
title: req.body.title,
onelinesummary: req.body.summary,
category: req.body.category,
logo: req.body.logo,
gitlab: req.body.gitlabURL,
wiki: wiki,
overview: req.body.overview,
question: req.body.question,
approach: req.body.approach,
result: req.body.result,
keywords: req.body.keywords,
announcement: req.body.announcement,
term: projectTerm,
further_details: req.body.furtherDetails,
website: req.body.website,
src: req.body.src,
caption: req.body.caption,
contact_lastname: req.body.contactName,
contact_email: req.body.contactEmail,
leader_lastname: req.body.leaderName,
leader_email: req.body.leaderEmail
}
methods.addProjectOverview(projectOverviewData, function(err){
if (err) {
//req.flash('error', "Failed")
req.flash('error', "Fehlgeschlagen")
res.redirect('/addProjectOverview');
}
else {
req.flash('success', 'Your project has been created.')
res.redirect('/project');
}
})
}
})
app.post('/addprojectoverview', function (req, res) { app.post('/addprojectoverview', function (req, res) {
if (req.isAuthenticated()) { if (req.isAuthenticated()) {
...@@ -304,10 +202,6 @@ module.exports = function (app) { ...@@ -304,10 +202,6 @@ module.exports = function (app) {
} }
}) })
app.get('/updateprojectoverview', function (req, res) {
// only their own project
})
app.post('/updateprojectoverview', function (req, res) { app.post('/updateprojectoverview', function (req, res) {
// only their own project // only their own project
}) })
...@@ -356,12 +250,6 @@ module.exports = function (app) { ...@@ -356,12 +250,6 @@ module.exports = function (app) {
]) ])
}) })
async function getProjectsFromGitlab(perPage, idAfter) {
// public projects
return await axios.get('https://transfer.hft-stuttgart.de/gitlab/api/v4/projects?visibility=public&pagination=keyset&per_page='+
perPage+'&order_by=id&sort=asc&id_after='+idAfter)
}
// Projektdaten // Projektdaten
app.get('/projektdaten', async function(req, res){ app.get('/projektdaten', async function(req, res){
let projectArr = [] let projectArr = []
...@@ -369,40 +257,32 @@ module.exports = function (app) { ...@@ -369,40 +257,32 @@ module.exports = function (app) {
let firstId = 0 let firstId = 0
while (isProject == true) { while (isProject == true) {
let projects = await getProjectsFromGitlab(10, firstId) let projects = await gitlab.getProjects(100, firstId)
let projectData = projects.data let projectData = projects.data[0]
if (projectData.length == 0) { if (projectData.length == 0) {
isProject = false isProject = false
} }
else { else {
for(let i = 0; i < projectData.length; i++){ for(let i = 0; i < projectData.length; i++){
// skip template project // M4_LAB logo for all projects that do not have logo
if (projectData[i].name == "template_gitlab_page") { if (projectData[i].avatar_url == null) {
continue projectData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/footer/M4_LAB_LOGO_Graustufen.png"
}
// for all projects that have no description
if (projectData[i].description == "") {
projectData[i].description = "- no description -"
} }
// only repo
if (!projectData[i].tag_list.includes('website')) {
// M4_LAB logo for all projects that do not have logo
if (projectData[i].avatar_url == null) {
projectData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/footer/M4_LAB_LOGO_Graustufen.png"
}
// for all projects that have no description
if (projectData[i].description == "") {
projectData[i].description = "- no description -"
}
let project = { let project = {
logo: projectData[i].avatar_url, logo: projectData[i].avatar_url,
name: projectData[i].name, name: projectData[i].name,
weburl: projectData[i].web_url, weburl: projectData[i].web_url,
desc: projectData[i].description, desc: projectData[i].description,
keywords: projectData[i].tag_list keywords: projectData[i].tag_list
}
projectArr.push(project)
} }
projectArr.push(project)
} }
firstId = projectData[projectData.length-1].id firstId = projectData[projectData.length-1].id
} }
} }
...@@ -419,61 +299,58 @@ module.exports = function (app) { ...@@ -419,61 +299,58 @@ module.exports = function (app) {
let firstId = 0 let firstId = 0
while (isProject == true) { while (isProject == true) {
let projects = await getProjectsFromGitlab(10, firstId) let projects = await gitlab.getProjects(100, firstId)
let projectData = projects.data let pagesData = projects.data[1]
if (projectData.length == 0) { if (pagesData.length == 0) {
isProject = false isProject = false
} } else {
else { for(let i = 0; i < pagesData.length; i++){
for(let i = 0; i < projectData.length; i++){ let status = await gitlab.getLatestPipelineStatus(pagesData[i].id)
// skip template project if (status) {
if (projectData[i].name == "template_gitlab_page") {
continue
}
// websites
if (projectData[i].tag_list.includes('website')) {
// M4_LAB logo for all projects that do not have logo // M4_LAB logo for all projects that do not have logo
if (projectData[i].avatar_url == null) { if (pagesData[i].avatar_url == null) {
projectData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/footer/M4_LAB_LOGO_Graustufen.png" pagesData[i].avatar_url = "https://m4lab.hft-stuttgart.de/img/footer/M4_LAB_LOGO_Graustufen.png"
} }
// for all projects that have no description // for all projects that have no description
if (projectData[i].description == "") { if (pagesData[i].description == "") {
projectData[i].description = "- no description -" pagesData[i].description = "- no description -"
} }
// customize website name // customized website name
if (projectData[i].name == "Visualization") { if (pagesData[i].name == "Visualization") {
projectData[i].web_url = "https://transfer.hft-stuttgart.de/pages/visualization" //todo: update URL - user? group?
pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/visualization"
} }
else if (projectData[i].name == "IN-Source") { else if (pagesData[i].name == "IN-Source") {
projectData[i].web_url = "https://transfer.hft-stuttgart.de/pages/INsource" //todo: update URL
pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/INsource"
} }
else if (projectData[i].name == "3DS_Visualization_Cesium") { else if (pagesData[i].name == "3DS_Visualization_Cesium") {
projectData[i].web_url = "https://transfer.hft-stuttgart.de/pages/3ds_visualization_cesium" //todo: update URL
pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/3ds_visualization_cesium"
} }
else { else {
projectData[i].web_url = "https://transfer.hft-stuttgart.de/pages/"+projectData[i].name //todo: update URL
pagesData[i].web_url = "https://transfer.hft-stuttgart.de/pages/"+pagesData[i].name
} }
// remove 'website' from tag list // remove 'website' from tag list
const index = projectData[i].tag_list.indexOf('website'); let index = pagesData[i].tag_list.indexOf('website')
if (index > -1) { if (index > -1) {
projectData[i].tag_list.splice(index, 1); pagesData[i].tag_list.splice(index, 1)
} }
// fill in pagesArr // fill in pagesArr
let pages = { let pages = {
logo: projectData[i].avatar_url, logo: pagesData[i].avatar_url,
name: projectData[i].name, name: pagesData[i].name,
weburl: projectData[i].web_url, weburl: pagesData[i].web_url,
desc: projectData[i].description, desc: pagesData[i].description,
keywords: projectData[i].tag_list keywords: pagesData[i].tag_list
} }
pagesArr.push(pages) pagesArr.push(pages)
} }
} }
firstId = pagesData[pagesData.length-1].id
firstId = projectData[projectData.length-1].id
} }
} }
......
...@@ -115,7 +115,7 @@ html(lang="de") ...@@ -115,7 +115,7 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script(src="/js/headfoot.js")
script. script.
$( function() { $( function() {
$.datepicker.setDefaults( $.datepicker.regional["de"] ); $.datepicker.setDefaults( $.datepicker.regional["de"] );
......
...@@ -11,14 +11,14 @@ html(lang="de") ...@@ -11,14 +11,14 @@ html(lang="de")
body body
div(class="container") div(class="container")
div(class="row") div(class="row")
div(class="col-md-12" style="margin-bottom: 40px;") div(class="col-md-12 margin_bottom_40")
img(class="mx-auto" src="/img/Mailinglisten.jpg" width="100%") img(class="mx-auto" src="/img/Mailinglisten.jpg" width="100%")
div(class="container") div(class="container")
div(class="row") div(class="row")
div(class="col-md-12" style="margin-bottom: 30px;") div(class="col-md-12 margin_bottom_30")
h4(class="text-center") Durch Mailinglisten können Sie interessierten Personen<br/> <strong>regelmäßig Informationen</strong> zu Ihrem Projekt oder Thema zukommen lassen.<br/> Ebenso können Sie über ein Abonnement in einer Mailingliste Mitglied des Verteilers<br/>werden und so <strong>im Austausch</strong> bleiben. <br/> h4(class="text-center") Durch Mailinglisten können Sie interessierten Personen<br/> <strong>regelmäßig Informationen</strong> zu Ihrem Projekt oder Thema zukommen lassen.<br/> Ebenso können Sie über ein Abonnement in einer Mailingliste Mitglied des Verteilers<br/>werden und so <strong>im Austausch</strong> bleiben. <br/>
div(class="col-md-12" style="margin-bottom: 30px;") div(class="col-md-12 margin_bottom_30")
h2(class="text-center" style="color: #708090;") <strong>Aktive Mailinglisten</strong> h2(class="text-center color_708090") <strong>Aktive Mailinglisten</strong>
div(class="table-responsive table-borderless") div(class="table-responsive table-borderless")
table(class="table table-striped table-bordered table-hover") table(class="table table-striped table-bordered table-hover")
thead() thead()
...@@ -35,40 +35,40 @@ html(lang="de") ...@@ -35,40 +35,40 @@ html(lang="de")
td <a href="#{item.src}">#{item.src}</a> td <a href="#{item.src}">#{item.src}</a>
td <a href='projectoverview?projectID=#{item.id}'>#{item.project_title}</a> td <a href='projectoverview?projectID=#{item.id}'>#{item.project_title}</a>
td #{item.keywords} td #{item.keywords}
div(id="aboText" style="background-color: #dadada;margin-top: 40px;") div(id="aboText" class="mailingList_aboText")
div(class="container") div(class="container")
div(class="row" style="margin-bottom: 0;padding-top: 20px;padding-bottom: 20px;") div(class="row m_bottom_0 p_top_20 p_bottom_20")
div(class="col-lg-12" style="background-color: #ffffff;") div(class="col-lg-12 background_ffffff")
h2(class="text-center" style="color: #708090;margin-top: 15px;") <strong> Mailingliste abonnieren </strong> h2(class="text-center color_708090 m_top_15") <strong> Mailingliste abonnieren </strong>
div(class="col-md-4 col-lg-6" style="background-color: #ffffff;") div(class="col-md-4 col-lg-6 background_ffffff")
p() Das Deutsche Forschungsnetz (DFN) bietet Mailinglisten für Wissenschaft und Forschung an. Mailinglisten sind E-Mail-Verteilerlisten, d.h. Personen, die sich für Ihr Forschungsthema interessieren, können sich über das DFN registrieren und erhalten im Anschluss daran regelmäßig die über die Mailinglisten geteilten Informationen. p() Das Deutsche Forschungsnetz (DFN) bietet Mailinglisten für Wissenschaft und Forschung an. Mailinglisten sind E-Mail-Verteilerlisten, d.h. Personen, die sich für Ihr Forschungsthema interessieren, können sich über das DFN registrieren und erhalten im Anschluss daran regelmäßig die über die Mailinglisten geteilten Informationen.
p() Sie als Verteiler senden die zu versendende Mail folglich nur noch an die festgelegte Mailinglistenadresse und das Programm leitet die Nachricht an alle registrierten Personen weiter. p() Sie als Verteiler senden die zu versendende Mail folglich nur noch an die festgelegte Mailinglistenadresse und das Programm leitet die Nachricht an alle registrierten Personen weiter.
div(class="col-md-4 col-lg-6 justify-content-between flex-wrap" style="background-color: #ffffff;") div(class="col-md-4 col-lg-6 justify-content-between flex-wrap background_ffffff")
div(class="justify-content-between order-2" style="background-color: rgba(255,255,255,0);") div(class="justify-content-between order-2 background_ffffff")
p(class="text-left d-flex d-md-flex flex-row flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-start align-content-start align-self-start flex-wrap order-1 justify-content-md-center align-items-md-start justify-content-lg-start") Oben finden Sie eine Übersicht über die aktiven Mailinglisten. Wenn Sie sich in eine Mailingliste eintragen wollen, dann klicken Sie auf den entsprechend hinterlegten Link. p(class="text-left d-flex d-md-flex flex-row flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-start align-content-start align-self-start flex-wrap order-1 justify-content-md-center align-items-md-start justify-content-lg-start") Oben finden Sie eine Übersicht über die aktiven Mailinglisten. Wenn Sie sich in eine Mailingliste eintragen wollen, dann klicken Sie auf den entsprechend hinterlegten Link.
p() Es öffnet sich daraufhin die Hauptseite der Liste. Nach der Auswahl des Buttons "Abonnieren", können Sie Ihre Mailadresse hinterlegen und sich in die Liste eintragen. p() Es öffnet sich daraufhin die Hauptseite der Liste. Nach der Auswahl des Buttons "Abonnieren", können Sie Ihre Mailadresse hinterlegen und sich in die Liste eintragen.
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B; margin-top:10px; margin-bottom:10px;" href="/downloads/Handout_Mailinglisten_Abonnieren.pdf") <strong>Erste Schritte (Anleitung als PDF)</strong> a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto background_e0001b m_top_10" role="button" href="/downloads/Handout_Mailinglisten_Abonnieren.pdf") <strong>Erste Schritte (Anleitung als PDF)</strong>
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap mb-auto justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B;" href="https://www.listserv.dfn.de/sympa/help") <strong>Weitergehende Dokumentation bei DFN (externer Link)</strong> a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap mb-auto justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto background_e0001b m_top_10" role="button" href="https://www.listserv.dfn.de/sympa/help") <strong>Weitergehende Dokumentation bei DFN (externer Link)</strong>
div(id="newListText" style="background-color: #dadada;margin-top: 0px;") div(id="newListText" class="mailingList_text")
div(class="container") div(class="container")
div(class="row" style="margin-bottom: 0;padding-top: 20px;padding-bottom: 20px;") div(class="row m_bottom_0 p_top_20 p_bottom_20")
div(class="col-lg-12" style="background-color: #ffffff;") div(class="col-lg-12 background_ffffff")
h2(class="text-center" style="color: #708090;margin-top: 15px;") <strong>Neue Mailingliste erstellen</strong> h2(class="text-center color_708090 m_top_15") <strong>Neue Mailingliste erstellen</strong>
div(class="col-md-4 col-lg-6" style="background-color: #ffffff;") div(class="col-md-4 col-lg-6 background_ffffff")
p() Über das Transferportal können Sie selbst eine Liste zu Ihrem Projekt anlegen, um mit Ihren Partnern in Verbindung zu bleiben. p() Über das Transferportal können Sie selbst eine Liste zu Ihrem Projekt anlegen, um mit Ihren Partnern in Verbindung zu bleiben.
p() Folgen Sie hierzu der Anleitung des DFN. p() Folgen Sie hierzu der Anleitung des DFN.
div(class="col-md-4 col-lg-6 justify-content-between flex-wrap" style="background-color: #ffffff;") div(class="col-md-4 col-lg-6 justify-content-between flex-wrap background_ffffff")
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B; margin-top:10px; margin-top:10px;" href="/downloads/Handout_Mailinglisten_Erstellen.pdf") <strong>Erste Schritte (Anleitung als PDF)</strong> a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto background_e0001b m_top_10" role="button" href="/downloads/Handout_Mailinglisten_Erstellen.pdf") <strong>Erste Schritte (Anleitung als PDF)</strong>
a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto" role="button" style="background-color: #E0001B; margin-top:10px; margin-top:10px;" href="https://www.listserv.dfn.de/sympa/help/admin") <strong>Gesamtes Tutorial bei DFN (externer Link)</strong> a(class="btn btn-primary text-center d-inline-flex d-lg-flex flex-column flex-grow-1 flex-shrink-1 flex-fill justify-content-between align-items-baseline align-content-center align-self-baseline flex-wrap order-3 justify-content-md-center align-items-md-end align-items-lg-center justify-content-xl-center mx-auto background_e0001b m_top_10" role="button" href="https://www.listserv.dfn.de/sympa/help/admin") <strong>Gesamtes Tutorial bei DFN (externer Link)</strong>
div(id="addListText" style="background-color: #dadada;margin-top: 0px;") div(id="addListText" class="mailingList_text")
div(class="container") div(class="container")
div(class="row" style="margin-bottom: 0;padding-top: 20px;padding-bottom: 20px;") div(class="row m_bottom_0 p_top_20 p_bottom_20")
div(class="col-lg-12" style="background-color: #ffffff;") div(class="col-lg-12 background_ffffff")
h2(class="text-center" style="color: #708090;margin-top: 15px;") <strong>Neue Mailingliste eintragen</strong> h2(class="text-center color_708090 m_top_15") <strong>Neue Mailingliste eintragen</strong>
div(class="col-xl" style="background-color: #ffffff;") div(class="col-xl background_ffffff")
p() Um Ihre beim DFN angelegte Mailingliste hier aufzunehmen, schicken Sie uns bitte eine Email an <a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a> p() Um Ihre beim DFN angelegte Mailingliste hier aufzunehmen, schicken Sie uns bitte eine Email an <a href="mailto:support-transfer@hft-stuttgart.de">support-transfer@hft-stuttgart.de</a>
// jQuery // jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js") script(src="https://code.jquery.com/jquery-3.3.1.min.js")
......
...@@ -115,7 +115,7 @@ html(lang="de") ...@@ -115,7 +115,7 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
script(src="https://transfer.hft-stuttgart.de/js/headfootLogout.js") script(src="/js/headfootLogout.js")
script. script.
$( function() { $( function() {
$.datepicker.setDefaults( $.datepicker.regional["de"] ); $.datepicker.setDefaults( $.datepicker.regional["de"] );
......
...@@ -4,8 +4,8 @@ html(lang="de") ...@@ -4,8 +4,8 @@ html(lang="de")
title= "Projektinformationen" title= "Projektinformationen"
meta(charset="UTF-8") meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap.min.css") link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/m4lab.css") link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style. style.
.title-container { .title-container {
...@@ -29,7 +29,7 @@ html(lang="de") ...@@ -29,7 +29,7 @@ html(lang="de")
body body
div(class="container") div(class="container")
div(class="row") div(class="row")
div(class="col-md-12" style="margin-bottom: 40px;") div(class="col-md-12 margin_bottom_40")
img(class="mx-auto" src="/img/Projektinformationen.png" width="100%") img(class="mx-auto" src="/img/Projektinformationen.png" width="100%")
div(class="container") div(class="container")
div(class="pt-4 pb-4 form-row") div(class="pt-4 pb-4 form-row")
...@@ -45,8 +45,8 @@ html(lang="de") ...@@ -45,8 +45,8 @@ html(lang="de")
p#pagesCounter #{pages.length} Projektinformationen werden angezeigt p#pagesCounter #{pages.length} Projektinformationen werden angezeigt
| <div class="row"> | <div class="row">
for item in pages for item in pages
div(class="py-4 col-sm") div(class="card-deck py-4 col-sm")
div(class="card", style="width: 18rem;") div(class="card width_18")
div(class="title-container") div(class="title-container")
h5(class="card-title-bottom-left") #{item.name} h5(class="card-title-bottom-left") #{item.name}
img(class="card-img-top", src=item.logo) img(class="card-img-top", src=item.logo)
...@@ -59,9 +59,10 @@ html(lang="de") ...@@ -59,9 +59,10 @@ html(lang="de")
div(class="row") div(class="row")
div(class="col-9") div(class="col-9")
p(class="card-text") #{item.desc} p(class="card-text") #{item.desc}
div(class="col-3") a(href=item.weburl, class="no_text_decoration", target="_blank")
svg(class="bi bi-chevron-right", width="32", height="32", viewBox="0 0 20 20", fill="currentColor", xmlns="http://www.w3.org/2000/svg") div(class="col-3")
| <a xlink:href="#{item.weburl}" target="_blank"><path fill-rule="evenodd" d="M6.646 3.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0 01-.708-.708L12.293 10 6.646 4.354a.5.5 0 010-.708z"></path></a> svg(class="bi bi-chevron-right", width="32", height="32", viewBox="0 0 20 20", fill="black", xmlns="http://www.w3.org/2000/svg")
| <path fill-rule="evenodd" d="M6.646 3.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0 01-.708-.708L12.293 10 6.646 4.354a.5.5 0 010-.708z"></path>
| </div> | </div>
// jQuery // jQuery
......
<div> <div>
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-12" style="margin-bottom: 40px;"><img class="mx-auto" src="/img/Projekte.png" <div class="col-md-12 margin_bottom_40"><img class="mx-auto" src="/img/Projekte.png"
width="100%"></div> width="100%"></div>
</div> </div>
</div> </div>
...@@ -9,7 +9,7 @@ ...@@ -9,7 +9,7 @@
<div> <div>
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-md-12" style="margin-bottom: 30px;"> <div class="col-md-12 margin_bottom_30">
<h4 class="text-center">Diese Seite bietet den Einstieg zu den Inhalten der unterschiedlichen Projekte, <h4 class="text-center">Diese Seite bietet den Einstieg zu den Inhalten der unterschiedlichen Projekte,
die über das Portal zur Verfügung gestellt werden.</h4> die über das Portal zur Verfügung gestellt werden.</h4>
</div> </div>
...@@ -20,7 +20,7 @@ ...@@ -20,7 +20,7 @@
<div class="container"> <div class="container">
<div class="row"> <div class="row">
<div class="col-lg-1"></div> <div class="col-lg-1"></div>
<div class="col-md-6 col-lg-4" style="padding-right: 5px;padding-left: 5px;"> <div class="col-md-6 col-lg-4 p_left_5 p_right_5">
<img class="d-flex d-lg-flex justify-content-center align-items-center align-content-center align-self-center mx-auto" <img class="d-flex d-lg-flex justify-content-center align-items-center align-content-center align-self-center mx-auto"
src="/img/Icon_Haken.png" height="150" /> src="/img/Icon_Haken.png" height="150" />
<br /> <br />
...@@ -34,7 +34,7 @@ ...@@ -34,7 +34,7 @@
</p> </p>
</div> </div>
<div class="col-lg-2"></div> <div class="col-lg-2"></div>
<div class="col-md-6 col-lg-4" style="padding-right: 5px;padding-left: 5px;"> <div class="col-md-6 col-lg-4 p_left_5 p_right_5">
<img src="/img/Icon_Sandclock.png" <img src="/img/Icon_Sandclock.png"
class="d-flex d-lg-flex justify-content-center align-items-center align-content-center align-self-center mx-auto" class="d-flex d-lg-flex justify-content-center align-items-center align-content-center align-self-center mx-auto"
height="150px" /> height="150px" />
......
...@@ -4,8 +4,8 @@ html(lang="de") ...@@ -4,8 +4,8 @@ html(lang="de")
title= "Projektdaten" title= "Projektdaten"
meta(charset="UTF-8") meta(charset="UTF-8")
meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no") meta(name="viewport", content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/bootstrap.min.css") link(rel="stylesheet", type="text/css", href="/css/bootstrap.min.css")
link(rel="stylesheet", type="text/css", href="https://transfer.hft-stuttgart.de/css/m4lab.css") link(rel="stylesheet", type="text/css", href="/css/m4lab.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous") link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style. style.
.title-container { .title-container {
...@@ -29,7 +29,7 @@ html(lang="de") ...@@ -29,7 +29,7 @@ html(lang="de")
body body
div(class="container") div(class="container")
div(class="row") div(class="row")
div(class="col-md-12" style="margin-bottom: 40px;") div(class="col-md-12 margin_bottom_40")
img(class="mx-auto" src="/img/ProjektcodeDaten.png" width="100%") img(class="mx-auto" src="/img/ProjektcodeDaten.png" width="100%")
div(class="container") div(class="container")
div(class="pt-4 pb-4 form-row") div(class="pt-4 pb-4 form-row")
...@@ -45,8 +45,8 @@ html(lang="de") ...@@ -45,8 +45,8 @@ html(lang="de")
p#projectCounter #{project.length} Projektdaten werden angezeigt p#projectCounter #{project.length} Projektdaten werden angezeigt
| <div class="row"> | <div class="row">
for item in project for item in project
div(class="py-4 col-sm") div(class="card-deck py-4 col-sm")
div(class="card", style="width: 18rem;") div(class="card width_18")
div(class="title-container") div(class="title-container")
h5(class="card-title-bottom-left") #{item.name} h5(class="card-title-bottom-left") #{item.name}
img(class="card-img-top", src=item.logo) img(class="card-img-top", src=item.logo)
...@@ -59,9 +59,10 @@ html(lang="de") ...@@ -59,9 +59,10 @@ html(lang="de")
div(class="row") div(class="row")
div(class="col-9") div(class="col-9")
p(class="card-text") #{item.desc} p(class="card-text") #{item.desc}
div(class="col-3") a(href=item.weburl, class="no_text_decoration", target="_blank")
svg(class="bi bi-chevron-right", width="32", height="32", viewBox="0 0 20 20", fill="currentColor", xmlns="http://www.w3.org/2000/svg") div(class="col-3")
| <a xlink:href="#{item.weburl}" target="_blank"><path fill-rule="evenodd" d="M6.646 3.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0 01-.708-.708L12.293 10 6.646 4.354a.5.5 0 010-.708z"></path></a> svg(class="bi bi-chevron-right", width="32", height="32", viewBox="0 0 20 20", fill="black", xmlns="http://www.w3.org/2000/svg")
| <path fill-rule="evenodd" d="M6.646 3.646a.5.5 0 01.708 0l6 6a.5.5 0 010 .708l-6 6a.5.5 0 01-.708-.708L12.293 10 6.646 4.354a.5.5 0 010-.708z"></path>
| </div> | </div>
// jQuery // jQuery
......
...@@ -14,14 +14,14 @@ html(lang="de") ...@@ -14,14 +14,14 @@ html(lang="de")
div(class="row") div(class="row")
div(class="col-sm-8 pt-3") div(class="col-sm-8 pt-3")
h1 #{project.title} h1 #{project.title}
div(style="float:right; margin-left:30px; margin-bottom:0px; width:50%;") div(class="project_overview")
img(src=project.src, width="100%") img(src=project.src, width="100%")
p(style="text-align:right") #{project.caption} p(class="text-center mr-5") #{project.caption}
h2(class="pt-4") Projektüberblick h2(class="pt-4") Projektüberblick
p !{project.overview} p !{project.overview}
br br
b keywords: b keywords: &nbsp;
span #{project.keywords} span #{project.keywords}
h2(class="pt-4") Fragestellung h2(class="pt-4") Fragestellung
p !{project.question} p !{project.question}
...@@ -29,7 +29,7 @@ html(lang="de") ...@@ -29,7 +29,7 @@ html(lang="de")
p !{project.approach} p !{project.approach}
h2(class="pt-4") Ergebnis und Nutzung h2(class="pt-4") Ergebnis und Nutzung
p !{project.result} p !{project.result}
div(class="col-sm-4 pt-3" style="background-color: #f1f1f1") div(class="col-sm-4 pt-3 background_f1f1f1")
for image in projectImgs for image in projectImgs
if image.pos == '2' || image.pos == '3' if image.pos == '2' || image.pos == '3'
div(class="projectimg") div(class="projectimg")
...@@ -115,7 +115,7 @@ html(lang="de") ...@@ -115,7 +115,7 @@ html(lang="de")
span !{project.further_details} span !{project.further_details}
if project.pname == 'M4LAB' if project.pname == 'M4LAB'
div(class="Downloads" style="height:200px;") div(class="Downloads")
h5 Downloads h5 Downloads
div(class="Projektlogos") div(class="Projektlogos")
......
...@@ -88,4 +88,4 @@ html(lang="de") ...@@ -88,4 +88,4 @@ html(lang="de")
// Bootstrap // Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous") script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header // Header
script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script(src="/js/headfoot.js")
\ No newline at end of file \ No newline at end of file
...@@ -30,7 +30,7 @@ html(lang="en") ...@@ -30,7 +30,7 @@ html(lang="en")
<hr /> <hr />
div() div()
h5(align="left") Aktive Mailinglisten h5(align="left") Aktive Mailinglisten
div(class="flex-container" style="align-items:flex-start") div(class="flex-container mailinglist_activetable")
div(class="table") div(class="table")
table(border="0" id="listtable" class="table table-striped") table(border="0" id="listtable" class="table table-striped")
thead thead
...@@ -58,4 +58,4 @@ html(lang="en") ...@@ -58,4 +58,4 @@ html(lang="en")
if isUserAuthenticated if isUserAuthenticated
script(src="/js/headfootLogout.js") script(src="/js/headfootLogout.js")
else else
script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script(src="/js/headfoot.js")
\ No newline at end of file \ No newline at end of file
...@@ -114,4 +114,4 @@ html(lang="de") ...@@ -114,4 +114,4 @@ html(lang="de")
if isUserAuthenticated if isUserAuthenticated
script(src="/js/headfootLogout.js") script(src="/js/headfootLogout.js")
else else
script(src="https://transfer.hft-stuttgart.de/js/headfoot.js") script(src="/js/headfoot.js")
\ No newline at end of file \ No newline at end of file
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment