android_mt6572_jiabo/lineage/cve/static/js/ContextMenu.js
2025-09-05 16:56:03 +08:00

65 lines
1.8 KiB
JavaScript

(function() {
function ContextMenu(o) {
var c = this;
var element = createElement('div', {
class: 'context-menu',
parent: document.body
});
c.isActive = function() {
return element.classList.contains('active');
};
var openedBy;
c.open = function(from, x, y) {
openedBy = from;
element.addEventListener('click', function(e) {
e.stopPropagation();
});
document.body.addEventListener('click', function(e) {
c.close();
});
var elementHeight = element.getBoundingClientRect().height;
var documentHeight = document.body.offsetHeight;
if(elementHeight > documentHeight - y) {
y = y - elementHeight;
}
moveElement(element, x, y);
element.classList.add('active');
};
c.close = function() {
element.classList.remove('active');
};
o.items.forEach(function(item) {
var i = createElement('div', {
content: item.text,
parent: element
});
i.addEventListener('click', function(e) {
o.callback(openedBy, item.value);
c.close();
});
});
var targets;
if (o.selector instanceof HTMLElement) {
targets = [o.selector];
} else {
targets = [].slice.call(document.querySelectorAll(o.selector));
}
targets.forEach(function(target) {
target.addEventListener(o.trigger, function(e) {
c.open(target, e.pageX, e.pageY);
e.stopPropagation();
});
});
}
window.ContextMenu = ContextMenu;
})();