├── vendor └── .gitkeep ├── app ├── helpers │ └── .gitkeep ├── templates │ ├── user.hbs │ ├── application.hbs │ ├── ask.hbs │ ├── new.hbs │ ├── top.hbs │ ├── jobs.hbs │ ├── show.hbs │ ├── components │ │ ├── card-list.hbs │ │ ├── pagination-links.hbs │ │ ├── nav-bar.hbs │ │ ├── comment-list.hbs │ │ ├── item-details.hbs │ │ └── item-card.hbs │ └── item.hbs ├── resolver.js ├── styles │ ├── variables.scss │ ├── phone.scss │ ├── components │ │ ├── item-details.scss │ │ ├── nav-bar.scss │ │ ├── comment-list.scss │ │ ├── item-card.scss │ │ └── card-list.scss │ └── app.scss ├── components │ ├── card-list.js │ ├── item-card.js │ ├── comment-list.js │ ├── item-details.js │ ├── nav-bar.js │ └── pagination-links.js ├── controllers │ ├── ask.js │ ├── jobs.js │ ├── new.js │ ├── show.js │ └── top.js ├── models │ ├── ask-story.js │ ├── jobs-story.js │ ├── new-story.js │ ├── show-story.js │ ├── top-story.js │ ├── comment.js │ ├── user.js │ └── item.js ├── routes │ ├── index.js │ ├── item.js │ ├── ask.js │ ├── new.js │ ├── top.js │ ├── jobs.js │ └── show.js ├── serializers │ ├── comment.js │ └── item.js ├── transforms │ └── unix-date.js ├── app.js ├── adapters │ ├── ask-story.js │ ├── jobs-story.js │ ├── show-story.js │ ├── top-story.js │ ├── new-story.js │ └── application.js ├── router.js └── index.html ├── .watchmanconfig ├── public ├── robots.txt ├── assets │ └── images │ │ ├── icon-192x192.png │ │ └── icon-512x512.png └── crossdomain.xml ├── .bowerrc ├── .firebaserc ├── tests ├── helpers │ ├── destroy-app.js │ ├── resolver.js │ ├── start-app.js │ └── module-for-acceptance.js ├── test-helper.js ├── unit │ ├── helpers │ │ └── add-test.js │ ├── routes │ │ ├── ask-test.js │ │ ├── jobs-test.js │ │ ├── new-test.js │ │ ├── show-test.js │ │ └── top-test.js │ ├── models │ │ ├── item-test.js │ │ ├── user-test.js │ │ ├── ask-story-test.js │ │ ├── new-story-test.js │ │ ├── top-story-test.js │ │ ├── jobs-story-test.js │ │ └── show-story-test.js │ ├── adapters │ │ ├── item-test.js │ │ ├── ask-story-test.js │ │ ├── jobs-story-test.js │ │ ├── new-story-test.js │ │ ├── show-story-test.js │ │ └── top-story-test.js │ ├── controllers │ │ └── top-test.js │ ├── transforms │ │ └── unix-date-test.js │ └── serializers │ │ └── item-test.js ├── integration │ └── components │ │ ├── nav-bar-test.js │ │ ├── card-list-test.js │ │ ├── item-card-test.js │ │ ├── comment-list-test.js │ │ ├── item-details-test.js │ │ └── list-pagination-test.js └── index.html ├── bower.json ├── firebase.json ├── testem.js ├── .ember-cli ├── .gitignore ├── .travis.yml ├── .editorconfig ├── config ├── manifest.js ├── deploy.js └── environment.js ├── .jshintrc ├── LICENSE ├── ember-cli-build.js ├── README.md ├── package.json └── .eslintrc.js /vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/helpers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /app/templates/user.hbs: -------------------------------------------------------------------------------- 1 | Coming soon. 2 | -------------------------------------------------------------------------------- /.watchmanconfig: -------------------------------------------------------------------------------- 1 | { 2 | "ignore_dirs": ["tmp", "dist"] 3 | } 4 | -------------------------------------------------------------------------------- /app/templates/application.hbs: -------------------------------------------------------------------------------- 1 | {{nav-bar}} 2 | 3 | {{outlet}} 4 | -------------------------------------------------------------------------------- /app/templates/ask.hbs: -------------------------------------------------------------------------------- 1 | {{card-list items=model.items modelName='ask' page=page}} 2 | -------------------------------------------------------------------------------- /app/templates/new.hbs: -------------------------------------------------------------------------------- 1 | {{card-list items=model.items modelName='new' page=page}} 2 | -------------------------------------------------------------------------------- /app/templates/top.hbs: -------------------------------------------------------------------------------- 1 | {{card-list items=model.items modelName='top' page=page}} 2 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # http://www.robotstxt.org 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components", 3 | "analytics": false 4 | } 5 | -------------------------------------------------------------------------------- /.firebaserc: -------------------------------------------------------------------------------- 1 | { 2 | "projects": { 3 | "default": "hnpwa-ember" 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /app/templates/jobs.hbs: -------------------------------------------------------------------------------- 1 | {{card-list items=model.items modelName='jobs' page=page}} 2 | -------------------------------------------------------------------------------- /app/templates/show.hbs: -------------------------------------------------------------------------------- 1 | {{card-list items=model.items modelName='show' page=page}} 2 | -------------------------------------------------------------------------------- /app/resolver.js: -------------------------------------------------------------------------------- 1 | import Resolver from 'ember-resolver'; 2 | 3 | export default Resolver; 4 | -------------------------------------------------------------------------------- /app/styles/variables.scss: -------------------------------------------------------------------------------- 1 | // Colors 2 | $primary: #ff6600; 3 | $secondary: #ffffff; 4 | 5 | // Breakpoints 6 | $phone: 768px; 7 | -------------------------------------------------------------------------------- /public/assets/images/icon-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stereobooster/hnpwa-ember/master/public/assets/images/icon-192x192.png -------------------------------------------------------------------------------- /public/assets/images/icon-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stereobooster/hnpwa-ember/master/public/assets/images/icon-512x512.png -------------------------------------------------------------------------------- /app/components/card-list.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Component.extend({ 4 | classNames: ['card-list'] 5 | }); 6 | -------------------------------------------------------------------------------- /app/components/item-card.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Component.extend({ 4 | classNames: ['item-card'] 5 | }); 6 | -------------------------------------------------------------------------------- /app/components/comment-list.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Component.extend({ 4 | classNames: ['comment-list'] 5 | }); 6 | -------------------------------------------------------------------------------- /app/components/item-details.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Component.extend({ 4 | classNames: ['item-details'] 5 | }); 6 | -------------------------------------------------------------------------------- /app/controllers/ask.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | queryParams: ['page'], 5 | 6 | page: 1 7 | }); 8 | -------------------------------------------------------------------------------- /app/controllers/jobs.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | queryParams: ['page'], 5 | 6 | page: 1 7 | }); 8 | -------------------------------------------------------------------------------- /app/controllers/new.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | queryParams: ['page'], 5 | 6 | page: 1 7 | }); 8 | -------------------------------------------------------------------------------- /app/controllers/show.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | queryParams: ['page'], 5 | 6 | page: 1 7 | }); 8 | -------------------------------------------------------------------------------- /app/controllers/top.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | queryParams: ['page'], 5 | 6 | page: 1 7 | }); 8 | -------------------------------------------------------------------------------- /app/models/ask-story.js: -------------------------------------------------------------------------------- 1 | import Item from './item'; 2 | import attr from 'ember-data/attr'; 3 | 4 | export default Item.extend({ 5 | user: attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/models/jobs-story.js: -------------------------------------------------------------------------------- 1 | import Item from './item'; 2 | import attr from 'ember-data/attr'; 3 | 4 | export default Item.extend({ 5 | user: attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/models/new-story.js: -------------------------------------------------------------------------------- 1 | import Item from './item'; 2 | import attr from 'ember-data/attr'; 3 | 4 | export default Item.extend({ 5 | user: attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/models/show-story.js: -------------------------------------------------------------------------------- 1 | import Item from './item'; 2 | import attr from 'ember-data/attr'; 3 | 4 | export default Item.extend({ 5 | user: attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/models/top-story.js: -------------------------------------------------------------------------------- 1 | import Item from './item'; 2 | import attr from 'ember-data/attr'; 3 | 4 | export default Item.extend({ 5 | user: attr('string') 6 | }); 7 | -------------------------------------------------------------------------------- /app/routes/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Route.extend({ 4 | beforeModel() { 5 | this.transitionTo('top'); 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /tests/helpers/destroy-app.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default function destroyApp(application) { 4 | Ember.run(application, 'destroy'); 5 | } 6 | -------------------------------------------------------------------------------- /app/templates/components/card-list.hbs: -------------------------------------------------------------------------------- 1 | {{#each items as |story|}} 2 | {{item-card item=story}} 3 | {{/each}} 4 | 5 | {{pagination-links modelName=modelName page=page count=items.length}} 6 | -------------------------------------------------------------------------------- /bower.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "hnpwa-ember", 3 | "dependencies": { 4 | "ember": "2.12.2", 5 | "ember-cli-shims": "0.1.1", 6 | "ember-qunit-notifications": "0.1.0" 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /app/serializers/comment.js: -------------------------------------------------------------------------------- 1 | import DS from 'ember-data'; 2 | 3 | export default DS.JSONSerializer.extend(DS.EmbeddedRecordsMixin, { 4 | attrs: { 5 | comments: { embedded: 'always' } 6 | } 7 | }); 8 | -------------------------------------------------------------------------------- /app/models/comment.js: -------------------------------------------------------------------------------- 1 | import Item from './item'; 2 | import attr from 'ember-data/attr'; 3 | 4 | export default Item.extend({ 5 | type: 'comment', 6 | user: attr('string'), 7 | level: attr('number') 8 | }); 9 | -------------------------------------------------------------------------------- /tests/test-helper.js: -------------------------------------------------------------------------------- 1 | import resolver from './helpers/resolver'; 2 | import { 3 | setResolver 4 | } from 'ember-qunit'; 5 | import { start } from 'ember-cli-qunit'; 6 | 7 | setResolver(resolver); 8 | start(); 9 | -------------------------------------------------------------------------------- /app/templates/item.hbs: -------------------------------------------------------------------------------- 1 |