From c8d83e036c7d37bdc7f8ea15bfc12765c46b7e0a Mon Sep 17 00:00:00 2001 From: Jay Colson Date: Sun, 14 Mar 2021 13:27:47 +0000 Subject: [PATCH] #103 wip, got textarea behaving --- http_root/css/site.css | 16 ++++++++- http_views/events.pug | 14 ++++---- http_views/includes/menu.pug | 4 ++- index.js | 68 ++++++++++++++++-------------------- 4 files changed, 55 insertions(+), 47 deletions(-) diff --git a/http_root/css/site.css b/http_root/css/site.css index a56de46..3bb7ff0 100644 --- a/http_root/css/site.css +++ b/http_root/css/site.css @@ -34,7 +34,7 @@ input[type=time] { border-radius: 10px; } -input[type=textarea] { +textarea { width: 100%; resize: vertical; padding: 10px; @@ -42,7 +42,21 @@ input[type=textarea] { border-radius: 10px; border: 0; box-shadow: 4px 4px 10px rgba(0, 0, 0, 0.06); + height: 175px; + word-wrap: break-word; +} + +textareax { + width: 100%; height: 150px; + overflow-wrap: break-word; + word-wrap: break-word; + flex-wrap: wrap; + word-break: break-all; + overflow: scroll; + overflow-y: scroll; + overflow-x: hidden; + overflow: -moz-scrollbars-vertical; } button { diff --git a/http_views/events.pug b/http_views/events.pug index 4d3d26c..893229e 100644 --- a/http_views/events.pug +++ b/http_views/events.pug @@ -27,21 +27,21 @@ block content .column .column | Title: - input(type='text' name='title' id='event-title' placeholder='Title', value=`${event&&event.title?event.title:''}`) + input(type='text' name='title' id='event-title' placeholder='Title' value=`${event&&event.title?event.title:''}`) | DM/GM: - input(type='text' name='dm' id='event-dm' placeholder='DM/GM', value=`${event&&event.dm?event.dm:''}`) + input(type='text' name='dm' id='event-dm' placeholder='DM/GM' value=`${event&&event.dm?event.dm:''}`) | Duration (in hours): - input(type='text' name='duration_hours' id='event-duration_hours' placeholder='Duration (in hours)', value=`${event&&event.duration_hours?event.duration_hours:''}`) + input(type='text' name='duration_hours' id='event-duration_hours' placeholder='Duration (in hours)' value=`${event&&event.duration_hours?event.duration_hours:''}`) | Start (Date): input(type='date' name='date' id='event-date' value=`${event?event.date_time.toISOString().substring(0,10):''}`) - | Start (Time): + | Start (Time in GMT): input(type='time' name='time' id='event-time' value=`${event?event.date_time.toISOString().substring(11,16):''}`) .column | Number of Players: - input(type='text' name='number_player_slots' id='event-number_player_slots' placeholder='Number of Players', value=`${event&&event.number_player_slots?event.number_player_slots:''}`) + input(type='text' name='number_player_slots' id='event-number_player_slots' placeholder='Number of Players' value=`${event&&event.number_player_slots?event.number_player_slots:''}`) | Campaign: - input(type='text' name='campaign' id='event-campaign' placeholder='Campaign', value=`${event&&event.campaign?event.campaign:''}`) + input(type='text' name='campaign' id='event-campaign' placeholder='Campaign' value=`${event&&event.campaign?event.campaign:''}`) | Description: - input(type='textarea' name='description' id='event-description' placeholder='Description', value=`${event&&event.description?event.description:''}`) + textarea(name='description' id='event-description' placeholder='Description') #{event&&event.description?event.description:''} .column button(type='button' onclick='setEvent();') Save \ No newline at end of file diff --git a/http_views/includes/menu.pug b/http_views/includes/menu.pug index df03300..6b8d7a7 100644 --- a/http_views/includes/menu.pug +++ b/http_views/includes/menu.pug @@ -3,7 +3,9 @@ h3 img(src= Config.dndVaultIcon) . - D&D Vault - #{title} #{discordMe?' ('+discordMe.username+'#'+discordMe.discriminator+')':''} + D&D Vault - #{title} #{discordMe?'('+discordMe.username+'#'+discordMe.discriminator+')':''} + . + #{guildConfig?'@ '+guildConfig.name:''} .topnav a(href= '/') Home //- | |  diff --git a/index.js b/index.js index cbd22d0..0125a93 100644 --- a/index.js +++ b/index.js @@ -8,6 +8,7 @@ const { connect, disconnect } = require('mongoose'); const GuildModel = require('./models/Guild'); const EventModel = require('./models/Event'); +const UserModel = require('./models/User'); const DEFAULT_CONFIGDIR = __dirname; global.Config = require(path.resolve(process.env.CONFIGDIR || DEFAULT_CONFIGDIR, './config.json')); @@ -73,15 +74,26 @@ let server = app .use(grant) .use(ROUTE_ROOT, express.static(Config.httpStaticDir)) .use(async function (request, response, next) { - console.log('in middleware checking if I need to update guildID'); - let requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); - let guildID = requestUrl.searchParams.get('guildID'); + console.log(`in middleware checking if I need to update guildID, guildID status: ${request.session.guildConfig ? true : false}`); + const requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); + const guildID = requestUrl.searchParams.get('guildID'); if (guildID) { if (!request.session.guildConfig || request.session.guildConfig.guildID != guildID) { console.log(`Retrieving guild info for ${guildID}`); - let guildConfig = await GuildModel.findOne({ guildID: guildID }); + const guildConfig = await GuildModel.findOne({ guildID: guildID }); + if (guildConfig) { + request.session.guildConfig = guildConfig; + } + } + } else if (!request.session.guildConfig && request.session.discordMe) { + console.log(`Retrieving any guild for user, ${request.session.discordMe.id}`); + const userConfig = await UserModel.findOne({ userID: request.session.discordMe.id }); + const guildConfig = await GuildModel.findOne({ guildID: userConfig.guildID }); + if (guildConfig) { request.session.guildConfig = guildConfig; } + } else { + console.log(`Don't need to (or can't) retrieve a guild ...`); } next(); }) @@ -155,6 +167,7 @@ let server = app response.end(error.message); } }) + // all routes past this point require authentication .use(async function (request, response, next) { const desiredDestination = request.path; console.log(`in middleware, ensuring user is logged in for ${desiredDestination}`); @@ -174,11 +187,7 @@ let server = app .get(ROUTE_TIMEZONESSET, async function (request, response) { try { console.log('serving ' + ROUTE_TIMEZONESSET); - //@todo can remove - if (!request.session.discordMe) { - console.log(`User not authenticated.`); - response.json({ status: 'false' }); - } else if (request.session.guildConfig) { + if (request.session.guildConfig) { console.log('we know the guild so we can set the timezone for user.'); let requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); // console.log(request.session.discordMe); @@ -203,19 +212,10 @@ let server = app .get(ROUTE_TIMEZONES, function (request, response) { try { console.log('serving ' + ROUTE_TIMEZONES); - //@todo can remove - if (!request.session.discordMe) { - request.query.destination = ROUTE_TIMEZONES; - response.redirect(url.format({ - pathname: grant.config.discord.prefix + "/discord", - query: request.query, - })); - } else { - let requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); - // console.log(request.session.discordMe); - let responseData = timezones.handleTimezonesDataRequest(requestUrl); - response.render('timezones', { title: 'Timezones', timezoneData: responseData, Config: Config, guildConfig: request.session.guildConfig, discordMe: request.session.discordMe }) - } + let requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); + // console.log(request.session.discordMe); + let responseData = timezones.handleTimezonesDataRequest(requestUrl); + response.render('timezones', { title: 'Timezones', timezoneData: responseData, Config: Config, guildConfig: request.session.guildConfig, discordMe: request.session.discordMe }) } catch (error) { console.error(error.message); response.setHeader('Content-Type', 'text/html'); @@ -226,23 +226,15 @@ let server = app .get(ROUTE_EVENTS, async function (request, response) { try { console.log('serving ' + ROUTE_EVENTS); - //@todo can remove - if (!request.session.discordMe) { - request.query.destination = ROUTE_EVENTS; - response.redirect(url.format({ - pathname: grant.config.discord.prefix + "/discord", - query: request.query, - })); - } else { - let requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); - // console.log(request.session.discordMe); - let eventID = requestUrl.searchParams.get('eventID'); - let event = await EventModel.findById(eventID); - if (event && event.userID != request.session.discordMe.id) { - event = undefined; - } - response.render('events', { title: 'Events', event: event, Config: Config, guildConfig: request.session.guildConfig, discordMe: request.session.discordMe }) + let requestUrl = new URL(request.url, `${request.protocol}://${request.headers.host}`); + // console.log(request.session.discordMe); + let eventID = requestUrl.searchParams.get('eventID'); + let event = await EventModel.findById(eventID); + if (event && event.userID != request.session.discordMe.id) { + console.log(`event is not owned by current user, dereferencing`); + event = undefined; } + response.render('events', { title: 'Events', event: event, Config: Config, guildConfig: request.session.guildConfig, discordMe: request.session.discordMe }) } catch (error) { console.error(error.message); response.setHeader('Content-Type', 'text/html');