MCPcopy Index your code
hub / github.com/docker/getting-started / arrow

Function arrow

app/src/static/js/react-bootstrap.js:4376–4440  ·  view source on GitHub ↗

* @function * @memberof Modifiers * @argument {Object} data - The data object generated by update method * @argument {Object} options - Modifiers configuration and options * @returns {Object} The data object, properly modified

(data, options)

Source from the content-addressed store, hash-verified

4374
4375
4376function arrow(data, options) {
4377 var _data$offsets$arrow; // arrow depends on keepTogether in order to work
4378
4379
4380 if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) {
4381 return data;
4382 }
4383
4384 var arrowElement = options.element; // if arrowElement is a string, suppose it's a CSS selector
4385
4386 if (typeof arrowElement === 'string') {
4387 arrowElement = data.instance.popper.querySelector(arrowElement); // if arrowElement is not found, don't run the modifier
4388
4389 if (!arrowElement) {
4390 return data;
4391 }
4392 } else {
4393 // if the arrowElement isn't a query selector we must check that the
4394 // provided DOM node is child of its popper node
4395 if (!data.instance.popper.contains(arrowElement)) {
4396 console.warn('WARNING: `arrow.element` must be child of its popper element!');
4397 return data;
4398 }
4399 }
4400
4401 var placement = data.placement.split('-')[0];
4402 var _data$offsets = data.offsets,
4403 popper = _data$offsets.popper,
4404 reference = _data$offsets.reference;
4405 var isVertical = ['left', 'right'].indexOf(placement) !== -1;
4406 var len = isVertical ? 'height' : 'width';
4407 var sideCapitalized = isVertical ? 'Top' : 'Left';
4408 var side = sideCapitalized.toLowerCase();
4409 var altSide = isVertical ? 'left' : 'top';
4410 var opSide = isVertical ? 'bottom' : 'right';
4411 var arrowElementSize = getOuterSizes(arrowElement)[len]; //
4412 // extends keepTogether behavior making sure the popper and its
4413 // reference have enough pixels in conjunction
4414 //
4415 // top/left side
4416
4417 if (reference[opSide] - arrowElementSize < popper[side]) {
4418 data.offsets.popper[side] -= popper[side] - (reference[opSide] - arrowElementSize);
4419 } // bottom/right side
4420
4421
4422 if (reference[side] + arrowElementSize > popper[opSide]) {
4423 data.offsets.popper[side] += reference[side] + arrowElementSize - popper[opSide];
4424 }
4425
4426 data.offsets.popper = getClientRect(data.offsets.popper); // compute center of the popper
4427
4428 var center = reference[side] + reference[len] / 2 - arrowElementSize / 2; // Compute the sideValue using the updated popper offsets
4429 // take popper margin in account because we don't have this info available
4430
4431 var css = getStyleComputedProperty(data.instance.popper);
4432 var popperMarginSide = parseFloat(css['margin' + sideCapitalized], 10);
4433 var popperBorderSide = parseFloat(css['border' + sideCapitalized + 'Width'], 10);

Callers

nothing calls this directly

Calls 5

isModifierRequiredFunction · 0.85
getOuterSizesFunction · 0.85
getClientRectFunction · 0.85
getStyleComputedPropertyFunction · 0.85
definePropertyFunction · 0.85

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…