aframe-event-set-component
Version:
Set properties in response to events in A-Frame
147 lines (118 loc) • 3.85 kB
JavaScript
(function webpackUniversalModuleDefinition(root, factory) {
if(typeof exports === 'object' && typeof module === 'object')
module.exports = factory();
else if(typeof define === 'function' && define.amd)
define([], factory);
else {
var a = factory();
for(var i in a) (typeof exports === 'object' ? exports : root)[i] = a[i];
}
})(this, function() {
return /******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId])
/******/ return installedModules[moduleId].exports;
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ exports: {},
/******/ id: moduleId,
/******/ loaded: false
/******/ };
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/ // Flag the module as loaded
/******/ module.loaded = true;
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/ // Load entry module and return exports
/******/ return __webpack_require__(0);
/******/ })
/************************************************************************/
/******/ ([
/* 0 */
/***/ (function(module, exports) {
/* global AFRAME */
var styleParser = AFRAME.utils.styleParser;
if (typeof AFRAME === 'undefined') {
throw new Error('Component attempted to register before AFRAME was available.');
}
AFRAME.registerComponent('event-set', {
schema: {
default: '',
parse: function (value) {
return styleParser.parse(value);
},
stringify: function (data) {
return styleParser.stringify(data);
},
},
multiple: true,
init: function () {
this.eventHandler = null;
this.eventName = null;
},
update: function (oldData) {
this.removeEventListener();
this.updateEventListener();
this.addEventListener();
},
pause: function () {
this.removeEventListener();
},
play: function () {
this.addEventListener();
},
/**
* Update source-of-truth event listener registry.
* Does not actually attach event listeners yet.
*/
updateEventListener: function () {
var data = this.data;
var el = this.el;
var event;
var target;
var targetEl;
// Set event listener using `_event`.
event = data._event || this.id;
target = data._target;
// Decide the target to `setAttribute` on.
targetEl = target ? el.sceneEl.querySelector(target) : el;
this.eventName = event;
const handler = () => {
var propName;
// Set attributes.
for (propName in data) {
if (propName === '_event' || propName === '_target') { continue; }
AFRAME.utils.entity.setComponentProperty.call(this, targetEl, propName,
data[propName]);
}
};
if (!isNaN(data._delay)) {
// Delay.
this.eventHandler = () => { setTimeout(handler, parseFloat(data._delay)); };
} else {
this.eventHandler = handler;
}
},
addEventListener: function () {
this.el.addEventListener(this.eventName, this.eventHandler);
},
removeEventListener: function () {
this.el.removeEventListener(this.eventName, this.eventHandler);
}
});
/***/ })
/******/ ])
});
;