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

merged with devel

parent 0cfb2bef
Pipeline #538 passed with stage
in 7 seconds
......@@ -9,6 +9,10 @@ const session = require('express-session');
const errorhandler = require('errorhandler');
const flash = require('express-flash');
const i18n = require('i18n'); // internationalization
i18n.configure({
locales:['de', 'en'],
directory: './locales'
});
var env = process.env.NODE_ENV || 'development';
const config = require('./config/config')[env];
......@@ -24,6 +28,12 @@ app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
app.use(express.static(path.join(__dirname, 'public')));
app.use(i18n.init);
app.use((req, res, next) => {
res.setLocale('de');
next();
});
app.use(session(
{
resave: true,
......@@ -48,14 +58,9 @@ app.use(function(req, res, next) {
next();
});
// internationalization (i18n)
i18n.configure({
locales:['de', 'en'],
directory: './locales'
});
app.use(i18n.init);
require('./routes/routes')(app, config, passport, i18n);
//require('./routes/routes')(app, config, passport, i18n);
require('./routes/routes-account')(app, config, passport, i18n);
require('./routes/routes-project')(app, config, passport);
//require('./routes/dbconn')(app, config);
require('./routes/api')(app, config, passport);
......
/* German initialisation for the jQuery UI date picker plugin. */
/* Written by Milian Wolff (mail@milianw.de). */
( function( factory ) {
if ( typeof define === "function" && define.amd ) {
// AMD. Register as an anonymous module.
define( [ "../widgets/datepicker" ], factory );
} else {
// Browser globals
factory( jQuery.datepicker );
}
}( function( datepicker ) {
datepicker.regional.de = {
closeText: "Schließen",
prevText: "<Zurück",
nextText: "Vor>",
currentText: "Heute",
monthNames: [ "Januar","Februar","März","April","Mai","Juni",
"Juli","August","September","Oktober","November","Dezember" ],
monthNamesShort: [ "Jan","Feb","Mär","Apr","Mai","Jun",
"Jul","Aug","Sep","Okt","Nov","Dez" ],
dayNames: [ "Sonntag","Montag","Dienstag","Mittwoch","Donnerstag","Freitag","Samstag" ],
dayNamesShort: [ "So","Mo","Di","Mi","Do","Fr","Sa" ],
dayNamesMin: [ "So","Mo","Di","Mi","Do","Fr","Sa" ],
weekHeader: "KW",
dateFormat: "dd.mm.yy",
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: "" };
datepicker.setDefaults( datepicker.regional.de );
return datepicker.regional.de;
} ) );
\ No newline at end of file
const nodemailer = require('nodemailer')
var env = process.env.NODE_ENV || 'development';
const config = require('../config/config')[env]
var smtpTransport = nodemailer.createTransport({
host: config.mailer.host,
secureConnection: config.mailer.secureConnection,
port: config.mailer.port,
auth: {
user: config.mailer.authUser,
pass: config.mailer.authPass
},
tls: {
ciphers: config.mailer.tlsCiphers
}
});
var mailOptions = {
to: "",
from: config.mailer.from,
subject: "",
text: ""
};
var mailer = {
transport: smtpTransport,
options: mailOptions
}
module.exports = mailer
\ No newline at end of file
......@@ -9,7 +9,7 @@ const salt = 64; // salt length
// forgot pwd
const async = require('async')
const crypto = require('crypto')
const nodemailer = require('nodemailer')
const mailer = require('./mailer')
module.exports = function (app, config, passport, i18n) {
......@@ -74,28 +74,17 @@ module.exports = function (app, config, passport, i18n) {
res.status(200).send(spMetadata);
}
);
// ======== NODEMAILER ====================
var smtpTransport = nodemailer.createTransport({
host: config.mailer.host,
secureConnection: config.mailer.secureConnection,
port: config.mailer.port,
auth: {
user: config.mailer.authUser,
pass: config.mailer.authPass
},
tls: {
ciphers: config.mailer.tlsCiphers
}
// ================ test i18n ==================
i18n.setLocale('de');
app.get('/de', function(req, res) {
var greeting = i18n.__('Hello World')
res.send(greeting)
});
var mailOptions = {
to: "",
from: config.mailer.from,
subject: "",
text: ""
};
var lang = 'DE'
// ======== APP ROUTES - ACCOUNT ====================
var updatePasswordMailSubject = "Ihr Passwort für das Transferportal wurde gespeichert."
var mailSignature = "Mit den besten Grüßen,\ndas Transferportal-Team der HFT Stuttgart\n\n"+
"Transferportal der Hochschule für Technik Stuttgart\n"+
......@@ -104,17 +93,7 @@ module.exports = function (app, config, passport, i18n) {
"m4lab@hft-stuttgart.de\n"+
"https://transfer.hft-stuttgart.de"
var updatePasswordMailContent = "Lieber Nutzer,\n\n"+"Ihr Passwort wurde erfolgreich geändert.\n\n"+mailSignature
// ================ test i18n ==================
i18n.setLocale('de');
app.get('/de', function(req, res) {
var greeting = i18n.__('Hello World')
res.send(greeting)
});
var lang = 'DE'
// ======== APP ROUTES - ACCOUNT ====================
app.get('/', function (req, res) {
if (req.isAuthenticated()) {
methods.getUserByEmail(req.user.email, function(data, err){
......@@ -332,11 +311,11 @@ module.exports = function (app, config, passport, i18n) {
else {
//req.flash('success', "Pasword updated!")
req.flash('success', "Passwort aktualisiert!")
mailOptions.to = req.user.email
mailer.options.to = req.user.email
//mailOptions.subject = "Your M4_LAB Password has been updated."
mailOptions.subject = updatePasswordMailSubject
mailOptions.text = updatePasswordMailContent
smtpTransport.sendMail(mailOptions, function(err) {
mailer.options.subject = updatePasswordMailSubject
mailer.options.text = updatePasswordMailContent
mailer.transport.sendMail(mailer.options, function(err) {
if (err) {
console.log(err)
}
......@@ -407,10 +386,10 @@ module.exports = function (app, config, passport, i18n) {
});
// send email
mailOptions.to = emailAddress;
mailOptions.subject = emailSubject;
mailOptions.text = emailContent;
smtpTransport.sendMail(mailOptions, function(err) {
mailer.options.to = emailAddress;
mailer.options.subject = emailSubject;
mailer.options.text = emailContent;
mailer.transport.sendMail(mailer.options, function(err) {
done(err, 'done');
});
}
......@@ -470,10 +449,10 @@ module.exports = function (app, config, passport, i18n) {
//req.flash('success', "Your pasword has been updated.")
req.flash('success', "Passwort aktualisiert!")
// send notifiaction email
mailOptions.to = user.email
mailOptions.subject = updatePasswordMailSubject
mailOptions.text = updatePasswordMailContent
smtpTransport.sendMail(mailOptions, function(err) {
mailer.options.to = user.email
mailer.options.subject = updatePasswordMailSubject
mailer.options.text = updatePasswordMailContent
mailer.transport.sendMail(mailer.options, function(err) {
if (err) {
console.log(err)
}
......@@ -551,146 +530,5 @@ module.exports = function (app, config, passport, i18n) {
}
})
})
app.get('/mailinglists', function (req, res) {
async.waterfall([
function(done) {
methods.getAllMailinglists(function(mailinglistOverview, err) {
if (!err) {
done(err, mailinglistOverview)
}
})
},
// create JSON object of mailinglists for front-end
function(mailinglistOverview, done) {
var allMailingLists = [] // JSON object
for (let i = 0; i < mailinglistOverview.length; i++) {
// add data to JSON object
allMailingLists.push({
id: mailinglistOverview[i].id,
name: mailinglistOverview[i].name,
src: mailinglistOverview[i].src,
projectstatus: mailinglistOverview[i].projectstatus,
project_title: mailinglistOverview[i].project_title
});
}
res.render(lang+'/mailinglists', {
isUserAuthenticated: req.isAuthenticated(),
user: req.user,
mailinglists: allMailingLists
});
}
])
});
// ======== APP ROUTES - PROJECT ====================
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('/addprojectoverview', function (req, res) {
if (req.isAuthenticated()) {
res.render(lang+'/project/addProjectOverview')
}
else {
res.redirect('/account/login')
}
})
app.post('/addprojectoverview', function (req, res) {
if (req.isAuthenticated()) {
var wiki = 0
if (req.body.wiki)
wiki = 1
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: req.body.term,
further_details: req.body.furtherDetails,
website: req.body.website,
src: req.body.src,
caption: req.body.caption,
contact_firstname: req.body.contactFirstname,
contact_lastname: req.body.contactLastname,
contact_email: req.body.contactEmail,
leader_firstname: req.body.leaderFirstname,
leader_lastname: req.body.leaderLastname,
leader_email: req.body.leaderEmail
}
methods.addProjectOverview(projectOverviewData, function(err){
if (err) {
//req.flash('error', "Failed")
req.flash('error', "Fehlgeschlagen")
res.redirect('/account/addProjectOverview');
}
else {
req.flash('success', 'Your project has been created.')
res.redirect('/account/project');
}
})
}
})
};
\ No newline at end of file
const methods = require('./methods')
const async = require('async')
module.exports = function (app) {
// ======== APP ROUTES - PROJECT ====================
var lang = 'DE'
app.get('/mailinglists', function (req, res) {
async.waterfall([
function(done) {
methods.getAllMailinglists(function(mailinglistOverview, err) {
if (!err) {
done(err, mailinglistOverview)
}
})
},
// create JSON object of mailinglists for front-end
function(mailinglistOverview, done) {
var allMailingLists = [] // JSON object
for (let i = 0; i < mailinglistOverview.length; i++) {
// add data to JSON object
allMailingLists.push({
id: mailinglistOverview[i].id,
name: mailinglistOverview[i].name,
src: mailinglistOverview[i].src,
projectstatus: mailinglistOverview[i].projectstatus,
project_title: mailinglistOverview[i].project_title
});
}
res.render(lang+'/project/mailinglists', {
isUserAuthenticated: req.isAuthenticated(),
user: req.user,
mailinglists: allMailingLists
});
}
])
});
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('/addprojectoverview', function (req, res) {
if (req.isAuthenticated()) {
res.render(lang+'/project/addProjectOverview')
}
else {
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.get('/updateprojectoverview', function (req, res) {
// only their own project
})
app.post('/updateprojectoverview', function (req, res) {
// only their own project
})
};
\ No newline at end of file
......@@ -34,9 +34,9 @@ html(lang="de")
h5
span #{user.firstname} #{user.lastname}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste
a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
p content goes here
......
......@@ -35,8 +35,8 @@ html(lang="de")
span #{user.firstname} #{user.lastname}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="#" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste
a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
if successes
for success in successes
......
......@@ -37,9 +37,9 @@ html(lang="de")
h5
span #{user.firstName} #{user.lastName}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="#" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/account/services" aria-selected="false") Projekte und Dienste
a(class="nav-link" href="/services" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
if successes
for success in successes
......
......@@ -34,8 +34,8 @@ html(lang="de")
h5
span #{user.firstName} #{user.lastName}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/account/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="/profile" aria-selected="true") Benutzerprofil
a(class="nav-link" href="/security" aria-selected="false") Sicherheitseinstellungen
a(class="nav-link" href="#" aria-selected="false") Projekte und Dienste
div(class="col-sm-9")
if successes
......
......@@ -6,6 +6,8 @@ html(lang="de")
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/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
// jQuery UI - Datepicker
link(rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css")
style.
.collapse {
display: none;
......@@ -49,8 +51,13 @@ html(lang="de")
input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required)
div(class="form-group col-md-12")
input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project")
div(class="form-group col-md-12")
input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project")
div(class='form-group col-md-12')
select#inputCategory(name="category", class="form-control")
option(value="") - select a category -
option(value="Experten-Gruppe") Experten-Gruppe
option(value="Student-Projekt") Student-Projekt
option(value="Lehr Projekt") Lehr Projekt
option(value="Transfer-projekt") Transfer-projekt
div(class="form-group col-md-12")
input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project")
div(class="form-group col-md-12")
......@@ -64,13 +71,13 @@ html(lang="de")
h5(class="mb-3 font-weight-bold") Content
div(class='form-row')
div(class='form-group col-md-12')
textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview")
textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="Projektüberblick")
div(class="form-group col-md-12")
textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question")
textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="Fragestellung")
div(class='form-group col-md-12')
textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach")
textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="Vorgehensweise")
div(class="form-group col-md-12")
textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result")
textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="Ergebnis und Nutzung")
div(class="form-group col-md-12")
input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords")
h5(class="mb-3 font-weight-bold") Info
......@@ -78,7 +85,13 @@ html(lang="de")
div(class='form-group col-md-12')
textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung")
div(class="form-group col-md-12")
input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit")
div(class='form-row')
div(class="form-group col-md-2")
<p class="font-weight-normal">Laufzeit</p>
div(class="form-group col-md-5")
input#inputTermFrom(name="termForm" class="form-control" type="text" placeholder="von (dd.mm.yyyy)")
div(class="form-group col-md-5")
input#inputTermTo(name="termTo" class="form-control" type="text" placeholder="bis (dd.mm.yyyy)")
div(class='form-group col-md-12')
textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen")
div(class="form-group col-md-12")
......@@ -89,27 +102,37 @@ html(lang="de")
input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source")
div(class="form-group col-md-12")
input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image")
h5(class="mb-3 font-weight-bold") Contact
h5(class="mb-3 font-weight-bold") Kontakt
div(class='form-row')
div(class="form-group col-md-4")
input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname")
div(class="form-group col-md-4")
input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname")
div(class="form-group col-md-4")
input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email")
div(class="form-group col-md-4")
input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname")
div(class="form-group col-md-4")
input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname")
div(class="form-group col-md-4")
input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email")
div(class="form-group col-md-2")
<p class="font-weight-normal">Ansprechpartner</p>
div(class="form-group col-md-5")
input#inputContactName(name="contactName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname")
div(class="form-group col-md-5")
input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="E-mail Adresse")
div(class="form-group col-md-2")
<p class="font-weight-normal">Projektleitung</p>
div(class="form-group col-md-5")
input#inputLeaderName(name="leaderName" class="form-control" type="text" placeholder="Titel/Anrede Vorname Nachname")
div(class="form-group col-md-5")
input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="E-mail Adresse")
p <em><small>* Pflichtfeld</small></em>
input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen")
// jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous")
// jQuery UI - Datepicker
script(src="https://code.jquery.com/ui/1.12.1/jquery-ui.js")
script(src="/js/jquery-ui/i18n/datepicker-de.js")
//script(src="i18n/datepicker-de.js")
// Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header
script(src="/js/headfootLogout.js")
\ No newline at end of file
script(src="/js/headfootLogout.js")
script.
$( function() {
$.datepicker.setDefaults( $.datepicker.regional["de"] );
$("#inputTermFrom").datepicker();
$("#inputTermTo").datepicker();
});
\ No newline at end of file
......@@ -32,11 +32,11 @@ html(lang="en")
div(class="row")
div(class="col-3")
h5
span #{greeting}
span #{user.firstname} #{user.lastname}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="#" aria-selected="true") #{i18n.__(Profile)}
a(class="nav-link" href="/account/security" aria-selected="false") Security
a(class="nav-link" href="/account/services" aria-selected="false") Services
a(class="nav-link" href="/profile" aria-selected="true") Profile
a(class="nav-link" href="/security" aria-selected="false") Security
a(class="nav-link" href="/services" aria-selected="false") Services
div(class="col-sm-9")
p content goes here
......
......@@ -35,8 +35,8 @@ html(lang="en")
span #{user.firstname} #{user.lastname}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="#" aria-selected="true") Profile
a(class="nav-link" href="/account/security" aria-selected="false") Security
a(class="nav-link" href="/account/services" aria-selected="false") Services
a(class="nav-link" href="/security" aria-selected="false") Security
a(class="nav-link" href="/services" aria-selected="false") Services
div(class="col-sm-9")
if successes
for success in successes
......
......@@ -37,9 +37,9 @@ html(lang="en")
h5
span #{user.firstName} #{user.lastName}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Profile
a(class="nav-link" href="/profile" aria-selected="true") Profile
a(class="nav-link" href="#" aria-selected="false") Security
a(class="nav-link" href="/account/services" aria-selected="false") Services
a(class="nav-link" href="/services" aria-selected="false") Services
div(class="col-sm-9")
if successes
for success in successes
......
......@@ -34,8 +34,8 @@ html(lang="en")
h5
span #{user.firstName} #{user.lastName}
div(class="nav flex-column nav-pills", id="v-pills-tab", role="tablist", aria-orientation="vertical")
a(class="nav-link" href="/account/profile" aria-selected="true") Profile
a(class="nav-link" href="/account/security" aria-selected="false") Security
a(class="nav-link" href="/profile" aria-selected="true") Profile
a(class="nav-link" href="/security" aria-selected="false") Security
a(class="nav-link" href="#" aria-selected="false") Services
div(class="col-sm-9")
if successes
......
doctype html
html(lang="de")
head
title= "Add Project Overview"
meta(charset="UTF-8")
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/bootstrap.css")
link(rel="stylesheet", href="https://use.fontawesome.com/releases/v5.8.2/css/all.css", integrity="sha384-oS3vJWv+0UjzBfQzYUhtDYW+Pj2yciDJxpsK1OYPAYjqT085Qq/1cq5FLXAZQ7Ay", crossorigin="anonymous")
style.
.collapse {
display: none;
}
.collapse.in {
display: block;
}
.collapsing {
position: relative;
height: 0;
overflow: hidden;
-webkit-transition-timing-function: ease;
-o-transition-timing-function: ease;
transition-timing-function: ease;
-webkit-transition-duration: .35s;
-o-transition-duration: .35s;
transition-duration: .35s;
-webkit-transition-property: height,visibility;
-o-transition-property: height,visibility;
transition-property: height,visibility;
}
.warning {
color: red;
font-size: 11px;
}
body
div(class="container-fluid")
div(class="row")
div(class="col-md-6 offset-md-2")
h4(class="mb-3 font-weight-bold") Neues Projekt
div(class="col-md-6 offset-md-3")
if errors
for error, i in errors
div.alert.alert-danger.alert-dismissible.fade.show #{ error }
a(class="close", href="#", data-dismiss="alert", aria-label="close") &times;
form(method="POST")
div(class='form-row')
div(class='form-group col-md-12')
input#inputPname(name="pname" class="form-control" type="text" placeholder="human-readable short project name*" required)
div(class="form-group col-md-12")
input#inputTitle(name="title" class="form-control" type="text" placeholder="official title of the project*" required)
div(class="form-group col-md-12")
input#inputSummary(name="summary" class="form-control" type="text" placeholder="one line summary of the project")
div(class="form-group col-md-12")
input#inputCategory(name="category" class="form-control" type="text" placeholder="category of the project")
div(class="form-group col-md-12")
input#inputLogo(name="logo" class="form-control" type="text" placeholder="official logo of the project")
div(class="form-group col-md-12")
div(class="input-group mb-3")
input#inputGitlabURL(name="gitlabURL" type="text" class="form-control" placeholder="M4_LAB GitLab Project URL, z.B. https://transfer.hft-stuttgart.de/gitlab/username/projectname")
div(class="input-group-prepend")
div(class="input-group-text")
input#inputWiki(name="wiki" type="checkbox")
| &nbsp; Wiki
h5(class="mb-3 font-weight-bold") Content
div(class='form-row')
div(class='form-group col-md-12')
textarea#inputOverview(name="overview" class="form-control" type="text" rows="5" placeholder="overview")
div(class="form-group col-md-12")
textarea#inputQuestion(name="question" class="form-control" type="text" rows="5" placeholder="question")
div(class='form-group col-md-12')
textarea#inputApproach(name="approach" class="form-control" type="text" rows="5" placeholder="approach")
div(class="form-group col-md-12")
textarea#inputResult(name="result" class="form-control" type="text" rows="5" placeholder="result")
div(class="form-group col-md-12")
input#inputKeywords(name="keywords" class="form-control" type="text" placeholder="keywords")
h5(class="mb-3 font-weight-bold") Info
div(class='form-row')
div(class='form-group col-md-12')
textarea#inputAnnouncement(name="announcement" class="form-control" type="text" rows="5" placeholder="Ausschreibung")
div(class="form-group col-md-12")
input#inputTerm(name="term" class="form-control" type="text" placeholder="Laufzeit")
div(class='form-group col-md-12')
textarea#inputFurtherDetails(name="furtherDetails" class="form-control" type="text" rows="5" placeholder="Mehr informationen")
div(class="form-group col-md-12")
input#inputWebsite(name="website" class="form-control" type="text" placeholder="website")
h5(class="mb-3 font-weight-bold") Images
div(class='form-row')
div(class="form-group col-md-12")
input#inputSrc(name="src" class="form-control" type="text" placeholder="link to the image source")
div(class="form-group col-md-12")
input#inputCaption(name="caption" class="form-control" type="text" placeholder="caption of the image")
h5(class="mb-3 font-weight-bold") Contact
div(class='form-row')
div(class="form-group col-md-4")
input#inputContactFirstname(name="contactFirstname" class="form-control" type="text" placeholder="contact firstname")
div(class="form-group col-md-4")
input#inputContactLastname(name="contactLastname" class="form-control" type="text" placeholder="contact lastname")
div(class="form-group col-md-4")
input#inputContactEmail(name="contactEmail" class="form-control" type="email" placeholder="contact email")
div(class="form-group col-md-4")
input#inputLeaderFirstname(name="leaderFirstname" class="form-control" type="text" placeholder="leader firstname")
div(class="form-group col-md-4")
input#inputLeaderLastname(name="leaderLastname" class="form-control" type="text" placeholder="leader lastname")
div(class="form-group col-md-4")
input#inputLeaderEmail(name="leaderEmail" class="form-control" type="email" placeholder="leader email")
p <em><small>* Pflichtfeld</small></em>
input#submitBtn(type="submit", class="btn btn-outline-dark btn-block", value="Projekt Anlegen")
// jQuery
script(src="https://code.jquery.com/jquery-3.3.1.min.js")
script(src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js", integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1", crossorigin="anonymous")
// Bootstrap
script(src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous")
// Header
script(src="/js/headfootLogout.js")
\ No newline at end of file
html(lang="de")
html(lang="en")
head
title= "Mailinglisten"
meta(charset="UTF-8")
......
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