├── .editorconfig
├── .gitignore
├── README.md
├── angular.json
├── e2e
├── protractor.conf.js
├── src
│ ├── app.e2e-spec.ts
│ └── app.po.ts
└── tsconfig.e2e.json
├── firebase
├── README.md
├── backup
│ ├── bricks
│ │ ├── 08x0CLQKs5JIy6VGD7yO
│ │ │ ├── 08x0CLQKs5JIy6VGD7yO.json
│ │ │ └── questions
│ │ │ │ ├── 3lHQylhqWBRDjjIGFyn6
│ │ │ │ └── 3lHQylhqWBRDjjIGFyn6.json
│ │ │ │ ├── AGwtMpjyH6qYA6l3sgSR
│ │ │ │ └── AGwtMpjyH6qYA6l3sgSR.json
│ │ │ │ ├── CtWZD5GLk3IB1XwiIljT
│ │ │ │ └── CtWZD5GLk3IB1XwiIljT.json
│ │ │ │ ├── Ol2D3htXRCe1bDduHlj0
│ │ │ │ └── Ol2D3htXRCe1bDduHlj0.json
│ │ │ │ ├── RkFIAG9wU11UY37mso4J
│ │ │ │ └── RkFIAG9wU11UY37mso4J.json
│ │ │ │ ├── hUhmHmJlKCdJEmXw63d2
│ │ │ │ └── hUhmHmJlKCdJEmXw63d2.json
│ │ │ │ ├── hYdrOkTHbl09G8OAPyFl
│ │ │ │ └── hYdrOkTHbl09G8OAPyFl.json
│ │ │ │ ├── jISSuP35vHeYfvkbKKo0
│ │ │ │ └── jISSuP35vHeYfvkbKKo0.json
│ │ │ │ ├── kQUUj9kkap2vttW4ZKeY
│ │ │ │ └── kQUUj9kkap2vttW4ZKeY.json
│ │ │ │ └── lvlr7NW1Zdy1Su1yO2kj
│ │ │ │ └── lvlr7NW1Zdy1Su1yO2kj.json
│ │ ├── 20min1
│ │ │ └── 20min1.json
│ │ ├── 20min2
│ │ │ └── 20min2.json
│ │ ├── 20min3
│ │ │ └── 20min3.json
│ │ ├── 40min1
│ │ │ └── 40min1.json
│ │ ├── 40min2
│ │ │ └── 40min2.json
│ │ ├── Arrow
│ │ │ ├── Arrow.json
│ │ │ └── questions
│ │ │ │ └── Arrow
│ │ │ │ └── Arrow.json
│ │ ├── HorizontalShuffle
│ │ │ ├── HorizontalShuffle.json
│ │ │ └── questions
│ │ │ │ └── HorizontalShuffle
│ │ │ │ └── HorizontalShuffle.json
│ │ ├── MultipleChoice
│ │ │ ├── MultipleChoice.json
│ │ │ └── questions
│ │ │ │ └── MultipleChoice
│ │ │ │ └── MultipleChoice.json
│ │ ├── Order
│ │ │ ├── Order.json
│ │ │ └── questions
│ │ │ │ └── Order
│ │ │ │ └── Order.json
│ │ ├── ShortAnswer
│ │ │ ├── ShortAnswer.json
│ │ │ └── questions
│ │ │ │ └── ShortAnswer
│ │ │ │ └── ShortAnswer.json
│ │ ├── SingleChoice
│ │ │ ├── SingleChoice.json
│ │ │ └── questions
│ │ │ │ └── SingleChoice
│ │ │ │ └── SingleChoice.json
│ │ ├── Sort
│ │ │ ├── Sort.json
│ │ │ └── questions
│ │ │ │ └── sort
│ │ │ │ └── sort.json
│ │ ├── TextHighlighting
│ │ │ ├── TextHighlighting.json
│ │ │ └── questions
│ │ │ │ └── TextHighlighting
│ │ │ │ └── TextHighlighting.json
│ │ ├── lh0pzfSRgVBSZ8UBaDJb
│ │ │ ├── lh0pzfSRgVBSZ8UBaDJb.json
│ │ │ └── questions
│ │ │ │ └── tN4g9IyPzC3SdM2cAfGB
│ │ │ │ └── tN4g9IyPzC3SdM2cAfGB.json
│ │ ├── milton
│ │ │ ├── milton.json
│ │ │ └── questions
│ │ │ │ ├── 1
│ │ │ │ └── 1.json
│ │ │ │ ├── 2
│ │ │ │ └── 2.json
│ │ │ │ ├── 3
│ │ │ │ └── 3.json
│ │ │ │ ├── 4
│ │ │ │ └── 4.json
│ │ │ │ ├── 5
│ │ │ │ └── 5.json
│ │ │ │ ├── 6
│ │ │ │ └── 6.json
│ │ │ │ ├── 7
│ │ │ │ └── 7.json
│ │ │ │ ├── 8
│ │ │ │ └── 8.json
│ │ │ │ ├── 9
│ │ │ │ └── 9.json
│ │ │ │ ├── 10
│ │ │ │ └── 10.json
│ │ │ │ ├── 11
│ │ │ │ └── 11.json
│ │ │ │ ├── 12
│ │ │ │ └── 12.json
│ │ │ │ ├── 13
│ │ │ │ └── 13.json
│ │ │ │ └── 14
│ │ │ │ └── 14.json
│ │ └── uYVMc4KbjLaBsBo9V7Wq
│ │ │ └── uYVMc4KbjLaBsBo9V7Wq.json
│ ├── classes
│ │ └── Z7vl6btzFHhPede4yZSi
│ │ │ ├── Z7vl6btzFHhPede4yZSi.json
│ │ │ ├── pallets
│ │ │ └── f0wIFtZ8CDCjvhD4SnFe
│ │ │ │ └── f0wIFtZ8CDCjvhD4SnFe.json
│ │ │ └── students
│ │ │ └── 0k5CTSiIHCIIxuzXALo7
│ │ │ └── 0k5CTSiIHCIIxuzXALo7.json
│ ├── pallets
│ │ ├── bsjsJllNgYkos0w3Wrtv
│ │ │ ├── bricks
│ │ │ │ ├── 6FD2XgVyNJ161KQFBpVo
│ │ │ │ │ └── 6FD2XgVyNJ161KQFBpVo.json
│ │ │ │ ├── b8nLILCRvFXMCUmcu4NF
│ │ │ │ │ └── b8nLILCRvFXMCUmcu4NF.json
│ │ │ │ ├── milton
│ │ │ │ │ └── milton.json
│ │ │ │ └── uAbpscbGDGoVleXCNtQH
│ │ │ │ │ └── uAbpscbGDGoVleXCNtQH.json
│ │ │ └── bsjsJllNgYkos0w3Wrtv.json
│ │ ├── demopallet
│ │ │ ├── bricks
│ │ │ │ ├── 20min1
│ │ │ │ │ └── 20min1.json
│ │ │ │ ├── 20min2
│ │ │ │ │ └── 20min2.json
│ │ │ │ ├── 20min3
│ │ │ │ │ └── 20min3.json
│ │ │ │ ├── 40min1
│ │ │ │ │ └── 40min1.json
│ │ │ │ ├── 40min2
│ │ │ │ │ └── 40min2.json
│ │ │ │ └── milton
│ │ │ │ │ └── milton.json
│ │ │ └── demopallet.json
│ │ └── testpallet1
│ │ │ ├── bricks
│ │ │ ├── Arrow
│ │ │ │ └── Arrow.json
│ │ │ ├── HorizontalShuffle
│ │ │ │ └── HorizontalShuffle.json
│ │ │ ├── MultipleChoice
│ │ │ │ └── MultipleChoice.json
│ │ │ ├── Order
│ │ │ │ └── Order.json
│ │ │ ├── ShortAnswer
│ │ │ │ └── ShortAnswer.json
│ │ │ ├── SingleChoice
│ │ │ │ └── SingleChoice.json
│ │ │ ├── Sort
│ │ │ │ └── Sort.json
│ │ │ └── TextHighlighting
│ │ │ │ └── TextHighlighting.json
│ │ │ └── testpallet1.json
│ └── teachers
│ │ └── pKOncFi85zWuDaOXbWnCW0ha9YN2
│ │ ├── classes
│ │ └── OWtS1woe6V52ICQZrKei
│ │ │ └── OWtS1woe6V52ICQZrKei.json
│ │ └── pKOncFi85zWuDaOXbWnCW0ha9YN2.json
└── firebase-functions
│ ├── .firebaserc
│ ├── firebase.json
│ └── functions
│ ├── .eslintrc.json
│ ├── index.js
│ ├── package-lock.json
│ └── package.json
├── package-lock.json
├── package.json
├── server.js
├── src
├── app
│ ├── app.component.html
│ ├── app.component.ts
│ ├── app.module.ts
│ ├── app.routing.ts
│ ├── auth
│ │ ├── auth.module.ts
│ │ └── auth.service.ts
│ ├── build
│ │ ├── brick
│ │ │ ├── brick.component.html
│ │ │ ├── brick.component.scss
│ │ │ ├── brick.component.ts
│ │ │ ├── brick.routing.ts
│ │ │ ├── brick.service.ts
│ │ │ ├── brickTime.pipe.ts
│ │ │ ├── brickbuild.module.ts
│ │ │ ├── comp
│ │ │ │ ├── comp.component.ts
│ │ │ │ ├── comp.module.ts
│ │ │ │ ├── comp_arrow.component.ts
│ │ │ │ ├── comp_horizontal_shuffle.component.ts
│ │ │ │ ├── comp_index.ts
│ │ │ │ ├── comp_multiple_choice.component.ts
│ │ │ │ ├── comp_order.component.ts
│ │ │ │ ├── comp_reverse.pipe.ts
│ │ │ │ ├── comp_short_answer.component.ts
│ │ │ │ ├── comp_single_choice.component.ts
│ │ │ │ ├── comp_sort.component.ts
│ │ │ │ ├── comp_text.component.ts
│ │ │ │ ├── comp_text_highlighting.component.ts
│ │ │ │ └── highlight.directive.ts
│ │ │ ├── ending.component.html
│ │ │ ├── ending.component.ts
│ │ │ ├── introduction.component.html
│ │ │ ├── introduction.component.scss
│ │ │ ├── introduction.component.ts
│ │ │ ├── live.component.html
│ │ │ ├── live.component.scss
│ │ │ ├── live.component.ts
│ │ │ ├── question.component.ts
│ │ │ ├── review.component.html
│ │ │ ├── review.component.ts
│ │ │ ├── summary.component.html
│ │ │ ├── summary.component.scss
│ │ │ ├── summary.component.ts
│ │ │ ├── timer.component.ts
│ │ │ └── timer.service.ts
│ │ ├── build.component.spec.ts
│ │ ├── build.component.ts
│ │ ├── build.module.ts
│ │ └── build.routing.ts
│ ├── database
│ │ ├── database.module.ts
│ │ ├── database.service.spec.ts
│ │ └── database.service.ts
│ ├── login
│ │ ├── login.component.scss
│ │ ├── login.component.ts
│ │ ├── login.module.ts
│ │ ├── sign-in.component.scss
│ │ ├── sign-in.component.ts
│ │ └── user-type.component.ts
│ ├── manage
│ │ ├── dashboard
│ │ │ ├── dashboard.component.html
│ │ │ ├── dashboard.component.scss
│ │ │ └── dashboard.component.ts
│ │ ├── manage.component.spec.ts
│ │ ├── manage.component.ts
│ │ ├── manage.module.ts
│ │ └── manage.routing.ts
│ ├── material.module.ts
│ ├── navigation
│ │ ├── navigation.component.html
│ │ ├── navigation.component.scss
│ │ ├── navigation.component.ts
│ │ └── navigation.module.ts
│ ├── play
│ │ ├── brick
│ │ │ ├── brick.component.html
│ │ │ ├── brick.component.scss
│ │ │ ├── brick.component.ts
│ │ │ ├── brick.module.ts
│ │ │ ├── brick.routing.ts
│ │ │ ├── brick.service.ts
│ │ │ ├── brickTime.pipe.ts
│ │ │ ├── comp
│ │ │ │ ├── comp.component.ts
│ │ │ │ ├── comp.module.ts
│ │ │ │ ├── comp_arrow.component.ts
│ │ │ │ ├── comp_horizontal_shuffle.component.ts
│ │ │ │ ├── comp_index.ts
│ │ │ │ ├── comp_multiple_choice.component.ts
│ │ │ │ ├── comp_order.component.ts
│ │ │ │ ├── comp_poem.component.ts
│ │ │ │ ├── comp_reveal.component.ts
│ │ │ │ ├── comp_short_answer.component.ts
│ │ │ │ ├── comp_single_choice.component.ts
│ │ │ │ ├── comp_sort.component.ts
│ │ │ │ ├── comp_text.component.ts
│ │ │ │ ├── comp_text_highlighting.component.ts
│ │ │ │ └── highlight.directive.ts
│ │ │ ├── ending.component.html
│ │ │ ├── ending.component.ts
│ │ │ ├── introduction.component.html
│ │ │ ├── introduction.component.scss
│ │ │ ├── introduction.component.ts
│ │ │ ├── live.component.html
│ │ │ ├── live.component.scss
│ │ │ ├── live.component.ts
│ │ │ ├── question.component.ts
│ │ │ ├── review.component.html
│ │ │ ├── review.component.ts
│ │ │ ├── summary.component.html
│ │ │ ├── summary.component.scss
│ │ │ ├── summary.component.ts
│ │ │ ├── timer.component.ts
│ │ │ └── timer.service.ts
│ │ ├── dashboard
│ │ │ ├── dashboard.component.html
│ │ │ ├── dashboard.component.scss
│ │ │ └── dashboard.component.ts
│ │ ├── pallet
│ │ │ ├── pallet.component.html
│ │ │ ├── pallet.component.scss
│ │ │ └── pallet.component.ts
│ │ ├── play.component.ts
│ │ ├── play.module.ts
│ │ └── play.routing.ts
│ └── schema.ts
├── assets
│ ├── lflogo-English.png
│ ├── lflogo-Maths.png
│ ├── lflogo-Mixed.png
│ ├── lflogo-White.png
│ ├── lflogo.png
│ └── milton-q1-poem.png
├── browserslist
├── colors.scss
├── environments
│ ├── environment.prod.ts
│ └── environment.ts
├── favicon.ico
├── index.html
├── karma.conf.js
├── main.ts
├── palette.scss
├── polyfills.ts
├── styles.scss
├── test.ts
├── tsconfig.app.json
├── tsconfig.spec.json
└── tslint.json
├── tsconfig.json
└── tslint.json
/.editorconfig:
--------------------------------------------------------------------------------
1 | # Editor configuration, see http://editorconfig.org
2 | root = true
3 |
4 | [*]
5 | charset = utf-8
6 | indent_style = space
7 | indent_size = 4
8 | insert_final_newline = true
9 | trim_trailing_whitespace = true
10 |
11 | [*.md]
12 | max_line_length = off
13 | trim_trailing_whitespace = false
14 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | .env
4 | firebase/*.json
5 | firebase/backup/brickattempts
6 | firebase/backup/teachers
7 | firebase/classes
8 | firebase/students
9 | firebase/firebase-functions/functions/node_modules
10 |
11 | # compiled output
12 | /dist
13 | /tmp
14 | /out-tsc
15 |
16 | # dependencies
17 | /node_modules
18 |
19 | # IDEs and editors
20 | /.idea
21 | .project
22 | .classpath
23 | .c9/
24 | *.launch
25 | .settings/
26 | *.sublime-workspace
27 |
28 | # IDE - VSCode
29 | /.vscode
30 |
31 | # misc
32 | /.sass-cache
33 | /connect.lock
34 | /coverage
35 | /libpeerconnection.log
36 | npm-debug.log
37 | yarn-error.log
38 | testem.log
39 | /typings
40 |
41 | # System Files
42 | .DS_Store
43 | Thumbs.db
44 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Learning Fortress Frontend
2 |
3 | This is a simple VLE project running using a firebase backend. It is designed as a blended learning tool.
4 |
5 | ## Basic Installation
6 | 1. Make sure you have git, node and npm. We use Visual Studio to edit our code.
7 | 2. Clone and install
8 | ```bash
9 | $ git clone git@github.com:Scholar-6/learning-fortress-frontend.git
10 | $ npm install
11 | ```
12 | 3. Run `ng run debug` for a dev server that reloads on changes to files. Navigate to `http://localhost:4200/`.
13 |
14 | 4. That's it. It is preconfigured to connect to a dummy firebase db in the google cloud. (This database gets restored every so often)
15 |
16 | Further information on Firebase stuff can be found in the [firebase/README.md](./firebase/README.md)
17 |
18 | ## Code scaffolding
19 |
20 | Run `ng generate component component-name` to generate a new component. You can also use `ng generate directive|pipe|service|class|guard|interface|enum|module`.
21 |
22 | ## Build
23 |
24 | Run `ng build` to build the project. The build artifacts will be stored in the `dist/` directory.
25 |
26 | ## Running unit tests
27 | (More work required on developing tests)
28 | Run `ng test` to execute the unit tests via [Karma](https://karma-runner.github.io).
29 | Run `ng e2e` to execute the end-to-end tests via [Protractor](http://www.protractortest.org/).
30 |
31 | ## Further help
32 |
33 | This project was generated with [Angular CLI](https://github.com/angular/angular-cli) version 6.0.8.
34 |
35 | To get more help on the Angular CLI use `ng help` or go check out the [Angular CLI README](https://github.com/angular/angular-cli/blob/master/README.md).
36 |
--------------------------------------------------------------------------------
/e2e/protractor.conf.js:
--------------------------------------------------------------------------------
1 | // Protractor configuration file, see link for more information
2 | // https://github.com/angular/protractor/blob/master/lib/config.ts
3 |
4 | const { SpecReporter } = require('jasmine-spec-reporter');
5 |
6 | exports.config = {
7 | allScriptsTimeout: 11000,
8 | specs: [
9 | './src/**/*.e2e-spec.ts'
10 | ],
11 | capabilities: {
12 | 'browserName': 'chrome'
13 | },
14 | directConnect: true,
15 | baseUrl: 'http://localhost:4200/',
16 | framework: 'jasmine',
17 | jasmineNodeOpts: {
18 | showColors: true,
19 | defaultTimeoutInterval: 30000,
20 | print: function() {}
21 | },
22 | onPrepare() {
23 | require('ts-node').register({
24 | project: require('path').join(__dirname, './tsconfig.e2e.json')
25 | });
26 | jasmine.getEnv().addReporter(new SpecReporter({ spec: { displayStacktrace: true } }));
27 | }
28 | };
--------------------------------------------------------------------------------
/e2e/src/app.e2e-spec.ts:
--------------------------------------------------------------------------------
1 | import { AppPage } from './app.po';
2 |
3 | describe('workspace-project App', () => {
4 | let page: AppPage;
5 |
6 | beforeEach(() => {
7 | page = new AppPage();
8 | });
9 |
10 | it('should display welcome message', () => {
11 | page.navigateTo();
12 | expect(page.getParagraphText()).toEqual('Welcome to learning-fortress-frontend!');
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/e2e/src/app.po.ts:
--------------------------------------------------------------------------------
1 | import { browser, by, element } from 'protractor';
2 |
3 | export class AppPage {
4 | navigateTo() {
5 | return browser.get('/');
6 | }
7 |
8 | getParagraphText() {
9 | return element(by.css('app-root h1')).getText();
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/e2e/tsconfig.e2e.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "../tsconfig.json",
3 | "compilerOptions": {
4 | "outDir": "../out-tsc/app",
5 | "module": "commonjs",
6 | "target": "es5",
7 | "types": [
8 | "jasmine",
9 | "jasminewd2",
10 | "node"
11 | ]
12 | }
13 | }
--------------------------------------------------------------------------------
/firebase/README.md:
--------------------------------------------------------------------------------
1 |
2 | As we are using the Firestore db we need to set some security rules in the backend
3 |
4 | https://firebase.google.com/docs/firestore/security/get-started
5 |
6 | ```bash
7 | // Allow read/write access on all documents to any user signed in to the application
8 | service cloud.firestore {
9 | match /databases/{database}/documents {
10 | match /{document=**} {
11 | allow read, write: if request.auth.uid != null;
12 | }
13 | }
14 | }
15 | ```
16 |
17 | We also have a cloud script if we want to lock down new users from accessing the site. We have opened this up for the moment.
18 |
19 | ## Firebase User blocking signup
20 | This is apparently the only way to block new users with firebase UI at the moment
21 | https://github.com/firebase/firebaseui-web/issues/99
22 | The user can still signup but they cannot access the app until their account has been enabled in the firebase console.
23 |
24 | You need to create a new directory locally, then use the code below and the cloud functions starter guide to implement this from the local machine. https://firebase.google.com/docs/functions/get-started?authuser=0
25 | Make sure to uncomment the relevant function in firebase/firebase-functions/functions/index.js
26 |
27 | ```bash
28 | $ cd firebase/firebase-functions/functions
29 | $ npm install -g firebase-tools
30 | $ npm install
31 | $ firebase login
32 | $ firebase deploy --only functions
33 | ```
34 |
35 | We also need to redirect new users so they don't auto login after signup
36 | ```javascript
37 | signInSuccess(event: FirebaseUISignInSuccessWithAuthResult) {
38 | if (event.authResult.additionalUserInfo.isNewUser) {
39 | this.afAuth.auth.signOut();
40 | return true;
41 | }
42 | console.log(`signed in as ${event.authResult.user.displayName} who is${event.authResult.additionalUserInfo.isNewUser?"":" not"} a new user.`);
43 | return true;
44 | }
45 | ```
46 |
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/08x0CLQKs5JIy6VGD7yO.json:
--------------------------------------------------------------------------------
1 | {"totalUsers":{"value":3126,"type":"number"},"highScore":{"value":96.3,"type":"number"},"prep":{"value":"Spend up to five minutes reviewing the dramatis personae (presented in the page preceding the play) or at https://www.bartleby.com/70/4201.html","type":"string"},"creator":{"value":"Josephelvet","type":"string"},"avgScore":{"value":62.3,"type":"number"},"brief":{"value":"Exploring friendships, partnerships and relationships in the play and the extent to which individuals are connected to or isolated from those around them.","type":"string"},"title":{"value":"Test Brick","type":"string"},"subject":{"value":"English Literature","type":"string"},"creationDate":{"value":"2018-08-02T23:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"Lolwut","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","bsjsJllNgYkos0w3Wrtv"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/3lHQylhqWBRDjjIGFyn6/3lHQylhqWBRDjjIGFyn6.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"The following list contains four of Hamlet’s true attributes but also an attribute which is not strictly true. Identify the odd one out –","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"an affinity for actors, perhaps, but he’s not one of the ‘players’","type":"string"},{"value":"certainly not married to Ophelia – even if Gertrude likes the idea","type":"string"},{"value":"who likes to get all the attention and might be a teeny bit spoiled","type":"string"},{"value":"“the expectation and rose of the fair state” as Ophelia calls him","type":"string"},{"value":"intellectually lively – his alma mater is the University of Wittenberg","type":"string"}],"type":"array"},"choices":{"value":[{"value":"a stage actor","type":"string"},{"value":"a bachelor","type":"string"},{"value":"an only child","type":"string"},{"value":"a royal prince","type":"string"},{"value":"a scholar","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"SingleChoice","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/AGwtMpjyH6qYA6l3sgSR/AGwtMpjyH6qYA6l3sgSR.json:
--------------------------------------------------------------------------------
1 | {"number":{"value":9,"type":"number"},"components":{"value":[{"value":{"data":{"value":{"text":{"value":"The following passage is a jumbled version of lines spoken by Hamlet at the end of Act I. Touch / click and move each line to recreate the text in its correct order:","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveal":{"value":"The flourish of a rhyming couplet will often round off the last speech of an important scene.","type":"string"},"choices":{"value":[{"value":"So, gentlemen,","type":"string"},{"value":"With all my love I do commend me to you:","type":"string"},{"value":"And what so poor a man as Hamlet is","type":"string"},{"value":"May do, to express his love and friending to you,","type":"string"},{"value":"God willing, shall not lack. Let us go in together;","type":"string"},{"value":"The time is out of joint: O cursed spite,","type":"string"},{"value":"That ever I was born to set it right!","type":"string"},{"value":"And still your fingers on your lips, I pray.","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Order","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/CtWZD5GLk3IB1XwiIljT/CtWZD5GLk3IB1XwiIljT.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"reveal":{"value":"The only explicitly married man in the play","type":"string"},"text":{"value":"Uxoricide (from the Latin uxor, wife, and caedere, to kill) is the act of killing one’s wife, or a man who kills his wife. In Hamlet, who is this man?","type":"string"},"entries":{"value":[{"value":{"name":{"value":"Answer","type":"string"},"answer":{"value":"Claudius","type":"string"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":5,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/Ol2D3htXRCe1bDduHlj0/Ol2D3htXRCe1bDduHlj0.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"By touch or cursor, sort the following words to render an accurate quotation from Act I:","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":[{"value":"O","type":"string"},{"value":"cursed","type":"string"},{"value":"spite","type":"string"},{"value":"that","type":"string"},{"value":"ever","type":"string"},{"value":"I","type":"string"},{"value":"was","type":"string"},{"value":"born","type":"string"},{"value":"to","type":"string"},{"value":"set","type":"string"},{"value":"it","type":"string"},{"value":"right","type":"string"}],"type":"array"},"reveal":{"value":"The apostrophe “O” often begins an oath or passionate outburst.","type":"string"}},"type":"object"},"name":{"value":"HorizontalShuffle","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":8,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/RkFIAG9wU11UY37mso4J/RkFIAG9wU11UY37mso4J.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Read the following passage, from a New York Times review of a recent production of the play, and identify three words within it which characterise specific types of speech in performance:","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"This Hamlet seldom seems to relate to anyone else onstage. In the big dialogue scenes, you’re conscious of Mr. Cumberbatch riding Shakespeare’s rushing words like a surfboard, as if saving his interior energy for the monologues. In those, he is superb, meticulously tracing lines of thought into revelations that stun, elate, exasperate and sadden him. There’s not a single soliloquy that doesn’t shed fresh insight into how Hamlet thinks. And Ms. Turner stages them beautifully, presenting many in the middle of the action, with Mr. Cumberbatch stepping away as the rest of the cast freezes in tableaus. The effect is of a man separated from reality by his own self-fascinated mind. Hamlet has never seemed so alone, which gives him an added poignancy. This production would benefit greatly, though, if it allowed him to play well with others, too.","type":"string"},"reveal":{"value":"The Greek word logos (word, reckoning or thought) and the Latin word solus (alone) are relevant to the etymology of these terms.","type":"string"},"words":{"value":[{"value":13,"type":"number"},{"value":35,"type":"number"},{"value":59,"type":"number"}],"type":"array"}},"type":"object"},"name":{"value":"TextHighlighting","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":10,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/hUhmHmJlKCdJEmXw63d2/hUhmHmJlKCdJEmXw63d2.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Divide the following into those who die before the play begins (indicate with a 1), those who die offstage (indicate with a 2), those who die onstage (indicate with a 3):","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":{"Yorick":{"value":"all that remains is a skull","type":"string"},"Gertrude":{"value":"accidentally poisoned in the final scene","type":"string"},"Claudius":{"value":"Hamlet finally achieves his aim","type":"string"},"Old Hamlet":{"value":"he’s only a ghost in the play itself","type":"string"},"Polonius":{"value":"behind the arras but still on stage","type":"string"},"Rosencrantz and Guildenstern":{"value":"presumably executed by the English king","type":"string"},"Old Fortinbras":{"value":"slain by Hamlet’s father","type":"string"},"Ophelia":{"value":"she is found drowned","type":"string"}},"type":"object"},"choices":{"value":{"Ophelia":{"value":1,"type":"number"},"Yorick":{"value":0,"type":"number"},"Gertrude":{"value":2,"type":"number"},"Claudius":{"value":2,"type":"number"},"Old Hamlet":{"value":0,"type":"number"},"Polonius":{"value":2,"type":"number"},"Rosencrantz and Guildenstern":{"value":1,"type":"number"},"Old Fortinbras":{"value":0,"type":"number"}},"type":"object"},"categories":{"value":[{"value":"Before Play Begins","type":"string"},{"value":"Offstage","type":"string"},{"value":"Onstage","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Sort","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":4,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/hYdrOkTHbl09G8OAPyFl/hYdrOkTHbl09G8OAPyFl.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Rank the following in terms of their status in terms of authority and social position, with highest at 1 and lowest at 8.","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"even a villainous king is top of the pile","type":"string"},{"value":"retains high status as queen by marrying Claudius","type":"string"},{"value":"still a royal prince, even if he hasn’t succeeded his father","type":"string"},{"value":"Claudius’s trusted advisor – a minister of state","type":"string"},{"value":"son of a senior minister, so an influential courtier","type":"string"},{"value":"daughter of a senior minister, a respected presence","type":"string"},{"value":"a junior courtier but familiar with the Prince","type":"string"},{"value":"itinerant performers have no status at all in court","type":"string"}],"type":"array"},"choices":{"value":[{"value":"Claudius","type":"string"},{"value":"Gertrude","type":"string"},{"value":"Hamlet","type":"string"},{"value":"Polonius","type":"string"},{"value":"Laertes","type":"string"},{"value":"Ophelia","type":"string"},{"value":"Osric","type":"string"},{"value":"Actors","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Order","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":3,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/jISSuP35vHeYfvkbKKo0/jISSuP35vHeYfvkbKKo0.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Which of the following characters form natural pairs? Move the names on the right to sit alongside the characters on the left with whom they are most closely associated.","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"categories":{"value":[{"value":{"choices":{"value":[{"value":"Rosencrantz","type":"string"},{"value":"Voltemand","type":"string"},{"value":"Horatio","type":"string"},{"value":"Marcellus","type":"string"}],"type":"array"}},"type":"object"},{"value":{"choices":{"value":[{"value":"Guildenstern","type":"string"},{"value":"Cornelius","type":"string"},{"value":"Hamlet","type":"string"},{"value":"Barnardo","type":"string"}],"type":"array"}},"type":"object"}],"type":"array"},"reveals":{"value":[{"value":"Hamlet’s old uni pals","type":"string"},{"value":"sentries at Elsinore","type":"string"},{"value":"loyal, if unequal, friends","type":"string"},{"value":"Danish ambassadors","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Arrow","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":7,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/kQUUj9kkap2vttW4ZKeY/kQUUj9kkap2vttW4ZKeY.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Fortinbras is like Hamlet in some ways but unlike him in others. Identify two characteristics in which they are similar –","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":[{"value":"throne passes from his father to his uncle","type":"string"},{"value":"intention to avenge his father","type":"string"},{"value":"soldierly","type":"string"},{"value":"funny","type":"string"},{"value":"focussed","type":"string"},{"value":"natural leaders","type":"string"}],"type":"array"},"correctAnswers":{"value":2,"type":"number"},"reveals":{"value":[{"value":"both their fathers were kings, yet neither sons succeeds to the throne","type":"string"},{"value":"Fortinbras’ father was defeated by Old Hamlet – both sons seek redress","type":"string"},{"value":"Hamlet can fence but has never led an army","type":"string"},{"value":"Fortinbras is serious and determined, Hamlet can be witty and playful","type":"string"},{"value":"Hamlet prevaricates and delays; Fortinbras gets on with the job","type":"string"},{"value":"Hamlet only seems to have one close friend and follower","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"MultipleChoice","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":2,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/08x0CLQKs5JIy6VGD7yO/questions/lvlr7NW1Zdy1Su1yO2kj/lvlr7NW1Zdy1Su1yO2kj.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"reveal":{"value":"the same two characters who struggle in the grave of Ophelia","type":"string"},"text":{"value":"The above list (Question 4) of deaths omits two important characters who also die. Write their names","type":"string"},"entries":{"value":[{"value":{"name":{"value":"Answer","type":"string"},"answer":{"value":"Hamlet","type":"string"}},"type":"object"},{"value":{"name":{"value":"Answer","type":"string"},"answer":{"value":"Horatio","type":"string"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":6,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/20min1/20min1.json:
--------------------------------------------------------------------------------
1 | {"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","demopallet"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"","type":"string"},"title":{"value":"20 Minute Brick 1 Pending","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-09T09:00:00.000Z","type":"timestamp"},"type":{"value":"1","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/20min2/20min2.json:
--------------------------------------------------------------------------------
1 | {"creationDate":{"value":"2018-09-09T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","demopallet"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"","type":"string"},"title":{"value":"20 Minute Brick 2 Pending","type":"string"},"subject":{"value":"","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/20min3/20min3.json:
--------------------------------------------------------------------------------
1 | {"creationDate":{"value":"2018-09-09T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","demopallet"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"","type":"string"},"title":{"value":"20 Minute Brick 3 Pending","type":"string"},"subject":{"value":"","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/40min1/40min1.json:
--------------------------------------------------------------------------------
1 | {"brief":{"value":"","type":"string"},"title":{"value":"40 Minute Brick 1 Pending","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-09T09:00:00.000Z","type":"timestamp"},"type":{"value":2,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","demopallet"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/40min2/40min2.json:
--------------------------------------------------------------------------------
1 | {"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"","type":"string"},"title":{"value":"Maths Brick Pending","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-09T09:00:00.000Z","type":"timestamp"},"type":{"value":2,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","demopallet"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/Arrow/Arrow.json:
--------------------------------------------------------------------------------
1 | {"type":{"value":1,"type":"number"},"summary":{"value":"This is a summary","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"This is the arrow question","type":"string"},"title":{"value":"1. Arrow","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/Arrow/questions/Arrow/Arrow.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"name":{"value":"Text","type":"string"},"data":{"value":{"text":{"value":"Arrow Question this is a second line","type":"string"}},"type":"object"}},"type":"object"},{"value":{"data":{"value":{"categories":{"value":[{"value":{"choices":{"value":[{"value":"choice 1","type":"string"},{"value":"choice 2","type":"string"},{"value":"Choice 3","type":"string"}],"type":"array"}},"type":"object"},{"value":{"choices":{"value":[{"value":"choice 1","type":"string"},{"value":"choice 2","type":"string"},{"value":"choice 3","type":"string"}],"type":"array"}},"type":"object"}],"type":"array"},"reveals":{"value":[{"value":"This is a reveal","type":"string"},{"value":"This is another reveal","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Arrow","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/HorizontalShuffle/HorizontalShuffle.json:
--------------------------------------------------------------------------------
1 | {"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"HorizontalShuffle Brief","type":"string"},"title":{"value":"2. HorizontalShuffle","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/HorizontalShuffle/questions/HorizontalShuffle/HorizontalShuffle.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"This is some text","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveal":{"value":"This is a reveal","type":"string"},"choices":{"value":[{"value":"choice 1","type":"string"},{"value":"choice 2","type":"string"},{"value":"choice 3","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"HorizontalShuffle","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/MultipleChoice/MultipleChoice.json:
--------------------------------------------------------------------------------
1 | {"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"MultipleChoice Brief","type":"string"},"title":{"value":"3. MultipleChoice","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/MultipleChoice/questions/MultipleChoice/MultipleChoice.json:
--------------------------------------------------------------------------------
1 | {"number":{"value":1,"type":"number"},"components":{"value":[{"value":{"data":{"value":{"name":{"value":"This is a MultipleChoice Question","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"name":{"value":"MultipleChoice","type":"string"},"data":{"value":{"choices":{"value":[{"value":"choice 1","type":"string"},{"value":"choice 2","type":"string"},{"value":"choice 3","type":"string"}],"type":"array"},"correctAnswers":{"value":2,"type":"number"},"reveals":{"value":[{"value":"reveal 1","type":"string"},{"value":"reveal 2","type":"string"}],"type":"array"}},"type":"object"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/Order/Order.json:
--------------------------------------------------------------------------------
1 | {"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"Order Brief","type":"string"},"title":{"value":"4. Order","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/Order/questions/Order/Order.json:
--------------------------------------------------------------------------------
1 | {"number":{"value":1,"type":"number"},"components":{"value":[{"value":{"data":{"value":{"text":{"value":"This is an Order question","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"reveal 1","type":"string"},{"value":"reveal 2","type":"string"}],"type":"array"},"choices":{"value":[{"value":"choice 1","type":"string"},{"value":"choice 2","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Order","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/ShortAnswer/ShortAnswer.json:
--------------------------------------------------------------------------------
1 | {"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"ShortAnswer Brief","type":"string"},"title":{"value":"5. ShortAnswer","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/ShortAnswer/questions/ShortAnswer/ShortAnswer.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"This is a ShortAnswer questions","type":"string"},"entries":{"value":[{"value":{"name":{"value":"Type 'red'","type":"string"},"answer":{"value":"red","type":"string"}},"type":"object"},{"value":{"name":{"value":"Type 'green'","type":"string"},"answer":{"value":"green","type":"string"}},"type":"object"}],"type":"array"},"reveal":{"value":"This is a reveal","type":"string"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/SingleChoice/SingleChoice.json:
--------------------------------------------------------------------------------
1 | {"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"SingleChoice Brief","type":"string"},"title":{"value":"6. SingleChoice","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-02T09:00:00.000Z","type":"timestamp"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/SingleChoice/questions/SingleChoice/SingleChoice.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"name":{"value":"Text","type":"string"},"data":{"value":{"text":{"value":"This text should appear in the question","type":"string"}},"type":"object"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":[{"value":"choice 1","type":"string"},{"value":"choice 2","type":"string"},{"value":"choice 3","type":"string"}],"type":"array"},"reveals":{"value":[{"value":"reveal 1","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"SingleChoice","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/Sort/Sort.json:
--------------------------------------------------------------------------------
1 | {"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"},"brief":{"value":"Sort Brief","type":"string"},"title":{"value":"7. Sort","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/Sort/questions/sort/sort.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"This is a Sort question","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":{"This is another choice":{"value":"1","type":"string"},"This is a choice":{"value":"0","type":"string"}},"type":"object"},"categories":{"value":[{"value":"Category 1","type":"string"},{"value":"Category 2","type":"string"}],"type":"array"},"reveals":{"value":{"This is a choice":{"value":"this is a reveal","type":"string"},"This is another choice":{"value":"this is another reveal","type":"string"}},"type":"object"}},"type":"object"},"name":{"value":"Sort","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/TextHighlighting/TextHighlighting.json:
--------------------------------------------------------------------------------
1 | {"brief":{"value":"TextHighlighting Brief","type":"string"},"title":{"value":"8. TextHighlighting","type":"string"},"subject":{"value":"","type":"string"},"creationDate":{"value":"2018-09-03T09:00:00.000Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","testpallet1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"},"totalUsers":{"value":0,"type":"number"},"highScore":{"value":0,"type":"number"},"prep":{"value":"","type":"string"},"creator":{"value":"","type":"string"},"avgScore":{"value":0,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/TextHighlighting/questions/TextHighlighting/TextHighlighting.json:
--------------------------------------------------------------------------------
1 | {"number":{"value":1,"type":"number"},"components":{"value":[{"value":{"data":{"value":{"text":{"value":"This is a TextHighlighting question","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveal":{"value":"This is a reveal","type":"string"},"words":{"value":[{"value":0,"type":"number"},{"value":2,"type":"number"}],"type":"array"},"text":{"value":"Select the first and third words of this sentence.","type":"string"}},"type":"object"},"name":{"value":"TextHighlighting","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/lh0pzfSRgVBSZ8UBaDJb/lh0pzfSRgVBSZ8UBaDJb.json:
--------------------------------------------------------------------------------
1 | {"totalUsers":{"value":3126,"type":"number"},"highScore":{"value":"96.3","type":"string"},"prep":{"value":"Spend up to five minutes reviewing the dramatis personae (presented in the page preceding the play) or at https://www.bartleby.com/70/4201.html","type":"string"},"creator":{"value":"Josephelvet","type":"string"},"avgScore":{"value":62.3,"type":"number"},"brief":{"value":"Exploring friendships, partnerships and relationships in the play and the extent to which individuals are connected to or isolated from those around them. !","type":"string"},"title":{"value":"Isolation and Companionship","type":"string"},"subject":{"value":"English Literature","type":"string"},"creationDate":{"value":"2018-05-10T23:00:00.000Z","type":"timestamp"},"type":{"value":2,"type":"number"},"summary":{"value":"Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla elementum ex augue, eget ullamcorper velit euismod et. Vivamus gravida lectus vitae rhoncus faucibus. Etiam pellentesque lectus ut orci interdum congue. Curabitur neque libero, ullamcorper sed ultrices ac, placerat eu nunc. Proin luctus porttitor sem, sit amet facilisis justo sodales bibendum. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse eget dolor ac ipsum dictum fermentum. Donec euismod diam id leo iaculis scelerisque non quis turpis. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Phasellus lobortis volutpat libero ut scelerisque. Donec enim urna, condimentum eget mattis quis, convallis eget lectus. Sed vehicula mauris et nisi tristique, ut pretium quam accumsan. Sed posuere tincidunt enim bibendum varius. Phasellus risus odio, iaculis ac laoreet a, consequat ut ante. Aliquam vel odio lobortis, lacinia nunc rhoncus, porttitor justo. Suspendisse potenti. Integer quis lacus nisl. Morbi ut neque bibendum, bibendum magna porta, fringilla nulla. Duis ullamcorper augue posuere enim fringilla, in egestas ligula ultrices. Suspendisse a odio non enim maximus consectetur. Vivamus faucibus porta neque blandit ultricies. Mauris tincidunt orci a ipsum molestie, quis ultricies metus condimentum. Fusce sem massa, auctor a accumsan sed, accumsan non quam. Praesent malesuada vel quam at vehicula. Proin pharetra arcu eget nisl imperdiet convallis. Donec elementum massa non eros aliquam bibendum. Duis quis condimentum urna. Quisque rhoncus, nunc pharetra sagittis ultricies, sapien sapien fringilla risus, at tincidunt lectus nisi eget purus. Phasellus luctus pellentesque sapien sed fermentum. Phasellus accumsan eget est eu gravida. Curabitur.","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","bsjsJllNgYkos0w3Wrtv"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/lh0pzfSRgVBSZ8UBaDJb/questions/tN4g9IyPzC3SdM2cAfGB/tN4g9IyPzC3SdM2cAfGB.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"The following list contains four of Hamlet’s true attributes but also an attribute which is not strictly true. Identify the odd one out – ","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":[{"value":"an actor","type":"string"},{"value":"a bachelor","type":"string"},{"value":"an only child","type":"string"},{"value":"a royal prince","type":"string"},{"value":"a scholar","type":"string"}],"type":"array"},"reveals":{"value":[{"value":"an affinity for actors, perhaps, but he’s not one of the ‘players’","type":"string"},{"value":"certainly not married to Ophelia – even if Gertrude likes the idea","type":"string"},{"value":"who likes to get all the attention and might be a teeny bit spoiled","type":"string"},{"value":"“the expectation and rose of the fair state” as Ophelia calls him","type":"string"},{"value":"intellectually lively – his alma mater is the University of Wittenberg","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"SingleChoice","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/1/1.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"
Some words in the poem are either somewhat archaic to a modern ear or would have carried different meanings in the 17th century than they do today. For example, “lest” in line six might be defined as “in case”. Eight other words are highlighted in green. Below the poem, move these words into line with the highlighted word from the poem to which they correspond:
","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"When I consider how my light is spent, Ere half my days in this dark world and wide, And that one talent which is death to hide Lodged with me useless, though my soul more bent To serve therewith my Maker, and present My true account, lest He returning chide; “Doth God exact day-labour, light denied?” I fondly ask. But Patience, to pevent That murmur, soon replies, “God doth not need before Either man’s work or His own gifts. Who best Bear His mild yoke, they serve Him best. His state Is kingly: thousands at His bidding speed, And post o’er land and ocean without rest; They also serve who only stand and wait.”","type":"string"}},"type":"object"},"name":{"value":"Poem","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"}],"type":"array"},"categories":{"value":[{"value":{"choices":{"value":[{"value":"exact","type":"string"},{"value":"murmur","type":"string"},{"value":"fondly","type":"string"},{"value":"chide","type":"string"},{"value":"post","type":"string"},{"value":"ere","type":"string"},{"value":"bent","type":"string"},{"value":"yoke","type":"string"}],"type":"array"}},"type":"object"},{"value":{"choices":{"value":[{"value":"demand","type":"string"},{"value":"discontent","type":"string"},{"value":"foolishly","type":"string"},{"value":"reproach (me)","type":"string"},{"value":"hurry","type":"string"},{"value":"before","type":"string"},{"value":"inclined","type":"string"},{"value":"harness","type":"string"}],"type":"array"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"Arrow","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"Milton’s compression is noteworthy – most of these words are single syllables, and all of the definitions have more than one syllable. Only ‘exact’ is not metrically shorter than the modern equivalent.","type":"string"}},"type":"object"},"name":{"value":"Reveal","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":1,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/10/10.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"name":{"value":"Text","type":"string"},"data":{"value":{"text":{"value":"The Parable of the Talents is very important in Liberation Theology, the radical South American movement which re-read the bible in Marxist terms to focus on social injustice and the plight of the poor. Liberation theologians identify one particular character in the parable as heroic and revolutionary. Which one?","type":"string"}},"type":"object"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"speaks truth to power and suffers injustice - after all, he has stolen nothing","type":"string"},{"value":"plays by the rules of the system his master profits from","type":"string"},{"value":"plays by the rules of the system his master profits from","type":"string"},{"value":"seen as the archetype of exploitative capitalist aristocracy","type":"string"}],"type":"array"},"choices":{"value":[{"value":"the third servant","type":"string"},{"value":"the second servant","type":"string"},{"value":"the first servant","type":"string"},{"value":"the returning lord","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"SingleChoice","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":10,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/11/11.json:
--------------------------------------------------------------------------------
1 | {"number":{"value":11,"type":"number"},"components":{"value":[{"value":{"name":{"value":"Text","type":"string"},"data":{"value":{"text":{"value":"The sonnet is Petrarchan in form, its fourteen lines consisting of an octave followed by a sestet. In the boxes provided, write the possessiveadjective (or determiner) which recurs frequently in each part of the poem:","type":"string"}},"type":"object"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"When I consider how my light is spent, Ere half my days in this dark world and wide, And that one talent which is death to hide Lodged with me useless, though my soul more bent To serve therewith my Maker, and present My true account, lest He returning chide; “Doth God exact day-labour, light denied?” I fondly ask. But Patience, to prevent ","type":"string"}},"type":"object"},"name":{"value":"Poem","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveal":{"value":"","type":"string"},"text":{"value":"","type":"string"},"entries":{"value":[{"value":{"answer":{"value":"my","type":"string"},"name":{"value":"OCTAVE","type":"string"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"That murmur, soon replies, “God doth not need before Either man’s work or His own gifts. Who best Bear His mild yoke, they serve Him best. His state Is kingly: thousands at His bidding speed, And post o’er land and ocean without rest; They also serve who only stand and wait.”","type":"string"}},"type":"object"},"name":{"value":"Poem","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveal":{"value":"","type":"string"},"text":{"value":"","type":"string"},"entries":{"value":[{"value":{"name":{"value":"SESTET","type":"string"},"answer":{"value":"His","type":"string"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/12/12.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"question 12","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/13/13.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"In the left-hand column, seven words from the passage are listed. Move the definitions on the right-hand side to align with the correct word.","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"categories":{"value":[{"value":{"choices":{"value":[{"value":"Tiresias","type":"string"},{"value":"Popery","type":"string"},{"value":"Stuarts","type":"string"},{"value":"Restoration","type":"string"},{"value":"patriach","type":"string"},{"value":"Expulsion","type":"string"},{"value":"Puritan","type":"string"}],"type":"array"}},"type":"object"},{"value":{"choices":{"value":[{"value":"the blind prophet","type":"string"},{"value":"pejorative word for Roman Catholicism","type":"string"},{"value":"the royal family to which Charles 1st and his son belonged","type":"string"},{"value":"After Cromwell, Parliament re-introduced monarchy, crowning Charles 2nd on 'constitutional' terms","type":"string"},{"value":"the male head of a family, tribe or people","type":"string"},{"value":"after the Fall, the casting out of Adam and Eve out of Eden","type":"string"},{"value":"strict religious group who sought to 'purify' the Church of England from the taints of Catholicism","type":"string"}],"type":"array"}},"type":"object"}],"type":"array"},"reveals":{"value":[{"value":"","type":"string"},{"value":"","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Arrow","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":13,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/14/14.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"question 14","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/2/2.json:
--------------------------------------------------------------------------------
1 | {"number":{"value":2,"type":"number"},"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Now write the word which Milton uses twice as a metaphor for sight:","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveal":{"value":"rhymes with sight","type":"string"},"text":{"value":"","type":"string"},"entries":{"value":[{"value":{"answer":{"value":"light","type":"string"},"name":{"value":"","type":"string"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"rhymes with sight","type":"string"}},"type":"object"},"name":{"value":"Reveal","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/3/3.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Below are six grievances, only four of which are expressed by Milton in the poem. Identify the two grievances which he does not express.","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"the natural world is hardly suggested in the poem","type":"string"},{"value":"he seems to fear for his gift rather than his independence","type":"string"},{"value":"only \"half his days\" have been lived - he is in his prime","type":"string"},{"value":"his \"one talent\" suggests a special gift","type":"string"},{"value":"his \"true account\" is what his Maker expects of him","type":"string"},{"value":"\"spent\" is emphatic - it's gone","type":"string"}],"type":"array"},"choices":{"value":[{"value":"His blindness prevents him from seeing the beauties of Nature.","type":"string"},{"value":"His blindness makes him dependent on others.","type":"string"},{"value":"His blindness is premature and untimely.","type":"string"},{"value":"His blindness leaves him unable to do what he does best.","type":"string"},{"value":"His blindness undermines God’s intended purpose for him.","type":"string"},{"value":"His blindness cannot be undone.","type":"string"}],"type":"array"},"correctAnswers":{"value":2,"type":"number"}},"type":"object"},"name":{"value":"MultipleChoice","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"NB Milton may have been more concerned with the effect of blindness on his parliamentary career – his ability to “serve” Cromwell’s government as Secretary for Foreign Tongues – than on his poetry. In fact, he continued in his government post (helped by able assistants like Andrew Marvell) and continued to compose poetry (helped by his daughters).","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":3,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/4/4.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Much of the poem’s language relates directly to the Parable of the Talents. Two rhyming words relate closely to the parable. Write them in the order in which they appear –","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"","type":"string"},"entries":{"value":[{"value":{"answer":{"value":"hide","type":"string"},"name":{"value":"","type":"string"}},"type":"object"},{"value":{"name":{"value":"","type":"string"},"answer":{"value":"chide","type":"string"}},"type":"object"}],"type":"array"},"reveal":{"value":"","type":"string"}},"type":"object"},"name":{"value":"ShortAnswer","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"they also rhyme with \"wide\" and \"chide\"","type":"string"}},"type":"object"},"name":{"value":"Reveal","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":4,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/5/5.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"name":{"value":"Text","type":"string"},"data":{"value":{"text":{"value":"Several words in the poem convey the poet’s anguish, bitterness and frustration. Other words are implicitly constructive and hopeful. Sort the following into two groups of four words -","type":"string"}},"type":"object"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":{"soul":{"value":0,"type":"number"},"useless":{"value":1,"type":"number"},"death":{"value":1,"type":"number"},"denied":{"value":1,"type":"number"},"speed":{"value":0,"type":"number"},"spent":{"value":1,"type":"number"},"true":{"value":0,"type":"number"},"mild":{"value":0,"type":"number"}},"type":"object"},"categories":{"value":[{"value":"hopeful","type":"string"},{"value":"pessimistic","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"Sort","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"most of the anguish is in the first part of the poem","type":"string"}},"type":"object"},"name":{"value":"Reveal","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":5,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/6/6.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"The poem takes the form of a dialogue. Critics have offered interesting ideas about the nature and identity of Patience, the voice which addresses Milton. Which of the following interpretations is most easily supported by the evidence of the text?","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"choices":{"value":[{"value":"the personified voice of the heavenly virtue, Patience","type":"string"},{"value":"the visitation of an angel","type":"string"},{"value":"the voice of God","type":"string"},{"value":"the dramatized voice of the poet’s conscience, or better self","type":"string"}],"type":"array"},"reveals":{"value":[{"value":"capitalisation commonly connotes personification","type":"string"},{"value":"there is no explicit reference to angels","type":"string"},{"value":"God is referred to in the 3rd person","type":"string"},{"value":"sounds more Modernist than 17th Century.","type":"string"}],"type":"array"}},"type":"object"},"name":{"value":"SingleChoice","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":6,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/7/7.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"The phrase “His state is kingly” can be read as an expression of God’s majesty and authority. But the word “kingly” is problematic in the context of Milton’s political life, particularly at the time of the sonnet’s composition in early-to-mid 1650s. This task helps you find out why. Use your judgement to interpret the descriptions incorrectly listed in the right hand column, then align them with the correct dates in the left hand column.","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"reveals":{"value":[{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"},{"value":"","type":"string"}],"type":"array"},"categories":{"value":[{"value":{"choices":{"value":[{"value":"1615-1632","type":"string"},{"value":"1638-9","type":"string"},{"value":"1640","type":"string"},{"value":"1642","type":"string"},{"value":"1642-6","type":"string"},{"value":"1658-64","type":"string"},{"value":"1649-1660","type":"string"},{"value":"January 1649","type":"string"},{"value":"March 1649","type":"string"},{"value":"October 1649","type":"string"},{"value":"1652-5","type":"string"},{"value":"1660","type":"string"}],"type":"array"}},"type":"object"},{"value":{"choices":{"value":[{"value":"Educated at St Paul’s School and Christ’s College Cambridge","type":"string"},{"value":"As a young man, travels for a year in France and Italy","type":"string"},{"value":"Two years before the Civil Wars, he begins writing tracts for Puritan and Parliamentary causes","type":"string"},{"value":"Outbreak of the English Civil Wars (finally concluding, 1651)","type":"string"},{"value":"During the first phase of the Civil Wars, around 1644, Milton begins to lose his sight","type":"string"},{"value":"Commonwealth (Republican) Government lasts for more than a decade, ending two years after Oliver Cromwell’s death","type":"string"},{"value":"Execution of Charles 1st","type":"string"},{"value":"Appointed Secretary for Foreign Tongues, serving until 1660","type":"string"},{"value":"Within a few months of his appointment, publishes Eikonoklastes, his defence of the execution","type":"string"},{"value":"Around this time, by now completely blind, Milton composes ‘When I consider how my light is spent’","type":"string"},{"value":"Composition of Paradise Lost, first published in 1667","type":"string"},{"value":"Coronation of Charles II – the Restoration of the Monarchy","type":"string"}],"type":"array"}},"type":"object"}],"type":"array"}},"type":"object"},"name":{"value":"Arrow","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"Charles II was crowned eleven years and three months after his father was executed.","type":"string"}},"type":"object"},"name":{"value":"Reveal","type":"string"}},"type":"object"}],"type":"array"},"number":{"value":7,"type":"number"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/8/8.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"Sonnets frequently have a turn – a point where a tone, or point of view begins to be countered or challenged by an alternative view. This sonnet has a very clear turn. Highlight the line where you think the turn takes place:","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"","type":"string"},"reveal":{"value":"","type":"string"},"words":{"value":[{"value":1,"type":"number"}],"type":"array"}},"type":"object"},"name":{"value":"TextHighlighting","type":"string"}},"type":"object"},{"value":{"data":{"value":{"text":{"value":"the transitional line is punctuated to create a break or caesura in the middle","type":"string"}},"type":"object"},"name":{"value":"Reveal","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/milton/questions/9/9.json:
--------------------------------------------------------------------------------
1 | {"components":{"value":[{"value":{"data":{"value":{"text":{"value":"question 9","type":"string"}},"type":"object"},"name":{"value":"Text","type":"string"}},"type":"object"}],"type":"array"}}
--------------------------------------------------------------------------------
/firebase/backup/bricks/uYVMc4KbjLaBsBo9V7Wq/uYVMc4KbjLaBsBo9V7Wq.json:
--------------------------------------------------------------------------------
1 | {"totalUsers":{"value":420,"type":"number"},"highScore":{"value":69,"type":"number"},"prep":{"value":"The student should read this preparation text and perform what it says you should do. This text can have links and stuff as well.\n","type":"string"},"creator":{"value":"Josephelvet","type":"string"},"avgScore":{"value":16,"type":"number"},"brief":{"value":"The brief for the brick can go here.\n","type":"string"},"title":{"value":"Test Brick 2","type":"string"},"subject":{"value":"Maths","type":"string"},"creationDate":{"value":"2018-08-30T18:40:20.766Z","type":"timestamp"},"type":{"value":1,"type":"number"},"summary":{"value":"This is the summary and it should be longer than either the brief or prep. It's a really long piece of writing and it goes on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on and on. Hope you enjoyed that!\n","type":"string"},"pallet":{"value":{"_referencePath":{"segments":["pallets","bsjsJllNgYkos0w3Wrtv"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/classes/Z7vl6btzFHhPede4yZSi/Z7vl6btzFHhPede4yZSi.json:
--------------------------------------------------------------------------------
1 | {"teacher":{"value":{"_referencePath":{"segments":["teachers","pKOncFi85zWuDaOXbWnCW0ha9YN2"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/classes/Z7vl6btzFHhPede4yZSi/pallets/f0wIFtZ8CDCjvhD4SnFe/f0wIFtZ8CDCjvhD4SnFe.json:
--------------------------------------------------------------------------------
1 | {"pallet":{"value":{"_referencePath":{"segments":["pallets","bsjsJllNgYkos0w3Wrtv"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/classes/Z7vl6btzFHhPede4yZSi/students/0k5CTSiIHCIIxuzXALo7/0k5CTSiIHCIIxuzXALo7.json:
--------------------------------------------------------------------------------
1 | {"student":{"value":{"_referencePath":{"segments":["students","wYfB9tfvLySPQwvWs1v62DsaQiG3"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/bsjsJllNgYkos0w3Wrtv/bricks/6FD2XgVyNJ161KQFBpVo/6FD2XgVyNJ161KQFBpVo.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","08x0CLQKs5JIy6VGD7yO"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/bsjsJllNgYkos0w3Wrtv/bricks/b8nLILCRvFXMCUmcu4NF/b8nLILCRvFXMCUmcu4NF.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","uYVMc4KbjLaBsBo9V7Wq"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/bsjsJllNgYkos0w3Wrtv/bricks/milton/milton.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","milton"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/bsjsJllNgYkos0w3Wrtv/bricks/uAbpscbGDGoVleXCNtQH/uAbpscbGDGoVleXCNtQH.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","lh0pzfSRgVBSZ8UBaDJb"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/bsjsJllNgYkos0w3Wrtv/bsjsJllNgYkos0w3Wrtv.json:
--------------------------------------------------------------------------------
1 | {"name":{"value":"Hamlet","type":"string"},"subject":{"value":"English","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/bricks/20min1/20min1.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","20min1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/bricks/20min2/20min2.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","20min2"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/bricks/20min3/20min3.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","20min3"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/bricks/40min1/40min1.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","40min1"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/bricks/40min2/40min2.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","40min2"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/bricks/milton/milton.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","milton"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/demopallet/demopallet.json:
--------------------------------------------------------------------------------
1 | {"name":{"value":"Demo Pallet","type":"string"},"subject":{"value":"English","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/Arrow/Arrow.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","Arrow"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/HorizontalShuffle/HorizontalShuffle.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","HorizontalShuffle"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/MultipleChoice/MultipleChoice.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","MultipleChoice"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/Order/Order.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","Order"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/ShortAnswer/ShortAnswer.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","ShortAnswer"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/SingleChoice/SingleChoice.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","SingleChoice"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/Sort/Sort.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","Sort"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/bricks/TextHighlighting/TextHighlighting.json:
--------------------------------------------------------------------------------
1 | {"brick":{"value":{"_referencePath":{"segments":["bricks","TextHighlighting"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/pallets/testpallet1/testpallet1.json:
--------------------------------------------------------------------------------
1 | {"subject":{"value":"English","type":"string"},"name":{"value":"Test Pallet","type":"string"}}
--------------------------------------------------------------------------------
/firebase/backup/teachers/pKOncFi85zWuDaOXbWnCW0ha9YN2/classes/OWtS1woe6V52ICQZrKei/OWtS1woe6V52ICQZrKei.json:
--------------------------------------------------------------------------------
1 | {"class":{"value":{"_referencePath":{"segments":["classes","Z7vl6btzFHhPede4yZSi"],"projectId":"learning-fortress","databaseId":"(default)"}},"type":"documentReference"}}
--------------------------------------------------------------------------------
/firebase/backup/teachers/pKOncFi85zWuDaOXbWnCW0ha9YN2/pKOncFi85zWuDaOXbWnCW0ha9YN2.json:
--------------------------------------------------------------------------------
1 | {"name":{"value":"Joseph Francis","type":"string"},"uid":{"value":"pKOncFi85zWuDaOXbWnCW0ha9YN2","type":"string"}}
--------------------------------------------------------------------------------
/firebase/firebase-functions/.firebaserc:
--------------------------------------------------------------------------------
1 | {
2 | "projects": {
3 | "default": "learning-fortress"
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/firebase/firebase-functions/firebase.json:
--------------------------------------------------------------------------------
1 | {
2 | "functions": {
3 | "predeploy": [
4 | "npm --prefix \"$RESOURCE_DIR\" run lint"
5 | ]
6 | }
7 | }
8 |
--------------------------------------------------------------------------------
/firebase/firebase-functions/functions/index.js:
--------------------------------------------------------------------------------
1 | const functions = require('firebase-functions');
2 |
3 | // // Create and Deploy Your First Cloud Functions
4 | // // https://firebase.google.com/docs/functions/write-firebase-functions
5 | //
6 | // exports.helloWorld = functions.https.onRequest((request, response) => {
7 | // response.send("Hello from Firebase!");
8 | // });
9 |
10 | // const admin = require("firebase-admin");
11 | // admin.initializeApp();
12 |
13 | // exports.blockSignup = functions.auth.user().onCreate(event => {
14 | // // console.log(event);
15 | // //if (!event.emailVerified)
16 | // return admin.auth().updateUser(event.uid, { disabled: true })
17 | // .then(userRecord => console.log("Auto blocked user", userRecord.toJSON()))
18 | // .catch(error => console.log("Error auto blocking:", error));
19 | // });
--------------------------------------------------------------------------------
/firebase/firebase-functions/functions/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "functions",
3 | "description": "Cloud Functions for Firebase",
4 | "scripts": {
5 | "lint": "eslint .",
6 | "serve": "firebase serve --only functions",
7 | "shell": "firebase functions:shell",
8 | "start": "npm run shell",
9 | "deploy": "firebase deploy --only functions",
10 | "logs": "firebase functions:log"
11 | },
12 | "dependencies": {
13 | "firebase-admin": "~6.0.0",
14 | "firebase-functions": "^2.0.3"
15 | },
16 | "devDependencies": {
17 | "eslint": "^4.12.0",
18 | "eslint-plugin-promise": "^3.6.0"
19 | },
20 | "private": true
21 | }
22 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "learning-fortress-frontend",
3 | "version": "0.0.0",
4 | "scripts": {
5 | "ng": "ng",
6 | "start": "node server.js",
7 | "debug": "ng serve --aot",
8 | "build": "ng build",
9 | "test": "ng test",
10 | "lint": "ng lint",
11 | "e2e": "ng e2e",
12 | "postinstall": "ng build --aot --prod"
13 | },
14 | "engines": {
15 | "node": "8.11.3",
16 | "npm": "6.1.0"
17 | },
18 | "private": true,
19 | "dependencies": {
20 | "@angular/animations": "^6.0.7",
21 | "@angular/cdk": "^6.3.1",
22 | "@angular/cli": "~6.0.8",
23 | "@angular/common": "^6.0.3",
24 | "@angular/compiler": "^6.0.3",
25 | "@angular/compiler-cli": "^6.0.3",
26 | "@angular/core": "^6.0.3",
27 | "@angular/flex-layout": "^6.0.0-beta.16",
28 | "@angular/forms": "^6.0.3",
29 | "@angular/http": "^6.0.3",
30 | "@angular/material": "^6.3.1",
31 | "@angular/platform-browser": "^6.0.3",
32 | "@angular/platform-browser-dynamic": "^6.0.3",
33 | "@angular/router": "^6.0.3",
34 | "@types/jquery": "^3.3.6",
35 | "angular-fittext": "^2.1.1",
36 | "angularfire2": "^5.0.0-rc.11",
37 | "body-parser": "^1.18.3",
38 | "core-js": "^2.5.4",
39 | "express": "^4.16.3",
40 | "firebase": "^5.3.0",
41 | "firebaseui": "^3.2.0",
42 | "firebaseui-angular": "^3.1.1",
43 | "ng-dynamic-component": "^3.0.0",
44 | "ng2-dragula": "^2.0.2",
45 | "ngx-pipes": "^2.2.0",
46 | "path": "^0.12.7",
47 | "rxjs": "^6.2.2",
48 | "rxjs-compat": "^6.2.2",
49 | "typescript": "~2.7.2",
50 | "url-parse": "^1.4.3",
51 | "zone.js": "^0.8.26"
52 | },
53 | "devDependencies": {
54 | "@angular-devkit/build-angular": "~0.6.8",
55 | "@angular/language-service": "^6.0.3",
56 | "@types/jasmine": "~2.8.6",
57 | "@types/jasminewd2": "~2.0.3",
58 | "@types/node": "~8.9.4",
59 | "codelyzer": "~4.2.1",
60 | "enhanced-resolve": "^4.1.0",
61 | "firebase-admin": "^6.0.0",
62 | "firebase-functions": "^2.0.5",
63 | "jasmine-core": "~2.99.1",
64 | "jasmine-spec-reporter": "~4.2.1",
65 | "karma": "^3.0.0",
66 | "karma-chrome-launcher": "~2.2.0",
67 | "karma-coverage-istanbul-reporter": "~2.0.0",
68 | "karma-jasmine": "~1.1.1",
69 | "karma-jasmine-html-reporter": "^0.2.2",
70 | "node-sass": "^4.9.3",
71 | "protractor": "^5.4.0",
72 | "ts-node": "~5.0.1",
73 | "tslint": "~5.9.1"
74 | }
75 | }
76 |
--------------------------------------------------------------------------------
/server.js:
--------------------------------------------------------------------------------
1 | //Install express server
2 | const express = require('express');
3 | const path = require('path');
4 | const bodyParser = require('body-parser');
5 |
6 | const app = express();
7 |
8 | app.use(bodyParser.json());
9 | app.use(bodyParser.urlencoded({ extended: false }))
10 |
11 | // Serve only the static files form the dist directory
12 | app.use(express.static(__dirname + '/dist/learning-fortress-frontend'));
13 |
14 | app.get('*', (req, res) => {
15 | res.sendFile(path.join(__dirname, 'dist/learning-fortress-frontend/index.html'));
16 | });
17 |
18 | // Start the app by listening on the default Heroku port
19 | app.listen(process.env.PORT || 8080);
20 | console.log('Listening on port %s', process.env.PORT || 8080);
--------------------------------------------------------------------------------
/src/app/app.component.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/src/app/app.component.ts:
--------------------------------------------------------------------------------
1 | import { Component } from '@angular/core';
2 | import { AngularFireAuth } from 'angularfire2/auth';
3 | import { User } from 'firebase';
4 | import { Observable } from 'rxjs';
5 | import { AuthService } from './auth/auth.service';
6 |
7 | @Component({
8 | selector: 'app-root',
9 | templateUrl: './app.component.html',
10 | })
11 | export class AppComponent {
12 | constructor(public authService: AuthService) { }
13 | }
14 |
--------------------------------------------------------------------------------
/src/app/app.module.ts:
--------------------------------------------------------------------------------
1 | // External Libraries
2 | import { NgModule } from '@angular/core';
3 | import { BrowserModule } from '@angular/platform-browser';
4 | import { HttpClientModule } from '@angular/common/http';
5 | import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
6 | import { FlexLayoutModule } from '@angular/flex-layout';
7 | import { FormsModule } from '@angular/forms';
8 | import { DragulaModule } from 'ng2-dragula';
9 |
10 | // Routing, Styling, Environment
11 | import { AppRoutingModule } from './app.routing';
12 | import { MaterialModule } from './material.module';
13 | import { environment } from '../environments/environment';
14 |
15 | // Component Modules
16 | import { AppComponent } from './app.component';
17 | import { PlayModule } from './play/play.module';
18 | import { LoginModule } from './login/login.module';
19 | import { ManageModule } from './manage/manage.module';
20 | import { BuildModule } from './build/build.module';
21 |
22 | // Authentication
23 | import { AuthModule } from './auth/auth.module';
24 | import { AngularFireModule } from 'angularfire2';
25 | import { DatabaseModule } from './database/database.module';
26 |
27 |
28 | @NgModule({
29 | declarations: [
30 | AppComponent
31 | ],
32 | imports: [
33 | AppRoutingModule,
34 | BrowserModule,
35 | FormsModule,
36 | LoginModule,
37 | PlayModule,
38 | ManageModule,
39 | BuildModule,
40 | HttpClientModule,
41 | BrowserAnimationsModule,
42 | MaterialModule,
43 | FlexLayoutModule,
44 | AngularFireModule.initializeApp(environment.firebase),
45 | AuthModule,
46 | DatabaseModule,
47 | DragulaModule.forRoot()
48 | ],
49 | providers: [],
50 | bootstrap: [AppComponent]
51 | })
52 | export class AppModule { }
53 |
--------------------------------------------------------------------------------
/src/app/app.routing.ts:
--------------------------------------------------------------------------------
1 | import { NgModule } from '@angular/core';
2 | import { RouterModule, Routes } from '@angular/router';
3 |
4 | const routes : Routes = [
5 | { path: "play", loadChildren: "./play/play.module#PlayModule" },
6 | { path: "manage", loadChildren: "./manage/manage.module#ManageModule"},
7 | { path: "build", loadChildren: "./build/build.module#BuildModule"},
8 | { path: "", redirectTo: "play/dashboard", pathMatch: "full"}
9 | ]
10 |
11 | @NgModule({
12 | imports: [
13 | RouterModule.forRoot(routes),
14 | ],
15 | exports: [
16 | RouterModule
17 | ],
18 | })
19 | export class AppRoutingModule { }
20 |
--------------------------------------------------------------------------------
/src/app/auth/auth.module.ts:
--------------------------------------------------------------------------------
1 | import { FirebaseUIAuthConfig, AuthProvider, AuthMethods, CredentialHelper, FirebaseUIModule } from "firebaseui-angular";
2 | import { AngularFireModule } from "angularfire2"
3 | import { AngularFireAuthModule } from "angularfire2/auth";
4 | import { NgModule } from "@angular/core";
5 | import { environment } from "../../environments/environment";
6 | import { AuthService } from "./auth.service";
7 |
8 | // https://github.com/RaphaelJenni/FirebaseUI-Angular
9 | //
10 | const firebaseUiAuthConfig: FirebaseUIAuthConfig = {
11 | providers: [
12 | AuthProvider.Password,
13 | AuthProvider.Google
14 | ],
15 | method: AuthMethods.Popup,
16 | // tos: '',
17 | credentialHelper: CredentialHelper.AccountChooser,
18 | autoUpgradeAnonymousUsers: false,
19 | disableSignInSuccessCallback: true,
20 | };
21 |
22 | @NgModule({
23 | imports: [
24 | AngularFireAuthModule,
25 | FirebaseUIModule.forRoot(firebaseUiAuthConfig)
26 | ],
27 | exports: [
28 | AngularFireAuthModule,
29 | FirebaseUIModule
30 | ],
31 | providers: [
32 | AuthService
33 | ]
34 | })
35 | export class AuthModule { }
36 |
--------------------------------------------------------------------------------
/src/app/auth/auth.service.ts:
--------------------------------------------------------------------------------
1 | import { Injectable } from "@angular/core";
2 | import { AngularFireAuth } from "angularfire2/auth";
3 | import { User } from "firebase";
4 | import { Observable } from "rxjs";
5 | import { FirebaseUISignInSuccessWithAuthResult, FirebaseUISignInFailure } from "firebaseui-angular";
6 | import { environment } from "../../environments/environment.prod";
7 | import { Router } from "@angular/router";
8 |
9 | @Injectable({
10 | providedIn: 'root'
11 | })
12 | export class AuthService {
13 | user: Observable;
14 |
15 | constructor(public afAuth: AngularFireAuth, private router: Router) {
16 | this.user = afAuth.user;
17 | }
18 |
19 | signInSuccess(event: FirebaseUISignInSuccessWithAuthResult) {
20 | console.log(`signed in as ${event.authResult.user.displayName} who is${event.authResult.additionalUserInfo.isNewUser?"":" not"} a new user.`);
21 | return true;
22 | }
23 |
24 | signInFailure(event: FirebaseUISignInFailure) {
25 | console.log(`sign in failed because ${event.code}`);
26 | return true;
27 | }
28 |
29 | logout() {
30 | this.afAuth.auth.signOut();
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/app/build/brick/brick.component.html:
--------------------------------------------------------------------------------
1 |
Lorem ipsum dolor sit amet consectetur adipisicing elit. Molestias quo commodi nostrum porro enim minus fugiat quam? Id, eveniet est praesentium quae eaque adipisci enim maiores ullam, laborum accusamus voluptate.
6 |
Nostrum eos in non quas officiis debitis, vitae laborum neque quidem at numquam dolore commodi saepe vel exercitationem laboriosam! Necessitatibus odit animi vel? Voluptate minima inventore quam saepe et sint.
7 |
Modi unde laboriosam iure? Natus libero cupiditate laudantium incidunt ipsum asperiores, vitae delectus quod totam necessitatibus, odit officia voluptas nam rerum excepturi ex minus beatae vel, quos sed fugit? Totam?