UNPKG

alignment.js

Version:

A suite of reusable [React](http://reactjs.org/) components for creating a variety of visualizations involving [multiple sequence alignments](https://en.wikipedia.org/wiki/Multiple_sequence_alignment). [View the live demo here](http://alignment.hyphy.org/

98 lines (86 loc) 3.89 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } } function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; } var ScrollBroadcaster = /*#__PURE__*/function () { function ScrollBroadcaster(broadcast_units) { var _this = this; _classCallCheck(this, ScrollBroadcaster); if (!Array.isArray(broadcast_units)) { if (!broadcast_units.name) { broadcast_units.name = "main"; } broadcast_units = [broadcast_units]; } else if (broadcast_units.length == 1 && !broadcast_units[0].name) { broadcast_units.name = "main"; } broadcast_units.forEach(function (unit) { _this[unit.name] = {}; _this[unit.name].width = unit.width; _this[unit.name].height = unit.height; _this[unit.name].x_pad = unit.x_pad; _this[unit.name].y_pad = unit.y_pad; _this[unit.name].bidirectional = unit.bidirectional; _this[unit.name].horizontal = unit.horizontal; _this[unit.name].vertical = unit.vertical; _this[unit.name].x_fraction = unit.x_pixel / unit.width || 0; _this[unit.name].y_fraction = unit.y_pixel / unit.height || 0; _this[unit.name].upper_x_fraction = Math.max(unit.width - unit.x_pad, 0) / unit.width; _this[unit.name].upper_y_fraction = Math.max(unit.height - unit.y_pad, 0) / unit.height; }); } _createClass(ScrollBroadcaster, [{ key: "handleWheel", value: function handleWheel(e, sender) { var unit = this[sender], old_x_pixel = unit.width * unit.x_fraction, old_y_pixel = unit.height * unit.y_fraction, new_x_pixel = old_x_pixel + e.deltaX, new_y_pixel = old_y_pixel + e.deltaY, x_fraction_candidate = new_x_pixel / unit.width, y_fraction_candidate = new_y_pixel / unit.height; this.broadcast(x_fraction_candidate, y_fraction_candidate, sender); } }, { key: "broadcast", value: function broadcast(x_fraction_candidate, y_fraction_candidate, sender) { var unit = this[sender]; unit.x_fraction = Math.min(Math.max(0, x_fraction_candidate), unit.upper_x_fraction); unit.y_fraction = Math.min(Math.max(0, y_fraction_candidate), unit.upper_y_fraction); var detail = { x_fraction: unit.x_fraction, y_fraction: unit.y_fraction, x_pixel: unit.x_fraction * unit.width, y_pixel: unit.y_fraction * unit.height, sender: sender }; var wheel_event = new CustomEvent("alignmentjs_wheel_event", { detail: detail }); unit.bidirectional.forEach(function (recipient) { var element = document.getElementById(recipient); element.dispatchEvent(wheel_event); }); } }, { key: "location", value: function location(sender) { sender = sender || "main"; return { x_pixel: this[sender].width * this[sender].x_fraction, y_pixel: this[sender].height * this[sender].y_fraction, x_fraction: this[sender].x_fraction, y_fraction: this[sender].y_fraction, x_pad: this[sender].x_pad, y_pad: this[sender].y_pad }; } }]); return ScrollBroadcaster; }(); var _default = ScrollBroadcaster; exports["default"] = _default;