Skip to content
This repository has been archived by the owner on Jun 17, 2022. It is now read-only.

Commit

Permalink
Merge pull request #36 from 201-created/rondale-sc/native-classes
Browse files Browse the repository at this point in the history
Native classes, tracked properties, glimmer components
  • Loading branch information
kpfefferle committed Mar 13, 2019
2 parents 63daee3 + e31e443 commit 993ee81
Show file tree
Hide file tree
Showing 12 changed files with 1,731 additions and 152 deletions.
3 changes: 2 additions & 1 deletion .eslintrc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
module.exports = {
root: true,
parser: 'babel-eslint',
parserOptions: {
ecmaVersion: 2017,
sourceType: 'module'
Expand All @@ -20,14 +21,14 @@ module.exports = {
// node files
{
files: [
'.ember-cli.js',
'.eslintrc.js',
'.template-lintrc.js',
'ember-cli-build.js',
'testem.js',
'blueprints/*/index.js',
'config/**/*.js',
'lib/*/index.js',
'server/**/*.js',
'serve.js'
],
parserOptions: {
Expand Down
6 changes: 5 additions & 1 deletion .template-lintrc.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
'use strict';

module.exports = {
extends: 'recommended'
extends: 'recommended',

rules: {
'no-invalid-interactive': false
}
};
17 changes: 8 additions & 9 deletions app/components/conference-day.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
import Component from '@ember/component';
import Component from '@glimmer/component';
import { computed } from '@ember/object';
import moment from 'emberconf/libs/moment';

export default Component.extend({
day: null,
index: 0,
export default class extends Component {

title: computed('day.date', 'index', function () {
let dayNumber = this.index + 1;
let formattedDate = moment(this.get('day.date')).format('MMMM D');
@computed('day.date', 'index')
get title() {
let dayNumber = this.args.index + 1;
let formattedDate = moment(this.args.day.date).format('MMMM D');
return `Day ${dayNumber}: ${formattedDate}`;
})
});
}
}
51 changes: 26 additions & 25 deletions app/components/conference-session.js
Original file line number Diff line number Diff line change
@@ -1,40 +1,41 @@
import Component from '@ember/component';
import Component from '@glimmer/component';
import { computed } from '@ember/object';
import { tracked } from '@glimmer/tracking';
import ENV from 'emberconf/config/environment';
import moment from 'emberconf/libs/moment';

export default Component.extend({
classNames: ['session'],
classNameBindings: ['isBreak', 'isExpanded', 'isNow', 'isPast'],
export default class extends Component {
@tracked
isExpanded = false;

now: moment().format(),
isExpanded: false,
session: null,

isBreak: computed('session.name', function() {
return ['Lunch', 'Snack Break'].includes(this.get('session.name'));
}),
@computed('session.name')
get isBreak() {
return ['Lunch', 'Snack Break'].includes(this.args.session.name);
}

isNow: computed('now', 'session.{start,end}', function() {
return moment(this.now).isBetween(this.get('session.start', null, '[)'), this.get('session.end'));
}),
@computed('now', 'session.{start,end}')
get isNow() {
return moment(this.args.now).isBetween(this.args.session.start, this.args.session.end, null, '[)');
}

isPast: computed('now', 'session.end', function() {
return moment(this.now).isSameOrAfter(this.get('session.end'));
}),
@computed('now', 'session.end')
get isPast() {
return moment(this.args.now).isSameOrAfter(this.args.session.end);
}

formattedTime: computed('session.{start,end}', function() {
let startMoment = this._pdxMoment(this.get('session.start'));
let endMoment = this._pdxMoment(this.get('session.end'));
@computed('session.{start,end}')
get formattedTime() {
let startMoment = this._pdxMoment(this.args.session.start);
let endMoment = this._pdxMoment(this.args.session.end);
let startFormat = (startMoment.format('a') === endMoment.format('a')) ? 'h:mm' : 'h:mma';
return `${startMoment.format(startFormat)}-${endMoment.format('h:mma')}`;
}),
}

_pdxMoment(timestamp) {
return moment(timestamp).utcOffset(ENV.APP.UTC_OFFSET);
},
}

click() {
this.toggleProperty('isExpanded');
toggleExpanded() {
this.isExpanded = !this.isExpanded;
}
});
}
37 changes: 16 additions & 21 deletions app/components/footer-prompt.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,21 @@
import Component from '@ember/component';
import { computed } from '@ember/object';
import Component from '@glimmer/component';
import { inject as service } from '@ember/service';

export default Component.extend({
fastboot: service(),
export default class extends Component {
@service fastboot;

tagName: 'footer',
classNameBindings: ['isDismissed'],
get isDismissed() {
if (this.fastboot.isFastBoot) {
return true;
} else {
return document.cookie.split(';').indexOf('isDismissed=true') >= 0;
}
}

isDismissed: computed({
get(key) { // eslint-disable-line no-unused-vars
if (this.get('fastboot.isFastBoot')) {
return true;
} else {
return document.cookie.split(';').indexOf('isDismissed=true') >= 0;
}
},
set(key, value) { // eslint-disable-line no-unused-vars
if (!this.get('fastboot.isFastBoot')) {
document.cookie = 'isDismissed=true';
}
return value;
set isDismissed(value) {
if (!this.fastboot.isFastBoot) {
document.cookie = 'isDismissed=true';
}
})
});
return value;
}
}
24 changes: 12 additions & 12 deletions app/controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,36 +2,36 @@ import Controller from '@ember/controller';
import { alias } from '@ember/object/computed';
import { later } from '@ember/runloop';
import { inject as service } from '@ember/service';
import { tracked } from '@glimmer/tracking';
import ENV from 'emberconf/config/environment';
import moment from 'emberconf/libs/moment';

export default Controller.extend({
fastboot: service(),
export default class extends Controller {
@service fastboot;

now: null,
@tracked now = null;

days: alias('model'),
@alias('model') days;

_setNow() {
if (ENV.APP.shouldForceDayOne) {
// Use conf Day 1 for development
let time = moment().utcOffset(ENV.APP.UTC_OFFSET).format('HH:mm:ss');
this.set('now', moment(`2019-03-19T${time}${ENV.APP.UTC_OFFSET}`).format());
this.now = moment(`2019-03-19T${time}${ENV.APP.UTC_OFFSET}`).format();
} else {
// Use real date and time for non-dev environments
this.set('now', moment().utcOffset(ENV.APP.UTC_OFFSET).format());
this.now = moment().utcOffset(ENV.APP.UTC_OFFSET).format();
}

if (!ENV.APP.shouldUpdateTime || this.get('fastboot.isFastBoot')) { return; }
if (!ENV.APP.shouldUpdateTime || this.fastboot.isFastBoot) { return; }

later(this, function() {
this._setNow();
}, 10000);
},
}

init() {
this._super(...arguments);
// Commented out post-conference
constructor() {
super(...arguments);
this._setNow();
}
});
}
12 changes: 6 additions & 6 deletions app/routes/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,16 +4,16 @@ import Schedule from 'emberconf/libs/data';
import SmoothScroll from 'emberconf/libs/smoothscroll';
import { whenRoutePainted } from 'ember-app-scheduler';

export default Route.extend({
fastboot: service(),
export default class extends Route {
@service fastboot;

model() {
return Schedule;
},
}

activate() {
this._super(...arguments);
if (this.get('fastboot.isFastBoot')) { return; }
super.activate(...arguments);
if (this.fastboot.isFastBoot) { return; }

// Scroll to current/upcoming sessions
whenRoutePainted().then(() => {
Expand All @@ -27,4 +27,4 @@ export default Route.extend({
}
});
}
});
}
69 changes: 40 additions & 29 deletions app/templates/components/conference-session.hbs
Original file line number Diff line number Diff line change
@@ -1,33 +1,44 @@
<small>{{this.formattedTime}}</small>
<div
...attributes
class={{concat "session"
(if this.isBreak " is-break")
(if this.isExpanded " is-expanded")
(if this.isNow " is-now")
(if this.isPast " is-past")
}}
{{action this.toggleExpanded}}
>
<small>{{this.formattedTime}}</small>

<h3>{{@session.name}}</h3>
<h3>{{@session.name}}</h3>

{{#if @session.speakers}}
<ul class="speakers">
{{#each @session.speakers as |speaker|}}
<li>{{speaker}}</li>
{{/each}}
</ul>
{{/if}}
{{#if @session.speakers}}
<ul class="speakers">
{{#each @session.speakers as |speaker|}}
<li>{{speaker}}</li>
{{/each}}
</ul>
{{/if}}

{{#if @session.description}}
<div class="description">
<p>{{@session.description}}</p>
{{#if @session.description}}
<div class="description">
<p>{{@session.description}}</p>

{{#if @session.sessions}}
<ul class="minitalks">
{{#each @session.sessions as |minitalk|}}
<li>
<small>{{minitalk.time}}</small>
<h4>{{minitalk.title}}</h4>
<ul class="speakers">
{{#each minitalk.speakers as |speaker|}}
<li>{{speaker}}</li>
{{/each}}
</ul>
</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/if}}
{{#if @session.sessions}}
<ul class="minitalks">
{{#each @session.sessions as |minitalk|}}
<li>
<small>{{minitalk.time}}</small>
<h4>{{minitalk.title}}</h4>
<ul class="speakers">
{{#each minitalk.speakers as |speaker|}}
<li>{{speaker}}</li>
{{/each}}
</ul>
</li>
{{/each}}
</ul>
{{/if}}
</div>
{{/if}}
</div>
19 changes: 12 additions & 7 deletions app/templates/components/footer-prompt.hbs
Original file line number Diff line number Diff line change
@@ -1,7 +1,12 @@
<p>Curious what's going on here?</p>
<p>
<a href="https://github.com/201-created/emberconf-schedule-2018" target="_blank" rel="noopener" aria-label="GitHub">
Check out the code on GitHub!
</a>
</p>
<button class="close" {{action (mut this.isDismissed) true}}>&times;</button>
<footer
...attributes
class={{if this.isDismissed "is-dismissed"}}
>
<p>Curious what's going on here?</p>
<p>
<a href="https://github.com/201-created/emberconf-schedule-2018" target="_blank" rel="noopener" aria-label="GitHub">
Check out the code on GitHub!
</a>
</p>
<button class="close" {{action (mut this.isDismissed) true}}>&times;</button>
</footer>
2 changes: 2 additions & 0 deletions config/environment.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@ module.exports = function(environment) {
FEATURES: {
// Here you can enable experimental features on an ember canary build
// e.g. 'with-controller': true
EMBER_NATIVE_DECORATOR_SUPPORT: true,
EMBER_METAL_TRACKED_PROPERTIES: true
},
EXTEND_PROTOTYPES: {
// Prevent Ember Data from overriding Date.parse.
Expand Down
7 changes: 6 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,12 @@
},
"devDependencies": {
"@ember/optional-features": "^0.7.0",
"@ember-decorators/babel-transforms": "^2.1.2",
"@glimmer/component": "^0.14.0-alpha.3",
"babel-eslint": "^8.0.0",
"broccoli-asset-rev": "^3.0.0",
"ember-app-scheduler": "^1.0.6",
"ember-auto-import": "^1.2.20",
"ember-cli": "~3.8.1",
"ember-cli-app-version": "^3.2.0",
"ember-cli-babel": "^7.1.2",
Expand All @@ -43,9 +47,10 @@
"ember-service-worker": "^0.7.2",
"ember-service-worker-asset-cache": "^0.6.4",
"ember-service-worker-cache-fallback": "^0.6.2",
"ember-source": "~3.8.0",
"ember-source": "https://s3.amazonaws.com/builds.emberjs.com/canary/shas/f28e17188d069845c85c9c4349a7824f6bb92701.tgz",
"ember-web-app": "^3.0.0-beta.2",
"eslint-plugin-ember": "^6.2.0",
"eslint-plugin-node": "^8.0.1",
"loader.js": "^4.7.0",
"qunit-dom": "^0.8.0",
"sass": "^1.17.2"
Expand Down
Loading

0 comments on commit 993ee81

Please sign in to comment.