diff --git a/app/components/modals/basic-modal.js b/app/components/modals/basic-modal.js new file mode 100644 index 0000000..ed796f8 --- /dev/null +++ b/app/components/modals/basic-modal.js @@ -0,0 +1,69 @@ +import Component from '@ember/component'; +import move from 'ember-animated/motions/move'; +import { inject as service } from '@ember/service'; +import { fadeIn } from 'ember-animated/motions/opacity'; +import { fadeOut } from 'ember-animated/motions/opacity'; +import { set } from '@ember/object'; +import bezier from 'bezier-easing'; + +export default Component.extend({ + modal: service(), + tagName: '', + isActive: false, + duration: 500, + + didInsertElement() { + this.name && this.modal.registerModal(this); + }, + + willDestroyElement() { + this.name && this.modal.destroyModal(this); + }, + + actions: { + onOutsideClick() { + this.close(); + }, + + open() { + this.open(); + }, + + close() { + this.close(); + } + }, + + * transitionModalOverlay({ insertedSprites, removedSprites }) { // eslint-disable-line require-yield + for (let sprite of insertedSprites) { + fadeIn(sprite, { easing: bezier(0.165, 0.84, 0.44, 1) }); + } + + for (let sprite of removedSprites) { + fadeOut(sprite, { easing: bezier(0.165, 0.84, 0.44, 1) }); + } + }, + + * transitionModalContent({ insertedSprites, removedSprites }) { // eslint-disable-line require-yield + + for (let sprite of insertedSprites) { + sprite.startTranslatedBy(0, 1000); + move(sprite, { easing: bezier(0.165, 0.84, 0.44, 1) }); + } + + for (let sprite of removedSprites) { + sprite.endTranslatedBy(0, 1000); + move(sprite, { easing: bezier(0.165, 0.84, 0.44, 1) }); + } + }, + + open() { + set(this, 'isActive', true); + this.onOpen && this.onOpen(); + }, + + close() { + set(this, 'isActive', false); + } +}); + diff --git a/app/components/modals/basic-modal/-content.js b/app/components/modals/basic-modal/-content.js new file mode 100644 index 0000000..67068c2 --- /dev/null +++ b/app/components/modals/basic-modal/-content.js @@ -0,0 +1,7 @@ +import Component from '@ember/component'; + +export default Component.extend({ + click(e) { + e.stopPropagation(); + } +}); diff --git a/app/components/modals/basic-modal/-overlay.js b/app/components/modals/basic-modal/-overlay.js new file mode 100644 index 0000000..bb93d73 --- /dev/null +++ b/app/components/modals/basic-modal/-overlay.js @@ -0,0 +1,4 @@ +import Component from '@ember/component'; + +export default Component.extend({ +}); diff --git a/app/router.js b/app/router.js index d0bb009..29f20a3 100644 --- a/app/router.js +++ b/app/router.js @@ -7,6 +7,9 @@ const Router = EmberRouter.extend({ }); Router.map(function() { + this.route('storage'); + this.route('scanner'); + this.route('summary'); }); export default Router; diff --git a/app/routes/scanner.js b/app/routes/scanner.js new file mode 100644 index 0000000..6c74252 --- /dev/null +++ b/app/routes/scanner.js @@ -0,0 +1,4 @@ +import Route from '@ember/routing/route'; + +export default Route.extend({ +}); diff --git a/app/routes/storage.js b/app/routes/storage.js new file mode 100644 index 0000000..6c74252 --- /dev/null +++ b/app/routes/storage.js @@ -0,0 +1,4 @@ +import Route from '@ember/routing/route'; + +export default Route.extend({ +}); diff --git a/app/routes/summary.js b/app/routes/summary.js new file mode 100644 index 0000000..6c74252 --- /dev/null +++ b/app/routes/summary.js @@ -0,0 +1,4 @@ +import Route from '@ember/routing/route'; + +export default Route.extend({ +}); diff --git a/app/services/modal.js b/app/services/modal.js new file mode 100644 index 0000000..27fa6f6 --- /dev/null +++ b/app/services/modal.js @@ -0,0 +1,25 @@ +import Service from '@ember/service'; + +export default Service.extend({ + init() { + this._super(...arguments); + this.modals = {}; + }, + + registerModal(reference) { + this.modals[reference.name] = reference; + }, + + destroyModal(reference) { + this.modals[reference.name] = null; + }, + + open(name) { + this.modals[name].open(); + }, + + close(name) { + this.modals[name].close(); + } +}); + diff --git a/app/templates/components/modals/basic-modal.hbs b/app/templates/components/modals/basic-modal.hbs new file mode 100644 index 0000000..b7fa405 --- /dev/null +++ b/app/templates/components/modals/basic-modal.hbs @@ -0,0 +1,19 @@ +{{#modals/basic-modal/-overlay + isActive=this.isActive + animation=this.transitionModalOverlay + duration=this.duration +}} +{{/modals/basic-modal/-overlay}} + +{{#animated-if this.isActive use=this.transitionModalContent duration=this.duration}} +
+ +
+{{/animated-if}} diff --git a/app/templates/components/modals/basic-modal/-content.hbs b/app/templates/components/modals/basic-modal/-content.hbs new file mode 100644 index 0000000..fb5c4b1 --- /dev/null +++ b/app/templates/components/modals/basic-modal/-content.hbs @@ -0,0 +1 @@ +{{yield}} \ No newline at end of file diff --git a/app/templates/components/modals/basic-modal/-overlay.hbs b/app/templates/components/modals/basic-modal/-overlay.hbs new file mode 100644 index 0000000..e0096cc --- /dev/null +++ b/app/templates/components/modals/basic-modal/-overlay.hbs @@ -0,0 +1,8 @@ +{{#animated-if @isActive use=@animation duration=@duration}} +
+ {{yield}} +
+{{/animated-if}} +