open-consul/ui/packages/consul-ui/app/instance-initializers/selection.js
John Cowen c98130cc08
ui: Move to Workspaced Structure (#8994)
* ui: Add the most basic workspace root in /ui

* We already have a LICENSE file in the repository root

* Change directory path in build scripts ui-v2 -> ui

* Make yarn install flags configurable from elsewhere

* Minimal workspace root makefile

* Call the new docker specific target

* Update yarn in the docker build image

* Reconfigure the netlify target and move to the higher makefile

* Move ui-v2 -> ui/packages/consul-ui

* Change repo root to refleect new folder structure

* Temporarily don't hoist consul-api-double

* Fixup CI configuration

* Fixup lint errors

* Fixup Netlify target
2020-10-21 15:23:16 +01:00

64 lines
1.7 KiB
JavaScript

import { env } from 'consul-ui/env';
const SECONDARY_BUTTON = 2;
const isSelecting = function(win = window) {
const selection = win.getSelection();
let selecting = false;
try {
selecting =
'isCollapsed' in selection && !selection.isCollapsed && selection.toString().length > 1;
} catch (e) {
// passthrough
}
return selecting;
};
export default {
name: 'selection',
initialize(container) {
if (env('CONSUL_UI_DISABLE_ANCHOR_SELECTION')) {
return;
}
const dom = container.lookup('service:dom');
const findAnchor = function(el) {
return el.tagName === 'A' ? el : dom.closest('a', el);
};
const mousedown = function(e) {
const $a = findAnchor(e.target);
if ($a) {
if (typeof e.button !== 'undefined' && e.button === SECONDARY_BUTTON) {
const dataHref = $a.dataset.href;
if (dataHref) {
$a.setAttribute('href', dataHref);
}
return;
}
const href = $a.getAttribute('href');
if (href) {
$a.dataset.href = href;
$a.removeAttribute('href');
}
}
};
const mouseup = function(e) {
const $a = findAnchor(e.target);
if ($a) {
const href = $a.dataset.href;
if (!isSelecting() && href) {
$a.setAttribute('href', href);
}
}
};
document.body.addEventListener('mousedown', mousedown);
document.body.addEventListener('mouseup', mouseup);
container.reopen({
willDestroy: function() {
document.body.removeEventListener('mousedown', mousedown);
document.body.removeEventListener('mouseup', mouseup);
return this._super(...arguments);
},
});
},
};