dockview
Version:
Zero dependency layout manager supporting tabs, grids and splitviews with ReactJS support
183 lines • 6.98 kB
JavaScript
;
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