UNPKG

dockview

Version:

Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support

183 lines 6.98 kB
"use strict"; var __extends = (this && this.__extends) || (function () { var extendStatics = function (d, b) { extendStatics = Object.setPrototypeOf || ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; }; return extendStatics(d, b); }; return function (d, b) { if (typeof b !== "function" && b !== null) throw new TypeError("Class extends value " + String(b) + " is not a constructor or null"); extendStatics(d, b); function __() { this.constructor = d; } d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); }; })(); var __values = (this && this.__values) || function(o) { var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0; if (m) return m.call(o); if (o && typeof o.length === "number") return { next: function () { if (o && i >= o.length) o = void 0; return { value: o && o[i++], done: !o }; } }; throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined."); }; Object.defineProperty(exports, "__esModule", { value: true }); exports.trackFocus = exports.getElementsByTagName = exports.isAncestor = exports.toggleClass = exports.addClasses = exports.removeClasses = exports.watchElementResize = void 0; var events_1 = require("./events"); var lifecycle_1 = require("./lifecycle"); function watchElementResize(element, cb) { var observer = new ResizeObserver(function (entires) { var firstEntry = entires[0]; cb(firstEntry); }); observer.observe(element); return { dispose: function () { observer.unobserve(element); observer.disconnect(); }, }; } exports.watchElementResize = watchElementResize; var removeClasses = function (element) { var e_1, _a; var classes = []; for (var _i = 1; _i < arguments.length; _i++) { classes[_i - 1] = arguments[_i]; } try { for (var classes_1 = __values(classes), classes_1_1 = classes_1.next(); !classes_1_1.done; classes_1_1 = classes_1.next()) { var classname = classes_1_1.value; if (element.classList.contains(classname)) { element.classList.remove(classname); } } } catch (e_1_1) { e_1 = { error: e_1_1 }; } finally { try { if (classes_1_1 && !classes_1_1.done && (_a = classes_1.return)) _a.call(classes_1); } finally { if (e_1) throw e_1.error; } } }; exports.removeClasses = removeClasses; var addClasses = function (element) { var e_2, _a; var classes = []; for (var _i = 1; _i < arguments.length; _i++) { classes[_i - 1] = arguments[_i]; } try { for (var classes_2 = __values(classes), classes_2_1 = classes_2.next(); !classes_2_1.done; classes_2_1 = classes_2.next()) { var classname = classes_2_1.value; if (!element.classList.contains(classname)) { element.classList.add(classname); } } } catch (e_2_1) { e_2 = { error: e_2_1 }; } finally { try { if (classes_2_1 && !classes_2_1.done && (_a = classes_2.return)) _a.call(classes_2); } finally { if (e_2) throw e_2.error; } } }; exports.addClasses = addClasses; var toggleClass = function (element, className, isToggled) { var hasClass = element.classList.contains(className); if (isToggled && !hasClass) { element.classList.add(className); } if (!isToggled && hasClass) { element.classList.remove(className); } }; exports.toggleClass = toggleClass; function isAncestor(testChild, testAncestor) { while (testChild) { if (testChild === testAncestor) { return true; } testChild = testChild.parentNode; } return false; } exports.isAncestor = isAncestor; function getElementsByTagName(tag) { return Array.prototype.slice.call(document.getElementsByTagName(tag), 0); } exports.getElementsByTagName = getElementsByTagName; function trackFocus(element) { return new FocusTracker(element); } exports.trackFocus = trackFocus; /** * Track focus on an element. Ensure tabIndex is set when an HTMLElement is not focusable by default */ var FocusTracker = /** @class */ (function (_super) { __extends(FocusTracker, _super); function FocusTracker(element) { var _this = _super.call(this) || this; _this._onDidFocus = new events_1.Emitter(); _this.onDidFocus = _this._onDidFocus.event; _this._onDidBlur = new events_1.Emitter(); _this.onDidBlur = _this._onDidBlur.event; var hasFocus = isAncestor(document.activeElement, element); var loosingFocus = false; var onFocus = function () { loosingFocus = false; if (!hasFocus) { hasFocus = true; _this._onDidFocus.fire(); } }; var onBlur = function () { if (hasFocus) { loosingFocus = true; window.setTimeout(function () { if (loosingFocus) { loosingFocus = false; hasFocus = false; _this._onDidBlur.fire(); } }, 0); } }; _this._refreshStateHandler = function () { var currentNodeHasFocus = isAncestor(document.activeElement, element); if (currentNodeHasFocus !== hasFocus) { if (hasFocus) { onBlur(); } else { onFocus(); } } }; if (element instanceof HTMLElement) { _this.addDisposables((0, events_1.addDisposableListener)(element, 'focus', onFocus, true)); _this.addDisposables((0, events_1.addDisposableListener)(element, 'blur', onBlur, true)); } else { _this.addDisposables((0, events_1.addDisposableWindowListener)(element, 'focus', onFocus, true)); _this.addDisposables((0, events_1.addDisposableWindowListener)(element, 'blur', onBlur, true)); } return _this; } FocusTracker.prototype.refreshState = function () { this._refreshStateHandler(); }; FocusTracker.prototype.dispose = function () { _super.prototype.dispose.call(this); this._onDidBlur.dispose(); this._onDidFocus.dispose(); }; return FocusTracker; }(lifecycle_1.CompositeDisposable)); //# sourceMappingURL=dom.js.map