@blueprintjs/core
Version:
Core styles & components
68 lines (66 loc) • 11.6 kB
JavaScript
/*
* Copyright 2016 Palantir Technologies, Inc. All rights reserved.
* Licensed under the BSD-3 License as modified (the “License”); you may obtain a copy
* of the license at https://github.com/palantir/blueprint/blob/master/LICENSE
* and https://github.com/palantir/blueprint/blob/master/PATENTS
*/
;
var React = require("react");
var utils_1 = require("../../common/utils");
var hotkeysEvents_1 = require("./hotkeysEvents");
function HotkeysTarget(constructor) {
var _a = constructor.prototype, componentWillMount = _a.componentWillMount, componentWillUnmount = _a.componentWillUnmount, render = _a.render, renderHotkeys = _a.renderHotkeys;
if (!utils_1.isFunction(renderHotkeys)) {
throw new Error("@HotkeysTarget-decorated class must implement `renderHotkeys`. " + constructor);
}
// tslint:disable no-invalid-this only-arrow-functions
constructor.prototype.componentWillMount = function () {
this.localHotkeysEvents = new hotkeysEvents_1.HotkeysEvents(hotkeysEvents_1.HotkeyScope.LOCAL);
this.globalHotkeysEvents = new hotkeysEvents_1.HotkeysEvents(hotkeysEvents_1.HotkeyScope.GLOBAL);
// attach global key event listeners
document.addEventListener("keydown", this.globalHotkeysEvents.handleKeyDown);
document.addEventListener("keyup", this.globalHotkeysEvents.handleKeyUp);
if (componentWillMount != null) {
componentWillMount.call(this);
}
};
constructor.prototype.componentWillUnmount = function () {
// detach global key event listeners
document.removeEventListener("keydown", this.globalHotkeysEvents.handleKeyDown);
document.removeEventListener("keyup", this.globalHotkeysEvents.handleKeyUp);
this.globalHotkeysEvents.clear();
this.localHotkeysEvents.clear();
if (componentWillUnmount != null) {
componentWillUnmount.call(this);
}
};
constructor.prototype.render = function () {
var _this = this;
var element = render.call(this);
var hotkeys = renderHotkeys.call(this);
this.localHotkeysEvents.setHotkeys(hotkeys.props);
this.globalHotkeysEvents.setHotkeys(hotkeys.props);
// attach local key event listeners
if (element != null && this.localHotkeysEvents.count() > 0) {
var tabIndex = hotkeys.props.tabIndex === undefined ? 0 : hotkeys.props.tabIndex;
var existingKeyDown_1 = element.props.onKeyDown;
var onKeyDown = function (e) {
_this.localHotkeysEvents.handleKeyDown(e.nativeEvent);
utils_1.safeInvoke(existingKeyDown_1, e);
};
var existingKeyUp_1 = element.props.onKeyUp;
var onKeyUp = function (e) {
_this.localHotkeysEvents.handleKeyUp(e.nativeEvent);
utils_1.safeInvoke(existingKeyUp_1, e);
};
return React.cloneElement(element, { tabIndex: tabIndex, onKeyDown: onKeyDown, onKeyUp: onKeyUp });
}
else {
return element;
}
};
// tslint:enable
}
exports.HotkeysTarget = HotkeysTarget;
;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL2hvdGtleXMvaG90a2V5c1RhcmdldC50c3giXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7O0dBS0c7O0FBRUgsSUFBWSxLQUFLLFdBQU0sT0FBTyxDQUFDLENBQUE7QUFDL0Isc0JBQXVDLG9CQUFvQixDQUFDLENBQUE7QUFHNUQsOEJBQTJDLGlCQUFpQixDQUFDLENBQUE7QUFnQjdELHVCQUF1RSxXQUFjO0lBQ2pGLElBQUEsMEJBQWlHLEVBQXpGLDBDQUFrQixFQUFFLDhDQUFvQixFQUFFLGtCQUFNLEVBQUUsZ0NBQWEsQ0FBMkI7SUFFbEcsRUFBRSxDQUFDLENBQUMsQ0FBQyxrQkFBVSxDQUFDLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM3QixNQUFNLElBQUksS0FBSyxDQUFDLG9FQUFvRSxXQUFhLENBQUMsQ0FBQztJQUN2RyxDQUFDO0lBRUQsc0RBQXNEO0lBQ3RELFdBQVcsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLEdBQUc7UUFDdkMsSUFBSSxDQUFDLGtCQUFrQixHQUFHLElBQUksNkJBQWEsQ0FBQywyQkFBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxtQkFBbUIsR0FBRyxJQUFJLDZCQUFhLENBQUMsMkJBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVqRSxvQ0FBb0M7UUFDcEMsUUFBUSxDQUFDLGdCQUFnQixDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsYUFBYSxDQUFDLENBQUM7UUFDN0UsUUFBUSxDQUFDLGdCQUFnQixDQUFDLE9BQU8sRUFBRSxJQUFJLENBQUMsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7UUFFekUsRUFBRSxDQUFDLENBQUMsa0JBQWtCLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUM3QixrQkFBa0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDbEMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLFdBQVcsQ0FBQyxTQUFTLENBQUMsb0JBQW9CLEdBQUc7UUFDekMsb0NBQW9DO1FBQ3BDLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ2hGLFFBQVEsQ0FBQyxtQkFBbUIsQ0FBQyxPQUFPLEVBQUUsSUFBSSxDQUFDLG1CQUFtQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBRTVFLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7UUFFaEMsRUFBRSxDQUFDLENBQUMsb0JBQW9CLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMvQixvQkFBb0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDcEMsQ0FBQztJQUNMLENBQUMsQ0FBQztJQUVGLFdBQVcsQ0FBQyxTQUFTLENBQUMsTUFBTSxHQUFHO1FBQUEsaUJBMEI5QjtRQXpCRyxJQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBZ0IsQ0FBQztRQUVqRCxJQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2xELElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRW5ELG1DQUFtQztRQUNuQyxFQUFFLENBQUMsQ0FBQyxPQUFPLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3pELElBQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxLQUFLLFNBQVMsR0FBRyxDQUFDLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUM7WUFFbkYsSUFBTSxpQkFBZSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBb0QsQ0FBQztZQUMzRixJQUFNLFNBQVMsR0FBRyxVQUFDLENBQW1DO2dCQUNsRCxLQUFJLENBQUMsa0JBQWtCLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxXQUE0QixDQUFDLENBQUM7Z0JBQ3RFLGtCQUFVLENBQUMsaUJBQWUsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNuQyxDQUFDLENBQUM7WUFFRixJQUFNLGVBQWEsR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLE9BQWtELENBQUM7WUFDdkYsSUFBTSxPQUFPLEdBQUcsVUFBQyxDQUFtQztnQkFDaEQsS0FBSSxDQUFDLGtCQUFrQixDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsV0FBNEIsQ0FBQyxDQUFDO2dCQUNwRSxrQkFBVSxDQUFDLGVBQWEsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUNqQyxDQUFDLENBQUM7WUFDRixNQUFNLENBQUMsS0FBSyxDQUFDLFlBQVksQ0FBQyxPQUFPLEVBQUUsRUFBRSxrQkFBUSxFQUFFLG9CQUFTLEVBQUUsZ0JBQU8sRUFBRSxDQUFDLENBQUM7UUFDekUsQ0FBQztRQUFDLElBQUksQ0FBQyxDQUFDO1lBQ0osTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUNuQixDQUFDO0lBQ0wsQ0FBQyxDQUFDO0lBQ0YsZ0JBQWdCO0FBQ3BCLENBQUM7QUE5RGUscUJBQWEsZ0JBOEQ1QixDQUFBO0FBQUEsQ0FBQyIsImZpbGUiOiJjb21wb25lbnRzL2hvdGtleXMvaG90a2V5c1RhcmdldC5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qXG4gKiBDb3B5cmlnaHQgMjAxNiBQYWxhbnRpciBUZWNobm9sb2dpZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbiAqIExpY2Vuc2VkIHVuZGVyIHRoZSBCU0QtMyBMaWNlbnNlIGFzIG1vZGlmaWVkICh0aGUg4oCcTGljZW5zZeKAnSk7IHlvdSBtYXkgb2J0YWluIGEgY29weVxuICogb2YgdGhlIGxpY2Vuc2UgYXQgaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL2JsdWVwcmludC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKiBhbmQgaHR0cHM6Ly9naXRodWIuY29tL3BhbGFudGlyL2JsdWVwcmludC9ibG9iL21hc3Rlci9QQVRFTlRTXG4gKi9cblxuaW1wb3J0ICogYXMgUmVhY3QgZnJvbSBcInJlYWN0XCI7XG5pbXBvcnQgeyBpc0Z1bmN0aW9uLCBzYWZlSW52b2tlIH0gZnJvbSBcIi4uLy4uL2NvbW1vbi91dGlsc1wiO1xuXG5pbXBvcnQgeyBJSG90a2V5c1Byb3BzIH0gZnJvbSBcIi4vaG90a2V5c1wiO1xuaW1wb3J0IHsgSG90a2V5U2NvcGUsIEhvdGtleXNFdmVudHMgfSBmcm9tIFwiLi9ob3RrZXlzRXZlbnRzXCI7XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhvdGtleXNUYXJnZXQgZXh0ZW5kcyBSZWFjdC5Db21wb25lbnQ8YW55LCBhbnk+LCBSZWFjdC5Db21wb25lbnRMaWZlY3ljbGU8YW55LCBhbnk+IHtcbiAgICAvKiogQGludGVybmFsICovXG4gICAgZ2xvYmFsSG90a2V5c0V2ZW50cz86IEhvdGtleXNFdmVudHM7XG5cbiAgICAvKiogQGludGVybmFsICovXG4gICAgbG9jYWxIb3RrZXlzRXZlbnRzPzogSG90a2V5c0V2ZW50cztcblxuICAgIC8qKlxuICAgICAqIENvbXBvbmVudHMgZGVjb3JhdGVkIHdpdGggdGhlIGBIb3RrZXlzVGFyZ2V0YCBkZWNvcmF0b3IgbXVzdCBpbXBsZW1lbnRcbiAgICAgKiB0aGlzIG1ldGhvZCwgYW5kIGl0IG11c3QgcmV0dXJuIGEgYEhvdGtleXNgIFJlYWN0IGVsZW1lbnQuXG4gICAgICovXG4gICAgcmVuZGVySG90a2V5cygpOiBSZWFjdC5SZWFjdEVsZW1lbnQ8SUhvdGtleXNQcm9wcz47XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBIb3RrZXlzVGFyZ2V0PFQgZXh0ZW5kcyB7IHByb3RvdHlwZTogSUhvdGtleXNUYXJnZXQgfT4oY29uc3RydWN0b3I6IFQpIHtcbiAgICBjb25zdCB7IGNvbXBvbmVudFdpbGxNb3VudCwgY29tcG9uZW50V2lsbFVubW91bnQsIHJlbmRlciwgcmVuZGVySG90a2V5cyB9ID0gY29uc3RydWN0b3IucHJvdG90eXBlO1xuXG4gICAgaWYgKCFpc0Z1bmN0aW9uKHJlbmRlckhvdGtleXMpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcihgQEhvdGtleXNUYXJnZXQtZGVjb3JhdGVkIGNsYXNzIG11c3QgaW1wbGVtZW50IFxcYHJlbmRlckhvdGtleXNcXGAuICR7Y29uc3RydWN0b3J9YCk7XG4gICAgfVxuXG4gICAgLy8gdHNsaW50OmRpc2FibGUgbm8taW52YWxpZC10aGlzIG9ubHktYXJyb3ctZnVuY3Rpb25zXG4gICAgY29uc3RydWN0b3IucHJvdG90eXBlLmNvbXBvbmVudFdpbGxNb3VudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICB0aGlzLmxvY2FsSG90a2V5c0V2ZW50cyA9IG5ldyBIb3RrZXlzRXZlbnRzKEhvdGtleVNjb3BlLkxPQ0FMKTtcbiAgICAgICAgdGhpcy5nbG9iYWxIb3RrZXlzRXZlbnRzID0gbmV3IEhvdGtleXNFdmVudHMoSG90a2V5U2NvcGUuR0xPQkFMKTtcblxuICAgICAgICAvLyBhdHRhY2ggZ2xvYmFsIGtleSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5nbG9iYWxIb3RrZXlzRXZlbnRzLmhhbmRsZUtleURvd24pO1xuICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5nbG9iYWxIb3RrZXlzRXZlbnRzLmhhbmRsZUtleVVwKTtcblxuICAgICAgICBpZiAoY29tcG9uZW50V2lsbE1vdW50ICE9IG51bGwpIHtcbiAgICAgICAgICAgIGNvbXBvbmVudFdpbGxNb3VudC5jYWxsKHRoaXMpO1xuICAgICAgICB9XG4gICAgfTtcblxuICAgIGNvbnN0cnVjdG9yLnByb3RvdHlwZS5jb21wb25lbnRXaWxsVW5tb3VudCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAvLyBkZXRhY2ggZ2xvYmFsIGtleSBldmVudCBsaXN0ZW5lcnNcbiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5nbG9iYWxIb3RrZXlzRXZlbnRzLmhhbmRsZUtleURvd24pO1xuICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5dXBcIiwgdGhpcy5nbG9iYWxIb3RrZXlzRXZlbnRzLmhhbmRsZUtleVVwKTtcblxuICAgICAgICB0aGlzLmdsb2JhbEhvdGtleXNFdmVudHMuY2xlYXIoKTtcbiAgICAgICAgdGhpcy5sb2NhbEhvdGtleXNFdmVudHMuY2xlYXIoKTtcblxuICAgICAgICBpZiAoY29tcG9uZW50V2lsbFVubW91bnQgIT0gbnVsbCkge1xuICAgICAgICAgICAgY29tcG9uZW50V2lsbFVubW91bnQuY2FsbCh0aGlzKTtcbiAgICAgICAgfVxuICAgIH07XG5cbiAgICBjb25zdHJ1Y3Rvci5wcm90b3R5cGUucmVuZGVyID0gZnVuY3Rpb24oKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSByZW5kZXIuY2FsbCh0aGlzKSBhcyBKU1guRWxlbWVudDtcblxuICAgICAgICBjb25zdCBob3RrZXlzID0gcmVuZGVySG90a2V5cy5jYWxsKHRoaXMpO1xuICAgICAgICB0aGlzLmxvY2FsSG90a2V5c0V2ZW50cy5zZXRIb3RrZXlzKGhvdGtleXMucHJvcHMpO1xuICAgICAgICB0aGlzLmdsb2JhbEhvdGtleXNFdmVudHMuc2V0SG90a2V5cyhob3RrZXlzLnByb3BzKTtcblxuICAgICAgICAvLyBhdHRhY2ggbG9jYWwga2V5IGV2ZW50IGxpc3RlbmVyc1xuICAgICAgICBpZiAoZWxlbWVudCAhPSBudWxsICYmIHRoaXMubG9jYWxIb3RrZXlzRXZlbnRzLmNvdW50KCkgPiAwKSB7XG4gICAgICAgICAgICBjb25zdCB0YWJJbmRleCA9IGhvdGtleXMucHJvcHMudGFiSW5kZXggPT09IHVuZGVmaW5lZCA/IDAgOiBob3RrZXlzLnByb3BzLnRhYkluZGV4O1xuXG4gICAgICAgICAgICBjb25zdCBleGlzdGluZ0tleURvd24gPSBlbGVtZW50LnByb3BzLm9uS2V5RG93biBhcyBSZWFjdC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gICAgICAgICAgICBjb25zdCBvbktleURvd24gPSAoZTogUmVhY3QuS2V5Ym9hcmRFdmVudDxIVE1MRWxlbWVudD4pID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmxvY2FsSG90a2V5c0V2ZW50cy5oYW5kbGVLZXlEb3duKGUubmF0aXZlRXZlbnQgYXMgS2V5Ym9hcmRFdmVudCk7XG4gICAgICAgICAgICAgICAgc2FmZUludm9rZShleGlzdGluZ0tleURvd24sIGUpO1xuICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgY29uc3QgZXhpc3RpbmdLZXlVcCA9IGVsZW1lbnQucHJvcHMub25LZXlVcCBhcyBSZWFjdC5LZXlib2FyZEV2ZW50SGFuZGxlcjxIVE1MRWxlbWVudD47XG4gICAgICAgICAgICBjb25zdCBvbktleVVwID0gKGU6IFJlYWN0LktleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgICAgICAgICAgdGhpcy5sb2NhbEhvdGtleXNFdmVudHMuaGFuZGxlS2V5VXAoZS5uYXRpdmVFdmVudCBhcyBLZXlib2FyZEV2ZW50KTtcbiAgICAgICAgICAgICAgICBzYWZlSW52b2tlKGV4aXN0aW5nS2V5VXAsIGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiBSZWFjdC5jbG9uZUVsZW1lbnQoZWxlbWVudCwgeyB0YWJJbmRleCwgb25LZXlEb3duLCBvbktleVVwIH0pO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIHRzbGludDplbmFibGVcbn07XG4iXSwic291cmNlUm9vdCI6Ii9zb3VyY2UvIn0=