diff --git a/addon/helpers/on-cordova.js b/addon/helpers/on-cordova.js new file mode 100644 index 0000000..f5c4205 --- /dev/null +++ b/addon/helpers/on-cordova.js @@ -0,0 +1,37 @@ +import Helper from "@ember/component/helper"; +import { inject as service } from "@ember/service"; + +export function callbackWrapper(event, callback, bubbles) { + if (event.cancelBubble !== true) { + let shouldBubble = callback(event); + + if (shouldBubble === false || bubbles === false) { + event.cancelBubble = true; + } + + return shouldBubble; + } +} + +export default Helper.extend({ + cordovaEvents: service("ember-cordova/events"), + + doFn(event) { + return callbackWrapper(event, this.fn, this.bubbles); + }, + + compute([event, fn], { bubbles = true }) { + this.fn = fn; + this.event = event; + this.bubbles = bubbles; + //this.doFn = (event) => callbackWrapper(event, this.fn, this.bubbles); + this.cordovaEvents.on(event, this, "doFn"); + }, + + willDestroy() { + if (this.fn && this.event) { + this.cordovaEvents.off(this.event, this, "doFn"); + } + this._super(...arguments); + }, +}); diff --git a/app/helpers/on-cordova.js b/app/helpers/on-cordova.js new file mode 100644 index 0000000..de34b19 --- /dev/null +++ b/app/helpers/on-cordova.js @@ -0,0 +1 @@ +export { default, onCordova } from 'ember-cordova-events/helpers/on-cordova'; diff --git a/tests/dummy/app/components/on-cordova-component.js b/tests/dummy/app/components/on-cordova-component.js new file mode 100644 index 0000000..e487101 --- /dev/null +++ b/tests/dummy/app/components/on-cordova-component.js @@ -0,0 +1,14 @@ +import Component from "@ember/component"; +import { inject as service } from "@ember/service"; + +export default Component.extend({ + cordovaEvents: service("ember-cordova/events"), + bubbles: true, + + actions: { + yell() { + //eslint-disable-next-line + console.log(this.name); + }, + }, +}); diff --git a/tests/dummy/app/controllers/application.js b/tests/dummy/app/controllers/application.js new file mode 100644 index 0000000..e776959 --- /dev/null +++ b/tests/dummy/app/controllers/application.js @@ -0,0 +1,14 @@ +import Controller from '@ember/controller'; +import { inject as service } from '@ember/service'; + +export default Controller.extend({ + cordovaEvents: service('ember-cordova/events'), + + currentEvent: 'backbutton', + + actions: { + emitEvent() { + this.cordovaEvents.trigger(this.currentEvent, {}); + } + } +}) \ No newline at end of file diff --git a/tests/dummy/app/templates/application.hbs b/tests/dummy/app/templates/application.hbs index 1eac0a2..fefe697 100644 --- a/tests/dummy/app/templates/application.hbs +++ b/tests/dummy/app/templates/application.hbs @@ -1,5 +1,11 @@ -{{!-- The following component displays Ember's default welcome message. --}} -{{welcome-page}} -{{!-- Feel free to remove this! --}} - -{{outlet}} \ No newline at end of file +{{input value=(mut (get this "currentEvent"))}} + +