├── vendor
└── .gitkeep
├── app
├── components
│ ├── .gitkeep
│ └── book-cover.js
├── helpers
│ └── .gitkeep
├── models
│ ├── .gitkeep
│ ├── publishing-house.js
│ ├── publisher.js
│ ├── book.js
│ └── author.js
├── routes
│ ├── .gitkeep
│ ├── author.js
│ ├── application.js
│ └── books.js
├── controllers
│ ├── .gitkeep
│ └── books.js
├── templates
│ ├── components
│ │ ├── .gitkeep
│ │ └── book-cover.hbs
│ ├── application.hbs
│ ├── books.hbs
│ └── author.hbs
├── resolver.js
├── router.js
├── app.js
├── adapters
│ └── author.js
├── index.html
└── styles
│ └── app.css
├── tests
├── helpers
│ └── .gitkeep
├── unit
│ ├── .gitkeep
│ ├── routes
│ │ ├── books-test.js
│ │ ├── author-test.js
│ │ └── application-test.js
│ ├── adapters
│ │ └── author-test.js
│ ├── controllers
│ │ └── books-test.js
│ └── models
│ │ ├── book-test.js
│ │ ├── author-test.js
│ │ ├── publisher-test.js
│ │ └── publishing-house-test.js
├── integration
│ ├── .gitkeep
│ └── components
│ │ └── book-cover-test.js
├── test-helper.js
└── index.html
├── public
└── robots.txt
├── .gitignore
├── config
├── targets.js
└── environment.js
├── testem.js
├── ember-cli-build.js
├── package.json
└── README.md
/vendor/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/components/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/helpers/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/models/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/routes/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/helpers/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/unit/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/controllers/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/tests/integration/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/app/templates/components/.gitkeep:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | # http://www.robotstxt.org
2 | User-agent: *
3 | Disallow:
4 |
--------------------------------------------------------------------------------
/app/resolver.js:
--------------------------------------------------------------------------------
1 | import Resolver from 'ember-resolver';
2 |
3 | export default Resolver;
4 |
--------------------------------------------------------------------------------
/app/models/publishing-house.js:
--------------------------------------------------------------------------------
1 | import Publisher from './publisher';
2 |
3 | export default Publisher.extend();
--------------------------------------------------------------------------------
/app/templates/application.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{link-to "Our Awesome Bookstore" 'books'}}
3 |
4 |
5 |
6 | {{outlet}}
7 |
--------------------------------------------------------------------------------
/app/routes/author.js:
--------------------------------------------------------------------------------
1 | import Route from '@ember/routing/route';
2 |
3 | export default Route.extend({
4 | model(params) {
5 | return this.store.findRecord('author', params.author_id);
6 | }
7 | });
--------------------------------------------------------------------------------
/app/templates/books.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{#each model as |book|}}
3 | {{book-cover book=book blurBackground=(route-action "blurBackground")}}
4 | {{/each}}
5 |
6 |
7 | {{#if showAll}}
8 | Show All
9 | {{/if}}
--------------------------------------------------------------------------------
/app/routes/application.js:
--------------------------------------------------------------------------------
1 | import Route from '@ember/routing/route';
2 |
3 | export default Route.extend({
4 |
5 | actions: {
6 | blurBackground(blur) {
7 | this.controllerFor('application').set('blur', blur);
8 | }
9 | }
10 |
11 | });
12 |
--------------------------------------------------------------------------------
/tests/test-helper.js:
--------------------------------------------------------------------------------
1 | import Application from '../app';
2 | import config from '../config/environment';
3 | import { setApplication } from '@ember/test-helpers';
4 | import { start } from 'ember-qunit';
5 |
6 | setApplication(Application.create(config.APP));
7 |
8 | start();
9 |
--------------------------------------------------------------------------------
/app/models/publisher.js:
--------------------------------------------------------------------------------
1 | import Model from 'ember-data/model';
2 | import attr from 'ember-data/attr';
3 | import { hasMany } from 'ember-data/relationships';
4 |
5 | export default Model.extend({
6 | name: attr(),
7 | discount: attr('number'),
8 | published: hasMany('book')
9 | });
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # See http://help.github.com/ignore-files/ for more about ignoring files.
2 |
3 | # compiled output
4 | /dist
5 | /tmp
6 |
7 | # dependencies
8 | /node_modules
9 | /bower_components
10 |
11 | # misc
12 | /.sass-cache
13 | /connect.lock
14 | /coverage/*
15 | /libpeerconnection.log
16 | npm-debug.log
17 | testem.log
18 |
--------------------------------------------------------------------------------
/tests/unit/routes/books-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 |
4 | module('Unit | Route | books', function(hooks) {
5 | setupTest(hooks);
6 |
7 | test('it exists', function(assert) {
8 | let route = this.owner.lookup('route:books');
9 | assert.ok(route);
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/author-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 |
4 | module('Unit | Route | author', function(hooks) {
5 | setupTest(hooks);
6 |
7 | test('it exists', function(assert) {
8 | let route = this.owner.lookup('route:author');
9 | assert.ok(route);
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/tests/unit/routes/application-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 |
4 | module('Unit | Route | application', function(hooks) {
5 | setupTest(hooks);
6 |
7 | test('it exists', function(assert) {
8 | let route = this.owner.lookup('route:application');
9 | assert.ok(route);
10 | });
11 | });
12 |
--------------------------------------------------------------------------------
/app/models/book.js:
--------------------------------------------------------------------------------
1 | import Model from 'ember-data/model';
2 | import attr from 'ember-data/attr';
3 | import { belongsTo } from 'ember-data/relationships';
4 |
5 | export default Model.extend({
6 | title: attr(),
7 | price: attr('number'),
8 | author: belongsTo('author', { inverse: 'books' }),
9 | publisher: belongsTo('publisher', { polymorphic: true, inverse: 'published' })
10 | });
--------------------------------------------------------------------------------
/config/targets.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const browsers = [
4 | 'last 1 Chrome versions',
5 | 'last 1 Firefox versions',
6 | 'last 1 Safari versions'
7 | ];
8 |
9 | const isCI = !!process.env.CI;
10 | const isProduction = process.env.EMBER_ENV === 'production';
11 |
12 | if (isCI || isProduction) {
13 | browsers.push('ie 11');
14 | }
15 |
16 | module.exports = {
17 | browsers
18 | };
19 |
--------------------------------------------------------------------------------
/app/models/author.js:
--------------------------------------------------------------------------------
1 | import Publisher from './publisher';
2 | import attr from 'ember-data/attr';
3 | import { hasMany } from 'ember-data/relationships';
4 | import { on } from '@ember/object/evented';
5 |
6 | export default Publisher.extend({
7 | name: attr(),
8 | books: hasMany(),
9 |
10 | onDidLoad: on('didLoad', function() {
11 | this.set('loadedAt', new Date());
12 | })
13 |
14 | });
--------------------------------------------------------------------------------
/tests/unit/adapters/author-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 |
4 | module('Unit | Adapter | author', function(hooks) {
5 | setupTest(hooks);
6 |
7 | // Replace this with your real tests.
8 | test('it exists', function(assert) {
9 | let adapter = this.owner.lookup('adapter:author');
10 | assert.ok(adapter);
11 | });
12 | });
13 |
--------------------------------------------------------------------------------
/app/router.js:
--------------------------------------------------------------------------------
1 | import EmberRouter from '@ember/routing/router';
2 | import config from './config/environment';
3 |
4 | const Router = EmberRouter.extend({
5 | location: config.locationType,
6 | rootURL: config.rootURL
7 | });
8 |
9 | Router.map(function() {
10 | this.route('books', { path: '/' });
11 | this.route('author', { path: '/authors/:author_id' });
12 | });
13 |
14 | export default Router;
15 |
--------------------------------------------------------------------------------
/tests/unit/controllers/books-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 |
4 | module('Unit | Controller | books', function(hooks) {
5 | setupTest(hooks);
6 |
7 | // Replace this with your real tests.
8 | test('it exists', function(assert) {
9 | let controller = this.owner.lookup('controller:books');
10 | assert.ok(controller);
11 | });
12 | });
13 |
--------------------------------------------------------------------------------
/app/app.js:
--------------------------------------------------------------------------------
1 | import Application from '@ember/application';
2 | import Resolver from './resolver';
3 | import loadInitializers from 'ember-load-initializers';
4 | import config from './config/environment';
5 |
6 | const App = Application.extend({
7 | modulePrefix: config.modulePrefix,
8 | podModulePrefix: config.podModulePrefix,
9 | Resolver
10 | });
11 |
12 | loadInitializers(App, config.modulePrefix);
13 |
14 | export default App;
15 |
--------------------------------------------------------------------------------
/app/controllers/books.js:
--------------------------------------------------------------------------------
1 | import Controller from '@ember/controller';
2 | import { computed } from '@ember/object';
3 |
4 | export default Controller.extend({
5 |
6 | queryParams: ['limit'],
7 | limit: 5,
8 |
9 | total: computed('model.meta', function() {
10 | return this.get('model.meta').total;
11 | }),
12 |
13 | showAll: computed('total', 'model.[]', function() {
14 | return this.get('total') > this.get('model.length');
15 | })
16 |
17 | });
--------------------------------------------------------------------------------
/app/components/book-cover.js:
--------------------------------------------------------------------------------
1 | import Component from '@ember/component';
2 |
3 | export default Component.extend({
4 |
5 | actions: {
6 |
7 | open() {
8 | this.get('book').reload().then(() => {
9 | this.set('isShowingModal', true);
10 | this.get('blurBackground')(true);
11 | });
12 | },
13 |
14 | close() {
15 | this.set('isShowingModal', false);
16 | this.get('blurBackground')(false);
17 | }
18 |
19 | }
20 |
21 | });
22 |
--------------------------------------------------------------------------------
/tests/unit/models/book-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 | import { run } from '@ember/runloop';
4 |
5 | module('Unit | Model | book', function(hooks) {
6 | setupTest(hooks);
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let store = this.owner.lookup('service:store');
11 | let model = run(() => store.createRecord('book', {}));
12 | assert.ok(model);
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/tests/unit/models/author-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 | import { run } from '@ember/runloop';
4 |
5 | module('Unit | Model | author', function(hooks) {
6 | setupTest(hooks);
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let store = this.owner.lookup('service:store');
11 | let model = run(() => store.createRecord('author', {}));
12 | assert.ok(model);
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/app/routes/books.js:
--------------------------------------------------------------------------------
1 | import Route from '@ember/routing/route';
2 |
3 | export default Route.extend({
4 |
5 | queryParams: {
6 | limit: {
7 | refreshModel: true
8 | }
9 | },
10 |
11 | model(params) {
12 | return this.store.query('book', params);
13 | },
14 |
15 | actions: {
16 |
17 | showAll() {
18 | const total = this.controllerFor('books').get('total');
19 | this.transitionTo({ queryParams: { limit: total }});
20 | }
21 |
22 | }
23 |
24 | });
25 |
--------------------------------------------------------------------------------
/tests/unit/models/publisher-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 | import { run } from '@ember/runloop';
4 |
5 | module('Unit | Model | publisher', function(hooks) {
6 | setupTest(hooks);
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let store = this.owner.lookup('service:store');
11 | let model = run(() => store.createRecord('publisher', {}));
12 | assert.ok(model);
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/tests/unit/models/publishing-house-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupTest } from 'ember-qunit';
3 | import { run } from '@ember/runloop';
4 |
5 | module('Unit | Model | publishing house', function(hooks) {
6 | setupTest(hooks);
7 |
8 | // Replace this with your real tests.
9 | test('it exists', function(assert) {
10 | let store = this.owner.lookup('service:store');
11 | let model = run(() => store.createRecord('publishing-house', {}));
12 | assert.ok(model);
13 | });
14 | });
15 |
--------------------------------------------------------------------------------
/app/adapters/author.js:
--------------------------------------------------------------------------------
1 | import JSONAPIAdapter from 'ember-data/adapters/json-api';
2 |
3 | export default JSONAPIAdapter.extend({
4 |
5 | shouldReloadRecord() {
6 | return false;
7 | },
8 |
9 | shouldBackgroundReloadRecord(store, snapshot) {
10 |
11 | console.log("Calling shouldBackgroundReloadRecord");
12 | const loadedAt = snapshot.record.get('loadedAt');
13 |
14 | // if it was loaded more than an hour ago
15 | if (Date.now() - loadedAt > 3600000) {
16 | return true;
17 | } else {
18 | return false;
19 | }
20 | }
21 |
22 | });
23 |
--------------------------------------------------------------------------------
/testem.js:
--------------------------------------------------------------------------------
1 | module.exports = {
2 | test_page: 'tests/index.html?hidepassed',
3 | disable_watching: true,
4 | launch_in_ci: [
5 | 'Chrome'
6 | ],
7 | launch_in_dev: [
8 | 'Chrome'
9 | ],
10 | browser_args: {
11 | Chrome: {
12 | mode: 'ci',
13 | args: [
14 | // --no-sandbox is needed when running Chrome inside a container
15 | process.env.TRAVIS ? '--no-sandbox' : null,
16 |
17 | '--disable-gpu',
18 | '--headless',
19 | '--remote-debugging-port=0',
20 | '--window-size=1440,900'
21 | ].filter(Boolean)
22 | }
23 | }
24 | };
25 |
--------------------------------------------------------------------------------
/app/templates/author.hbs:
--------------------------------------------------------------------------------
1 | {{model.name}}
2 |
3 | Biography : Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
4 |
5 | Published titles:
6 |
7 | {{#each model.books as |book|}}
8 | {{book-cover book=book blurBackground=(route-action "blurBackground")}}
9 | {{/each}}
10 |
--------------------------------------------------------------------------------
/app/templates/components/book-cover.hbs:
--------------------------------------------------------------------------------
1 |
2 | {{book.title}}
3 | by
4 | {{link-to book.author.name 'author' book.author.id class="author" }}
5 |
6 |
7 | {{#if isShowingModal}}
8 | {{#modal-dialog onClose=(action 'close') clickOutsideToClose=true}}
9 |
10 |
11 |
Purchase confirmation
12 | You want to buy
{{book.title}} by {{book.author.name}}.
13 |
14 |
15 | Purchase for ${{book.price}}!
16 |
17 |
18 |
19 | Thank you! We will e-mail you your e-book
20 |
21 |
22 |
23 |
24 | {{/modal-dialog}}
25 | {{/if}}
--------------------------------------------------------------------------------
/app/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Bookstore
7 |
8 |
9 |
10 | {{content-for "head"}}
11 |
12 |
13 |
14 |
15 | {{content-for "head-footer"}}
16 |
17 |
18 | {{content-for "body"}}
19 |
20 |
21 |
22 |
23 | {{content-for "body-footer"}}
24 |
25 |
26 |
--------------------------------------------------------------------------------
/ember-cli-build.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | const EmberApp = require('ember-cli/lib/broccoli/ember-app');
4 |
5 | module.exports = function(defaults) {
6 | let app = new EmberApp(defaults, {
7 | // Add options here
8 | });
9 |
10 | // Use `app.import` to add additional libraries to the generated
11 | // output files.
12 | //
13 | // If you need to use different assets in different
14 | // environments, specify an object as the first parameter. That
15 | // object's keys should be the environment name and the values
16 | // should be the asset to use in that environment.
17 | //
18 | // If the library that you are including contains AMD or ES6
19 | // modules that you would like to import into your application
20 | // please specify an object with the list of modules as keys
21 | // along with the exports of each module as its value.
22 |
23 | return app.toTree();
24 | };
25 |
--------------------------------------------------------------------------------
/tests/integration/components/book-cover-test.js:
--------------------------------------------------------------------------------
1 | import { module, test } from 'qunit';
2 | import { setupRenderingTest } from 'ember-qunit';
3 | import { render } from '@ember/test-helpers';
4 | import hbs from 'htmlbars-inline-precompile';
5 |
6 | module('Integration | Component | book-cover', function(hooks) {
7 | setupRenderingTest(hooks);
8 |
9 | test('it renders', async function(assert) {
10 | // Set any properties with this.set('myProperty', 'value');
11 | // Handle any actions with this.set('myAction', function(val) { ... });
12 |
13 | await render(hbs`{{book-cover}}`);
14 |
15 | assert.equal(this.element.textContent.trim(), '');
16 |
17 | // Template block usage:
18 | await render(hbs`
19 | {{#book-cover}}
20 | template block text
21 | {{/book-cover}}
22 | `);
23 |
24 | assert.equal(this.element.textContent.trim(), 'template block text');
25 | });
26 | });
27 |
--------------------------------------------------------------------------------
/tests/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Bookstore Tests
7 |
8 |
9 |
10 | {{content-for "head"}}
11 | {{content-for "test-head"}}
12 |
13 |
14 |
15 |
16 |
17 | {{content-for "head-footer"}}
18 | {{content-for "test-head-footer"}}
19 |
20 |
21 | {{content-for "body"}}
22 | {{content-for "test-body"}}
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 | {{content-for "body-footer"}}
31 | {{content-for "test-body-footer"}}
32 |
33 |
34 |
--------------------------------------------------------------------------------
/config/environment.js:
--------------------------------------------------------------------------------
1 | 'use strict';
2 |
3 | module.exports = function(environment) {
4 | let ENV = {
5 | modulePrefix: 'bookstore',
6 | environment,
7 | rootURL: '/',
8 | locationType: 'auto',
9 | EmberENV: {
10 | FEATURES: {
11 | // Here you can enable experimental features on an ember canary build
12 | // e.g. 'with-controller': true
13 | },
14 | EXTEND_PROTOTYPES: {
15 | // Prevent Ember Data from overriding Date.parse.
16 | Date: false
17 | }
18 | },
19 |
20 | APP: {
21 | // Here you can pass flags/options to your application instance
22 | // when it is created
23 | }
24 | };
25 |
26 | if (environment === 'development') {
27 | // ENV.APP.LOG_RESOLVER = true;
28 | // ENV.APP.LOG_ACTIVE_GENERATION = true;
29 | // ENV.APP.LOG_TRANSITIONS = true;
30 | // ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
31 | // ENV.APP.LOG_VIEW_LOOKUPS = true;
32 | }
33 |
34 | if (environment === 'test') {
35 | // Testem prefers this...
36 | ENV.locationType = 'none';
37 |
38 | // keep test console output quieter
39 | ENV.APP.LOG_ACTIVE_GENERATION = false;
40 | ENV.APP.LOG_VIEW_LOOKUPS = false;
41 |
42 | ENV.APP.rootElement = '#ember-testing';
43 | ENV.APP.autoboot = false;
44 | }
45 |
46 | if (environment === 'production') {
47 | // here you can enable a production-specific feature
48 | }
49 |
50 | return ENV;
51 | };
52 |
--------------------------------------------------------------------------------
/app/styles/app.css:
--------------------------------------------------------------------------------
1 | body {
2 | font-family: Courier, monospace;
3 | font-size: 1.2em;
4 | margin-left: 2em;
5 | }
6 |
7 | ul {
8 | margin: 0;
9 | padding: 0;
10 | list-style-type: none;
11 | }
12 |
13 | ul div {
14 | display: inline-block;
15 | vertical-align: top;
16 | height: 250px;
17 | width: 200px;
18 | text-align: center;
19 | padding: 0 1em 3em;
20 | }
21 |
22 | ul li {
23 | padding: 1em;
24 | border: 6px solid #AFAFAF;
25 | background: #E9E9E9;
26 | height: 90%;
27 | cursor: pointer;
28 | }
29 |
30 | a {
31 | text-decoration: none;
32 | color: inherit;
33 | }
34 |
35 | a.author {
36 | text-decoration: underline;
37 | color: #111;
38 | }
39 |
40 | .modal {
41 | width: 20em;
42 | height: 15em;
43 | position: fixed;
44 | top: 50%;
45 | left: 50%;
46 | margin-top: -7.5em;
47 | margin-left: -10em;
48 | padding: 1em;
49 | background-color: #f1c40f;
50 | border-radius: 5px;
51 | text-align: center;
52 | z-index: 11; /* 1px higher than the overlay layer */
53 | opacity: 1 !important;
54 | -webkit-border-radius: 4px;
55 | -moz-border-radius: 4px;
56 | border-radius: 4px;
57 | -webkit-box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.28);
58 | -moz-box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.28);
59 | box-shadow: 0px 0px 5px 3px rgba(0,0,0,0.28);
60 | -webkit-transition: opacity 400ms ease-in;
61 | -moz-transition: opacity 400ms ease-in;
62 | transition: opacity 400ms ease-in;
63 | }
64 |
65 | .blur-background {
66 | z-index: -999;
67 | opacity: 0.3;
68 | pointer-events: none;
69 | filter: blur(3px);
70 | -webkit-filter: blur(3px);
71 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "bookstore",
3 | "version": "0.0.0",
4 | "private": true,
5 | "description": "Small description for bookstore goes here",
6 | "license": "MIT",
7 | "author": "",
8 | "directories": {
9 | "doc": "doc",
10 | "test": "tests"
11 | },
12 | "repository": "",
13 | "scripts": {
14 | "build": "ember build",
15 | "lint:js": "eslint ./*.js app config lib server tests",
16 | "start": "ember serve",
17 | "test": "ember test"
18 | },
19 | "devDependencies": {
20 | "broccoli-asset-rev": "^2.4.5",
21 | "ember-ajax": "^3.0.0",
22 | "ember-cli": "~3.1.2",
23 | "ember-cli-app-version": "^3.0.0",
24 | "ember-cli-babel": "^6.6.0",
25 | "ember-cli-dependency-checker": "^2.0.0",
26 | "ember-cli-eslint": "^4.2.1",
27 | "ember-cli-htmlbars": "^2.0.1",
28 | "ember-cli-htmlbars-inline-precompile": "^1.0.0",
29 | "ember-cli-inject-live-reload": "^1.4.1",
30 | "ember-cli-qunit": "^4.1.1",
31 | "ember-cli-shims": "^1.2.0",
32 | "ember-cli-sri": "^2.1.0",
33 | "ember-cli-uglify": "^2.0.0",
34 | "ember-data": "~3.1.0",
35 | "ember-export-application-global": "^2.0.0",
36 | "ember-load-initializers": "^1.0.0",
37 | "ember-maybe-import-regenerator": "^0.1.6",
38 | "ember-modal-dialog": "^3.0.0-beta.0",
39 | "ember-resolver": "^4.0.0",
40 | "ember-route-action-helper": "^2.0.6",
41 | "ember-source": "~3.1.0",
42 | "ember-welcome-page": "^3.0.0",
43 | "eslint-plugin-ember": "^5.0.0",
44 | "loader.js": "^4.2.3"
45 | },
46 | "engines": {
47 | "node": "^4.5 || 6.* || >= 7.*"
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # bookstore
2 |
3 | This README outlines the details of collaborating on this Ember application.
4 | A short introduction of this app could easily go here.
5 |
6 | ## Prerequisites
7 |
8 | You will need the following things properly installed on your computer.
9 |
10 | * [Git](https://git-scm.com/)
11 | * [Node.js](https://nodejs.org/) (with npm)
12 | * [Ember CLI](https://ember-cli.com/)
13 | * [Google Chrome](https://google.com/chrome/)
14 |
15 | ## Installation
16 |
17 | * `git clone ` this repository
18 | * `cd bookstore`
19 | * `npm install`
20 |
21 | ## Running / Development
22 |
23 | * `ember serve`
24 | * Visit your app at [http://localhost:4200](http://localhost:4200).
25 | * Visit your tests at [http://localhost:4200/tests](http://localhost:4200/tests).
26 |
27 | ### Code Generators
28 |
29 | Make use of the many generators for code, try `ember help generate` for more details
30 |
31 | ### Running Tests
32 |
33 | * `ember test`
34 | * `ember test --server`
35 |
36 | ### Linting
37 |
38 | * `npm run lint:js`
39 | * `npm run lint:js -- --fix`
40 |
41 | ### Building
42 |
43 | * `ember build` (development)
44 | * `ember build --environment production` (production)
45 |
46 | ### Deploying
47 |
48 | Specify what it takes to deploy your app.
49 |
50 | ## Further Reading / Useful Links
51 |
52 | * [ember.js](https://emberjs.com/)
53 | * [ember-cli](https://ember-cli.com/)
54 | * Development Browser Extensions
55 | * [ember inspector for chrome](https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi)
56 | * [ember inspector for firefox](https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/)
57 |
--------------------------------------------------------------------------------