Skip to content

Commit

Permalink
Passing data between pages test
Browse files Browse the repository at this point in the history
  • Loading branch information
mcheung-nhs authored and davidhunter08 committed Jan 29, 2019
1 parent ba5eaed commit 13b806a
Show file tree
Hide file tree
Showing 18 changed files with 12,667 additions and 1,435 deletions.
135 changes: 125 additions & 10 deletions app.js
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
// Core dependencies
const path = require('path')
const fs = require('fs')

// External dependencies
const bodyParser = require('body-parser')
const dotenv = require('dotenv')
const express = require('express');
const nunjucks = require('nunjucks');
const sessionInCookie = require('client-sessions')
const sessionInMemory = require('express-session')

// Run before other code to make sure variables from .env are available
dotenv.config()

// Local dependencies
const authentication = require('./middleware/authentication');
Expand All @@ -13,6 +20,7 @@ const config = require('./app/config');
const locals = require('./app/locals');
const routes = require('./app/routes');
const documentationRoutes = require('./docs/documentation_routes');
const utils = require('./lib/utils.js')

// Set configuration variables
const port = process.env.PORT || config.port;
Expand All @@ -23,6 +31,123 @@ const onlyDocumentation = process.env.DOCS_ONLY;
const app = express();
const documentationApp = express();


// Set up configuration variables
var useAutoStoreData = process.env.USE_AUTO_STORE_DATA || config.useAutoStoreData
var useCookieSessionStore = process.env.USE_COOKIE_SESSION_STORE || config.useCookieSessionStore

// Add variables that are available in all views
app.locals.asset_path = '/public/'
app.locals.useAutoStoreData = (useAutoStoreData === 'true')
app.locals.useCookieSessionStore = (useCookieSessionStore === 'true')
app.locals.serviceName = config.serviceName


// Nunjucks configuration for application
var appViews = [
path.join(__dirname, 'app/views/'),
path.join(__dirname, 'node_modules/nhsuk-frontend/packages/components'),
path.join(__dirname, 'lib/')
]

/*
nunjucks.configure(appViews, {
autoescape: true,
express: app
})
*/

var nunjucksConfig = {
autoescape: true
//noCache: true
//express: app
}

nunjucksConfig.express = app

var nunjucksAppEnv = nunjucks.configure(appViews, nunjucksConfig)

// Add Nunjucks filters
utils.addNunjucksFilters(nunjucksAppEnv)





// Session uses service name to avoid clashes with other prototypes
const sessionName = 'nhsuk-prototype-kit-' + (Buffer.from(config.serviceName, 'utf8')).toString('hex')
let sessionOptions = {
secret: sessionName,
cookie: {
maxAge: 1000 * 60 * 60 * 4 // 4 hours
}
}

// Support session data in cookie or memory
if (useCookieSessionStore === 'true') {
app.use(sessionInCookie(Object.assign(sessionOptions, {
cookieName: sessionName,
proxy: true,
requestKey: 'session'
})))
} else {
app.use(sessionInMemory(Object.assign(sessionOptions, {
name: sessionName,
resave: false,
saveUninitialized: false
})))
}


// Automatically store all data users enter
if (useAutoStoreData === 'true') {
app.use(utils.autoStoreData)
utils.addCheckedFunction(nunjucksAppEnv)
}


// Clear all data in session if you open /prototype-admin/clear-data
app.post('/prototype-admin/clear-data', function (req, res) {
req.session.data = {}
res.render('prototype-admin/clear-data-success')
})


// initial checks
checkFiles()


// Warn if node_modules folder doesn't exist
function checkFiles () {
const nodeModulesExists = fs.existsSync(path.join(__dirname, '/node_modules'))
if (!nodeModulesExists) {
console.error('ERROR: Node module folder missing. Try running `npm install`')
process.exit(0)
}

// Create template .env file if it doesn't exist
const envExists = fs.existsSync(path.join(__dirname, '/.env'))
if (!envExists) {
fs.createReadStream(path.join(__dirname, '/lib/template.env'))
.pipe(fs.createWriteStream(path.join(__dirname, '/.env')))
}
}

// Create template session data defaults file if it doesn't exist
const dataDirectory = path.join(__dirname, '/app/data')
const sessionDataDefaultsFile = path.join(dataDirectory, '/session-data-defaults.js')
const sessionDataDefaultsFileExists = fs.existsSync(sessionDataDefaultsFile)

if (!sessionDataDefaultsFileExists) {
console.log('Creating session data defaults file')
if (!fs.existsSync(dataDirectory)) {
fs.mkdirSync(dataDirectory)
}

fs.createReadStream(path.join(__dirname, '/lib/template.session-data-defaults.js'))
.pipe(fs.createWriteStream(sessionDataDefaultsFile))
}

// Check if the app is documentation only
if(onlyDocumentation !== 'true') {
// Require authentication if not
Expand All @@ -41,16 +166,6 @@ app.use(express.static(path.join(__dirname, 'public')));
app.use('/nhsuk-frontend', express.static(path.join(__dirname, 'node_modules/nhsuk-frontend/packages')));
app.use('/nhsuk-frontend', express.static(path.join(__dirname, 'node_modules/nhsuk-frontend/dist')));

// Nunjucks configuration for application
var appViews = [
path.join(__dirname, 'app/views/'),
path.join(__dirname, 'node_modules/nhsuk-frontend/packages/components')
]

nunjucks.configure(appViews, {
autoescape: true,
express: app
});

// Support for parsing data in POSTs
app.use(bodyParser.json());
Expand Down
30 changes: 30 additions & 0 deletions app/assets/javascript/auto-store-data.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
/* global $ */
$('body').on('submit', 'form', function (e) {
// On form submit, add hidden inputs for checkboxes so the server knows if
// they've been unchecked. This means we can automatically store and update
// all form data on the server, including checkboxes that are checked, then
// later unchecked

var $checkboxes = $(this).find('input:checkbox')

var $inputs = []
var names = {}

$checkboxes.each(function () {
var $this = $(this)

if (!names[$this.attr('name')]) {
names[$this.attr('name')] = true
var $input = $('<input type="hidden">')
$input.attr('name', $this.attr('name'))
$input.attr('value', '_unchecked')
$inputs.push($input)
}
})

$(this).prepend($inputs)

console.log($inputs);


})
Loading

0 comments on commit 13b806a

Please sign in to comment.