-
Notifications
You must be signed in to change notification settings - Fork 3
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
104 changed files
with
18,510 additions
and
401 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
v8.16.0 |
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,137 @@ | ||
import {autoIncrementId} from './utils'; | ||
|
||
export const HOUSEHOLD_MEMBERS_STORAGE_KEY = 'household-members'; | ||
export const USER_HOUSEHOLD_MEMBER_ID = 'person_me'; | ||
export const HOUSEHOLD_MEMBER_TYPE = 'household-member'; | ||
export const VISITOR_TYPE = 'visitor'; | ||
|
||
/** | ||
* Types | ||
*/ | ||
export function person(opts) { | ||
if (opts.firstName === '' || opts.lastName === '') { | ||
console.log('Unable to create person with data: ', | ||
opts.firstName, | ||
!opts.middleName, | ||
!opts.lastName); | ||
} | ||
|
||
let middleName = opts.middleName || ''; | ||
|
||
return { | ||
fullName: opts.firstName + ' ' + middleName + ' ' + opts.lastName, | ||
firstName: opts.firstName, | ||
middleName, | ||
lastName: opts.lastName | ||
}; | ||
} | ||
|
||
/** | ||
* Storage | ||
*/ | ||
export function getUserAsHouseholdMember() { | ||
return getAllHouseholdMembers().find((member) => { | ||
return member['@person'].id === USER_HOUSEHOLD_MEMBER_ID; | ||
}); | ||
} | ||
|
||
export function deleteUserAsHouseholdMember() { | ||
deleteHouseholdMember(USER_HOUSEHOLD_MEMBER_ID); | ||
} | ||
|
||
export function deleteHouseholdMember(personId) { | ||
let members = getAllHouseholdMembers().filter((member) => { | ||
return member['@person'].id !== personId; | ||
}); | ||
|
||
sessionStorage.setItem(HOUSEHOLD_MEMBERS_STORAGE_KEY, | ||
JSON.stringify(members)); | ||
} | ||
|
||
export function updateUserAsHouseholdMember(person, memberData) { | ||
let userAsHouseholdMember = getUserAsHouseholdMember(); | ||
|
||
userAsHouseholdMember | ||
? updateHouseholdMember({ | ||
...userAsHouseholdMember['@person'], | ||
...person | ||
}, memberData) | ||
: addHouseholdMember(person, memberData, USER_HOUSEHOLD_MEMBER_ID); | ||
} | ||
|
||
export function updateHouseholdMember(person, memberData) { | ||
let membersUpdated = getAllHouseholdMembers().map((member) => { | ||
return member['@person'].id === person.id | ||
? {...member, ...memberData, '@person': {...member['@person'], ...person}} | ||
: member; | ||
}); | ||
|
||
sessionStorage.setItem(HOUSEHOLD_MEMBERS_STORAGE_KEY, | ||
JSON.stringify(membersUpdated)); | ||
} | ||
|
||
export function addHouseholdMember(person, memberData, id) { | ||
let people = getAllHouseholdMembers() || []; | ||
memberData = memberData || {}; | ||
|
||
/** | ||
* User is always first in the household list | ||
*/ | ||
people[id === USER_HOUSEHOLD_MEMBER_ID ? 'unshift' : 'push']({ | ||
...memberData, | ||
type: memberData.type || HOUSEHOLD_MEMBER_TYPE, | ||
'@person': { | ||
...person, | ||
id: id || 'person' + autoIncrementId('household-members') | ||
} | ||
}); | ||
|
||
sessionStorage.setItem(HOUSEHOLD_MEMBERS_STORAGE_KEY, JSON.stringify(people)); | ||
} | ||
|
||
export function getAllHouseholdMembers() { | ||
return JSON.parse(sessionStorage.getItem(HOUSEHOLD_MEMBERS_STORAGE_KEY)) || []; | ||
} | ||
|
||
export function getHouseholdMemberByPersonId(id) { | ||
return getAllHouseholdMembers().find(function(member) { | ||
return member['@person'].id === id; | ||
}); | ||
} | ||
|
||
export function getMemberPersonId(member) { | ||
return member['@person'].id; | ||
} | ||
|
||
/** | ||
* Comparators | ||
*/ | ||
export function isVisitor(member) { | ||
return member.type === window.ONS.storage.KEYS.VISITOR_TYPE; | ||
} | ||
|
||
export function isHouseholdMember(member) { | ||
return member.type === window.ONS.storage.KEYS.HOUSEHOLD_MEMBER_TYPE; | ||
} | ||
|
||
export function isOtherHouseholdMember(member) { | ||
return member.type === window.ONS.storage.KEYS.HOUSEHOLD_MEMBER_TYPE && | ||
member['@person'].id !== window.ONS.storage.IDS.USER_HOUSEHOLD_MEMBER_ID; | ||
} | ||
|
||
export const tempAwayQuestionSentenceMap = { | ||
'three-more': 'People who usually live outside the UK who are staying in the UK for 3 months or more', | ||
'perm-away': 'People who work away from home within the UK if this is their permanent or family home', | ||
'armed-forces': 'Members of the armed forces if this is their permanent or family home', | ||
'less-twelve': 'People who are temporarily outside the UK for less than 12 months', | ||
'usually-temp': 'People staying temporarily who usually live in the UK but' + | ||
' do not have another UK address for example, relatives, friends', | ||
'other': 'Other people who usually live here but are temporarily away' | ||
}; | ||
|
||
export const visitorQuestionSentenceMap = { | ||
'usually-in-uk': 'People who usually live somewhere else in the UK, for example boy/girlfriends, friends or relatives', | ||
'second-address': 'People staying here because it is their second address, for example, for work. Their permanent or family home is elsewhere', | ||
'less-three': 'People who usually live outside the UK who are staying in the UK for less than three months', | ||
'on-holiday': 'People here on holiday', | ||
}; |
16 changes: 16 additions & 0 deletions
16
_prototypes/your-household-v13/assets/lib/CustomEvent-polyfill.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
// https://developer.mozilla.org/en-US/docs/Web/API/CustomEvent/CustomEvent | ||
(function () { | ||
|
||
if ( typeof window.CustomEvent === "function" ) return false; | ||
|
||
function CustomEvent ( event, params ) { | ||
params = params || { bubbles: false, cancelable: false, detail: null }; | ||
var evt = document.createEvent( 'CustomEvent' ); | ||
evt.initCustomEvent( event, params.bubbles, params.cancelable, params.detail ); | ||
return evt; | ||
} | ||
|
||
CustomEvent.prototype = window.Event.prototype; | ||
|
||
window.CustomEvent = CustomEvent; | ||
})(); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,174 @@ | ||
/* | ||
* FileSaver.js | ||
* A saveAs() FileSaver implementation. | ||
* | ||
* By Eli Grey, http://eligrey.com | ||
* | ||
* License : https://github.com/eligrey/FileSaver.js/blob/master/LICENSE.md (MIT) | ||
* source : http://purl.eligrey.com/github/FileSaver.js | ||
*/ | ||
|
||
|
||
// The one and only way of getting global scope in all environments | ||
// https://stackoverflow.com/q/3277182/1008999 | ||
var _global = typeof window === 'object' && window.window === window | ||
? window : typeof self === 'object' && self.self === self | ||
? self : typeof global === 'object' && global.global === global | ||
? global | ||
: this; | ||
|
||
function bom(blob, opts) { | ||
if (typeof opts === 'undefined') opts = {autoBom: false} | ||
else if (typeof opts !== 'object') { | ||
console.warn('Deprecated: Expected third argument to be a object') | ||
opts = {autoBom: !opts} | ||
} | ||
|
||
// prepend BOM for UTF-8 XML and text/* types (including HTML) | ||
// note: your browser will automatically convert UTF-16 U+FEFF to EF BB BF | ||
if (opts.autoBom && /^\s*(?:text\/\S*|application\/xml|\S*\/\S*\+xml)\s*;.*charset\s*=\s*utf-8/i.test(blob.type)) { | ||
return new Blob([String.fromCharCode(0xFEFF), blob], {type: blob.type}) | ||
} | ||
return blob | ||
} | ||
|
||
function download(url, name, opts) { | ||
var xhr = new XMLHttpRequest() | ||
xhr.open('GET', url) | ||
xhr.responseType = 'blob' | ||
xhr.onload = function() { | ||
saveAs(xhr.response, name, opts) | ||
} | ||
xhr.onerror = function() { | ||
console.error('could not download file') | ||
} | ||
xhr.send() | ||
} | ||
|
||
function corsEnabled(url) { | ||
var xhr = new XMLHttpRequest() | ||
// use sync to avoid popup blocker | ||
xhr.open('HEAD', url, false) | ||
xhr.send() | ||
return xhr.status >= 200 && xhr.status <= 299 | ||
} | ||
|
||
// `a.click()` doesn't work for all browsers (#465) | ||
function click(node) { | ||
try { | ||
node.dispatchEvent(new MouseEvent('click')) | ||
} catch (e) { | ||
var evt = document.createEvent('MouseEvents') | ||
evt.initMouseEvent('click', true, true, window, 0, 0, 0, 80, | ||
20, false, false, false, false, 0, null) | ||
node.dispatchEvent(evt) | ||
} | ||
} | ||
|
||
var saveAs = _global.saveAs || ( | ||
// probably in some web worker | ||
(typeof window !== 'object' || window !== _global) | ||
? function saveAs() { /* noop */ | ||
} | ||
|
||
// Use download attribute first if possible (#193 Lumia mobile) | ||
: 'download' in HTMLAnchorElement.prototype | ||
? function saveAs(blob, name, opts) { | ||
var URL = _global.URL || _global.webkitURL | ||
var a = document.createElement('a') | ||
name = name || blob.name || 'download' | ||
|
||
a.download = name | ||
a.rel = 'noopener' // tabnabbing | ||
|
||
// TODO: detect chrome extensions & packaged apps | ||
// a.target = '_blank' | ||
|
||
if (typeof blob === 'string') { | ||
// Support regular links | ||
a.href = blob | ||
if (a.origin !== location.origin) { | ||
corsEnabled(a.href) | ||
? download(blob, name, opts) | ||
: click(a, a.target = '_blank') | ||
} else { | ||
click(a) | ||
} | ||
} else { | ||
// Support blobs | ||
a.href = URL.createObjectURL(blob) | ||
setTimeout(function() { | ||
URL.revokeObjectURL(a.href) | ||
}, 4E4) // 40s | ||
setTimeout(function() { | ||
click(a) | ||
}, 0) | ||
} | ||
} | ||
|
||
// Use msSaveOrOpenBlob as a second approach | ||
: 'msSaveOrOpenBlob' in navigator | ||
? function saveAs(blob, name, opts) { | ||
name = name || blob.name || 'download' | ||
|
||
if (typeof blob === 'string') { | ||
if (corsEnabled(blob)) { | ||
download(blob, name, opts) | ||
} else { | ||
var a = document.createElement('a') | ||
a.href = blob | ||
a.target = '_blank' | ||
setTimeout(function() { | ||
click(a) | ||
}) | ||
} | ||
} else { | ||
navigator.msSaveOrOpenBlob(bom(blob, opts), name) | ||
} | ||
} | ||
|
||
// Fallback to using FileReader and a popup | ||
: function saveAs(blob, name, opts, popup) { | ||
// Open a popup immediately do go around popup blocker | ||
// Mostly only available on user interaction and the fileReader is async so... | ||
popup = popup || open('', '_blank') | ||
if (popup) { | ||
popup.document.title = | ||
popup.document.body.innerText = 'downloading...' | ||
} | ||
|
||
if (typeof blob === 'string') return download(blob, name, opts) | ||
|
||
var force = blob.type === 'application/octet-stream' | ||
var isSafari = /constructor/i.test(_global.HTMLElement) || _global.safari | ||
var isChromeIOS = /CriOS\/[\d]+/.test(navigator.userAgent) | ||
|
||
if ((isChromeIOS || (force && isSafari)) && typeof FileReader === 'object') { | ||
// Safari doesn't allow downloading of blob URLs | ||
var reader = new FileReader() | ||
reader.onloadend = function() { | ||
var url = reader.result | ||
url = isChromeIOS ? url : url.replace(/^data:[^;]*;/, 'data:attachment/file;') | ||
if (popup) popup.location.href = url | ||
else location = url | ||
popup = null // reverse-tabnabbing #460 | ||
} | ||
reader.readAsDataURL(blob) | ||
} else { | ||
var URL = _global.URL || _global.webkitURL | ||
var url = URL.createObjectURL(blob) | ||
if (popup) popup.location = url | ||
else location.href = url | ||
popup = null // reverse-tabnabbing #460 | ||
setTimeout(function() { | ||
URL.revokeObjectURL(url) | ||
}, 4E4) // 40s | ||
} | ||
} | ||
) | ||
|
||
_global.saveAs = saveAs.saveAs = saveAs | ||
|
||
if (typeof module !== 'undefined') { | ||
module.exports = saveAs; | ||
} |
Oops, something went wrong.