@blueprintjs/core
Version:
Core styles & components
104 lines (102 loc) • 13.4 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_1 = require("react");
var utils_1 = require("../../common/utils");
var hotkey_1 = require("./hotkey");
var hotkeyParser_1 = require("./hotkeyParser");
var hotkeysDialog_1 = require("./hotkeysDialog");
var SHOW_DIALOG_KEY_COMBO = hotkeyParser_1.parseKeyCombo("?");
(function (HotkeyScope) {
HotkeyScope[HotkeyScope["LOCAL"] = 0] = "LOCAL";
HotkeyScope[HotkeyScope["GLOBAL"] = 1] = "GLOBAL";
})(exports.HotkeyScope || (exports.HotkeyScope = {}));
var HotkeyScope = exports.HotkeyScope;
var HotkeysEvents = (function () {
function HotkeysEvents(scope) {
var _this = this;
this.scope = scope;
this.actions = [];
this.handleKeyDown = function (e) {
if (_this.isTextInput(e) || hotkeysDialog_1.isHotkeysDialogShowing()) {
return;
}
var combo = hotkeyParser_1.getKeyCombo(e);
if (hotkeyParser_1.comboMatches(SHOW_DIALOG_KEY_COMBO, combo)) {
hotkeysDialog_1.showHotkeysDialog(_this.actions.map(function (action) { return action.props; }));
return;
}
for (var _i = 0, _a = _this.actions; _i < _a.length; _i++) {
var action = _a[_i];
if (hotkeyParser_1.comboMatches(action.combo, combo)) {
utils_1.safeInvoke(action.props.onKeyDown, e);
}
}
};
this.handleKeyUp = function (e) {
if (_this.isTextInput(e) || hotkeysDialog_1.isHotkeysDialogShowing()) {
return;
}
var combo = hotkeyParser_1.getKeyCombo(e);
for (var _i = 0, _a = _this.actions; _i < _a.length; _i++) {
var action = _a[_i];
if (hotkeyParser_1.comboMatches(action.combo, combo)) {
utils_1.safeInvoke(action.props.onKeyUp, e);
}
}
};
}
HotkeysEvents.prototype.count = function () {
return this.actions.length;
};
HotkeysEvents.prototype.clear = function () {
this.actions = [];
};
HotkeysEvents.prototype.setHotkeys = function (props) {
var _this = this;
var actions = [];
react_1.Children.forEach(props.children, function (child) {
if (hotkey_1.Hotkey.isInstance(child) && _this.isScope(child.props)) {
actions.push({
combo: hotkeyParser_1.parseKeyCombo(child.props.combo),
props: child.props,
});
}
});
this.actions = actions;
};
HotkeysEvents.prototype.isScope = function (props) {
return (props.global ? HotkeyScope.GLOBAL : HotkeyScope.LOCAL) === this.scope;
};
HotkeysEvents.prototype.isTextInput = function (e) {
var elem = e.target;
// we check these cases for unit testing, but this should not happen
// during normal operation
if (elem == null || elem.closest == null) {
return false;
}
var editable = elem.closest("input, textarea, [contenteditable=true]");
if (editable == null) {
return false;
}
// don't let checkboxes, switches, and radio buttons prevent hotkey behavior
if (editable.tagName.toLowerCase() === "input") {
var inputType = editable.type;
if (inputType === "checkbox" || inputType === "radio") {
return false;
}
}
// don't let read-only fields prevent hotkey behavior
if (editable.readOnly) {
return false;
}
return true;
};
return HotkeysEvents;
}());
exports.HotkeysEvents = HotkeysEvents;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jb21wb25lbnRzL2hvdGtleXMvaG90a2V5c0V2ZW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7R0FLRzs7QUFFSCxzQkFBa0QsT0FBTyxDQUFDLENBQUE7QUFDMUQsc0JBQTJCLG9CQUFvQixDQUFDLENBQUE7QUFFaEQsdUJBQXFDLFVBQVUsQ0FBQyxDQUFBO0FBQ2hELDZCQUFvRSxnQkFBZ0IsQ0FBQyxDQUFBO0FBRXJGLDhCQUEwRCxpQkFBaUIsQ0FBQyxDQUFBO0FBRTVFLElBQU0scUJBQXFCLEdBQUcsNEJBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUVqRCxXQUFZLFdBQVc7SUFDbkIsK0NBQUssQ0FBQTtJQUNMLGlEQUFNLENBQUE7QUFDVixDQUFDLEVBSFcsbUJBQVcsS0FBWCxtQkFBVyxRQUd0QjtBQUhELElBQVksV0FBVyxHQUFYLG1CQUdYLENBQUE7QUFPRDtJQUdJLHVCQUEyQixLQUFrQjtRQUhqRCxpQkE0RkM7UUF6RjhCLFVBQUssR0FBTCxLQUFLLENBQWE7UUFGckMsWUFBTyxHQUFHLEVBQXFCLENBQUM7UUEwQmpDLGtCQUFhLEdBQUcsVUFBQyxDQUFnQjtZQUNwQyxFQUFFLENBQUMsQ0FBQyxLQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLHNDQUFzQixFQUFFLENBQUMsQ0FBQyxDQUFDO2dCQUNsRCxNQUFNLENBQUM7WUFDWCxDQUFDO1lBRUQsSUFBTSxLQUFLLEdBQUcsMEJBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QixFQUFFLENBQUMsQ0FBQywyQkFBWSxDQUFDLHFCQUFxQixFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDN0MsaUNBQWlCLENBQUMsS0FBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsVUFBQyxNQUFNLElBQUssT0FBQSxNQUFNLENBQUMsS0FBSyxFQUFaLENBQVksQ0FBQyxDQUFDLENBQUM7Z0JBQzlELE1BQU0sQ0FBQztZQUNYLENBQUM7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QUFDLEtBQUssQ0FBQztRQUNqQixDQUFDO1FBRUQsNEVBQTRFO1FBQzVFLEVBQUUsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQztZQUM3QyxJQUFNLFNBQVMsR0FBSSxRQUE2QixDQUFDLElBQUksQ0FBQztZQUN0RCxFQUFFLENBQUMsQ0FBQyxTQUFTLEtBQUssVUFBVSxJQUFJLFNBQVMsS0FBSyxPQUFPLENBQUMsQ0FBQyxDQUFDO2dCQUNwRCxNQUFNLENBQUMsS0FBSyxDQUFDO1lBQ2pCLENBQUM7UUFDTCxDQUFDO1FBRUQscURBQXFEO1FBQ3JELEVBQUUsQ0FBQyxDQUFFLFFBQTZCLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztZQUMxQyxNQUFNLENBQUMsS0FBSyxDQUFDO1FBQ2pCLENBQUM7UUFFRCxNQUFNLENBQUMsSUFBSSxDQUFDO0lBQ2hCLENBQUM7SUFDTCxvQkFBQztBQUFELENBNUZBLEFBNEZDLElBQUE7QUE1RlkscUJBQWEsZ0JBNEZ6QixDQUFBIiwiZmlsZSI6ImNvbXBvbmVudHMvaG90a2V5cy9ob3RrZXlzRXZlbnRzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLypcbiAqIENvcHlyaWdodCAyMDE2IFBhbGFudGlyIFRlY2hub2xvZ2llcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEJTRC0zIExpY2Vuc2UgYXMgbW9kaWZpZWQgKHRoZSDigJxMaWNlbnNl4oCdKTsgeW91IG1heSBvYnRhaW4gYSBjb3B5XG4gKiBvZiB0aGUgbGljZW5zZSBhdCBodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvYmx1ZXByaW50L2Jsb2IvbWFzdGVyL0xJQ0VOU0VcbiAqIGFuZCBodHRwczovL2dpdGh1Yi5jb20vcGFsYW50aXIvYmx1ZXByaW50L2Jsb2IvbWFzdGVyL1BBVEVOVFNcbiAqL1xuXG5pbXBvcnQgeyBDaGlsZHJlbiwgUmVhY3RFbGVtZW50LCBSZWFjdE5vZGUgfSBmcm9tIFwicmVhY3RcIjtcbmltcG9ydCB7IHNhZmVJbnZva2UgfSBmcm9tIFwiLi4vLi4vY29tbW9uL3V0aWxzXCI7XG5cbmltcG9ydCB7IEhvdGtleSwgSUhvdGtleVByb3BzIH0gZnJvbSBcIi4vaG90a2V5XCI7XG5pbXBvcnQgeyBjb21ib01hdGNoZXMsIGdldEtleUNvbWJvLCBJS2V5Q29tYm8sIHBhcnNlS2V5Q29tYm8gfSBmcm9tIFwiLi9ob3RrZXlQYXJzZXJcIjtcbmltcG9ydCB7IElIb3RrZXlzUHJvcHMgfSBmcm9tIFwiLi9ob3RrZXlzXCI7XG5pbXBvcnQgeyBpc0hvdGtleXNEaWFsb2dTaG93aW5nLCBzaG93SG90a2V5c0RpYWxvZyB9IGZyb20gXCIuL2hvdGtleXNEaWFsb2dcIjtcblxuY29uc3QgU0hPV19ESUFMT0dfS0VZX0NPTUJPID0gcGFyc2VLZXlDb21ibyhcIj9cIik7XG5cbmV4cG9ydCBlbnVtIEhvdGtleVNjb3BlIHtcbiAgICBMT0NBTCxcbiAgICBHTE9CQUwsXG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgSUhvdGtleUFjdGlvbiB7XG4gICAgY29tYm86IElLZXlDb21ibztcbiAgICBwcm9wczogSUhvdGtleVByb3BzO1xufVxuXG5leHBvcnQgY2xhc3MgSG90a2V5c0V2ZW50cyB7XG4gICAgcHJpdmF0ZSBhY3Rpb25zID0gW10gYXMgSUhvdGtleUFjdGlvbltdO1xuXG4gICAgcHVibGljIGNvbnN0cnVjdG9yKHByaXZhdGUgc2NvcGU6IEhvdGtleVNjb3BlKSB7XG4gICAgfVxuXG4gICAgcHVibGljIGNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5hY3Rpb25zLmxlbmd0aDtcbiAgICB9XG5cbiAgICBwdWJsaWMgY2xlYXIoKSB7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IFtdO1xuICAgIH1cblxuICAgIHB1YmxpYyBzZXRIb3RrZXlzKHByb3BzOiBJSG90a2V5c1Byb3BzICYgeyBjaGlsZHJlbjogUmVhY3ROb2RlW10gfSkge1xuICAgICAgICBjb25zdCBhY3Rpb25zID0gW10gYXMgSUhvdGtleUFjdGlvbltdO1xuICAgICAgICBDaGlsZHJlbi5mb3JFYWNoKHByb3BzLmNoaWxkcmVuLCAoY2hpbGQ6IFJlYWN0RWxlbWVudDxhbnk+KSA9PiB7XG4gICAgICAgICAgICBpZiAoSG90a2V5LmlzSW5zdGFuY2UoY2hpbGQpICYmIHRoaXMuaXNTY29wZShjaGlsZC5wcm9wcykpIHtcbiAgICAgICAgICAgICAgICBhY3Rpb25zLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICBjb21ibzogcGFyc2VLZXlDb21ibyhjaGlsZC5wcm9wcy5jb21ibyksXG4gICAgICAgICAgICAgICAgICAgIHByb3BzOiBjaGlsZC5wcm9wcyxcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuYWN0aW9ucyA9IGFjdGlvbnM7XG4gICAgfVxuXG4gICAgcHVibGljIGhhbmRsZUtleURvd24gPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc1RleHRJbnB1dChlKSB8fCBpc0hvdGtleXNEaWFsb2dTaG93aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbWJvID0gZ2V0S2V5Q29tYm8oZSk7XG5cbiAgICAgICAgaWYgKGNvbWJvTWF0Y2hlcyhTSE9XX0RJQUxPR19LRVlfQ09NQk8sIGNvbWJvKSkge1xuICAgICAgICAgICAgc2hvd0hvdGtleXNEaWFsb2codGhpcy5hY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBhY3Rpb24ucHJvcHMpKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuYWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbWJvTWF0Y2hlcyhhY3Rpb24uY29tYm8sIGNvbWJvKSkge1xuICAgICAgICAgICAgICAgIHNhZmVJbnZva2UoYWN0aW9uLnByb3BzLm9uS2V5RG93biwgZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBwdWJsaWMgaGFuZGxlS2V5VXAgPSAoZTogS2V5Ym9hcmRFdmVudCkgPT4ge1xuICAgICAgICBpZiAodGhpcy5pc1RleHRJbnB1dChlKSB8fCBpc0hvdGtleXNEaWFsb2dTaG93aW5nKCkpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbWJvID0gZ2V0S2V5Q29tYm8oZSk7XG4gICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuYWN0aW9ucykge1xuICAgICAgICAgICAgaWYgKGNvbWJvTWF0Y2hlcyhhY3Rpb24uY29tYm8sIGNvbWJvKSkge1xuICAgICAgICAgICAgICAgIHNhZmVJbnZva2UoYWN0aW9uLnByb3BzLm9uS2V5VXAsIGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1Njb3BlKHByb3BzOiBJSG90a2V5UHJvcHMpIHtcbiAgICAgICAgcmV0dXJuIChwcm9wcy5nbG9iYWwgPyBIb3RrZXlTY29wZS5HTE9CQUwgOiBIb3RrZXlTY29wZS5MT0NBTCkgPT09IHRoaXMuc2NvcGU7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpc1RleHRJbnB1dChlOiBLZXlib2FyZEV2ZW50KSB7XG4gICAgICAgIGNvbnN0IGVsZW0gPSBlLnRhcmdldCBhcyBIVE1MRWxlbWVudDtcbiAgICAgICAgLy8gd2UgY2hlY2sgdGhlc2UgY2FzZXMgZm9yIHVuaXQgdGVzdGluZywgYnV0IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW5cbiAgICAgICAgLy8gZHVyaW5nIG5vcm1hbCBvcGVyYXRpb25cbiAgICAgICAgaWYgKGVsZW0gPT0gbnVsbCB8fCBlbGVtLmNsb3Nlc3QgPT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgZWRpdGFibGUgPSBlbGVtLmNsb3Nlc3QoXCJpbnB1dCwgdGV4dGFyZWEsIFtjb250ZW50ZWRpdGFibGU9dHJ1ZV1cIik7XG5cbiAgICAgICAgaWYgKGVkaXRhYmxlID09IG51bGwpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbid0IGxldCBjaGVja2JveGVzLCBzd2l0Y2hlcywgYW5kIHJhZGlvIGJ1dHRvbnMgcHJldmVudCBob3RrZXkgYmVoYXZpb3JcbiAgICAgICAgaWYgKGVkaXRhYmxlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gXCJpbnB1dFwiKSB7XG4gICAgICAgICAgICBjb25zdCBpbnB1dFR5cGUgPSAoZWRpdGFibGUgYXMgSFRNTElucHV0RWxlbWVudCkudHlwZTtcbiAgICAgICAgICAgIGlmIChpbnB1dFR5cGUgPT09IFwiY2hlY2tib3hcIiB8fCBpbnB1dFR5cGUgPT09IFwicmFkaW9cIikge1xuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGRvbid0IGxldCByZWFkLW9ubHkgZmllbGRzIHByZXZlbnQgaG90a2V5IGJlaGF2aW9yXG4gICAgICAgIGlmICgoZWRpdGFibGUgYXMgSFRNTElucHV0RWxlbWVudCkucmVhZE9ubHkpIHtcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbn1cbiJdLCJzb3VyY2VSb290IjoiL3NvdXJjZS8ifQ==