UNPKG

vue-onsenui

Version:

Vue.js bindings for Onsen UI

90 lines (75 loc) 2.62 kB
import _Object$keys from 'babel-runtime/core-js/object/keys'; import _extends from 'babel-runtime/helpers/extends'; import ons from 'onsenui/esm'; import { camelize, eventToHandler, handlerToProp } from '../internal/util'; /* Private */ var _setupDBB = function _setupDBB(component) { var dbb = 'onDeviceBackButton'; // Call original handler or parent handler by default var handler = component[dbb] || component.$el[dbb] && component.$el[dbb]._callback || function (e) { return e.callParentHandler(); }; component.$el[dbb] = function (event) { var runDefault = true; component.$emit(handlerToProp(dbb), _extends({}, event, { preventDefault: function preventDefault() { return runDefault = false; } })); runDefault && handler(event); }; component._isDBBSetup = true; }; /* Public */ // Device Back Button Handler var deriveDBB = { mounted: function mounted() { _setupDBB(this); }, // Core destroys deviceBackButton handlers on disconnectedCallback. // This fixes the behavior for <keep-alive> component. activated: function activated() { this._isDBBSetup === false && _setupDBB(this); }, deactivated: function deactivated() { this._isDBBSetup === true && (this._isDBBSetup = false); }, destroyed: function destroyed() { this.$el.onDeviceBackButton && this.$el.onDeviceBackButton.destroy(); } }; var deriveEvents = { computed: { unrecognizedListeners: function unrecognizedListeners() { var _this = this; var name = camelize('-' + this.$options._componentTag.slice(6)); return _Object$keys(this.$listeners || {}).filter(function (k) { return (ons.elements[name].events || []).indexOf(k) === -1; }).reduce(function (r, k) { r[k] = _this.$listeners[k]; return r; }, {}); } }, mounted: function mounted() { var _this2 = this; this._handlers = {}; (this.$el.constructor.events || []).forEach(function (key) { _this2._handlers[eventToHandler(key)] = function (event) { // Filter events from different components with the same name if (event.target === _this2.$el || !/^ons-/i.test(event.target.tagName)) { _this2.$emit(key, event); } }; _this2.$el.addEventListener(key, _this2._handlers[eventToHandler(key)]); }); }, beforeDestroy: function beforeDestroy() { var _this3 = this; _Object$keys(this._handlers).forEach(function (key) { _this3.$el.removeEventListener(key, _this3._handlers[key]); }); this._handlers = null; } }; export { deriveDBB, deriveEvents };