diff --git a/QR-GEN/Scripts/src/modifiers/applyStyle.js b/QR-GEN/Scripts/src/modifiers/applyStyle.js deleted file mode 100644 index 8f38d3b..0000000 --- a/QR-GEN/Scripts/src/modifiers/applyStyle.js +++ /dev/null @@ -1,73 +0,0 @@ -import setStyles from '../utils/setStyles'; -import setAttributes from '../utils/setAttributes'; -import getReferenceOffsets from '../utils/getReferenceOffsets'; -import computeAutoPlacement from '../utils/computeAutoPlacement'; - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by `update` method - * @argument {Object} data.styles - List of style properties - values to apply to popper element - * @argument {Object} data.attributes - List of attribute properties - values to apply to popper element - * @argument {Object} options - Modifiers configuration and options - * @returns {Object} The same data object - */ -export default function applyStyle(data) { - // any property present in `data.styles` will be applied to the popper, - // in this way we can make the 3rd party modifiers add custom styles to it - // Be aware, modifiers could override the properties defined in the previous - // lines of this modifier! - setStyles(data.instance.popper, data.styles); - - // any property present in `data.attributes` will be applied to the popper, - // they will be set as HTML attributes of the element - setAttributes(data.instance.popper, data.attributes); - - // if arrowElement is defined and arrowStyles has some properties - if (data.arrowElement && Object.keys(data.arrowStyles).length) { - setStyles(data.arrowElement, data.arrowStyles); - } - - return data; -} - -/** - * Set the x-placement attribute before everything else because it could be used - * to add margins to the popper margins needs to be calculated to get the - * correct popper offsets. - * @method - * @memberof Popper.modifiers - * @param {HTMLElement} reference - The reference element used to position the popper - * @param {HTMLElement} popper - The HTML element used as popper - * @param {Object} options - Popper.js options - */ -export function applyStyleOnLoad( - reference, - popper, - options, - modifierOptions, - state -) { - // compute reference element offsets - const referenceOffsets = getReferenceOffsets(state, popper, reference, options.positionFixed); - - // compute auto placement, store placement inside the data object, - // modifiers will be able to edit `placement` if needed - // and refer to originalPlacement to know the original value - const placement = computeAutoPlacement( - options.placement, - referenceOffsets, - popper, - reference, - options.modifiers.flip.boundariesElement, - options.modifiers.flip.padding - ); - - popper.setAttribute('x-placement', placement); - - // Apply `position` to popper before anything else because - // without the position applied we can't guarantee correct computations - setStyles(popper, { position: options.positionFixed ? 'fixed' : 'absolute' }); - - return options; -} diff --git a/QR-GEN/Scripts/src/modifiers/arrow.js b/QR-GEN/Scripts/src/modifiers/arrow.js deleted file mode 100644 index 94bab5a..0000000 --- a/QR-GEN/Scripts/src/modifiers/arrow.js +++ /dev/null @@ -1,89 +0,0 @@ -import getClientRect from '../utils/getClientRect'; -import getOuterSizes from '../utils/getOuterSizes'; -import isModifierRequired from '../utils/isModifierRequired'; -import getStyleComputedProperty from '../utils/getStyleComputedProperty'; - -/** - * @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 - */ -export default function arrow(data, options) { - // arrow depends on keepTogether in order to work - if (!isModifierRequired(data.instance.modifiers, 'arrow', 'keepTogether')) { - return data; - } - - let arrowElement = options.element; - - // if arrowElement is a string, suppose it's a CSS selector - if (typeof arrowElement === 'string') { - arrowElement = data.instance.popper.querySelector(arrowElement); - - // if arrowElement is not found, don't run the modifier - if (!arrowElement) { - return data; - } - } else { - // if the arrowElement isn't a query selector we must check that the - // provided DOM node is child of its popper node - if (!data.instance.popper.contains(arrowElement)) { - console.warn( - 'WARNING: `arrow.element` must be child of its popper element!' - ); - return data; - } - } - - const placement = data.placement.split('-')[0]; - const { popper, reference } = data.offsets; - const isVertical = ['left', 'right'].indexOf(placement) !== -1; - - const len = isVertical ? 'height' : 'width'; - const sideCapitalized = isVertical ? 'Top' : 'Left'; - const side = sideCapitalized.toLowerCase(); - const altSide = isVertical ? 'left' : 'top'; - const opSide = isVertical ? 'bottom' : 'right'; - const arrowElementSize = getOuterSizes(arrowElement)[len]; - - // - // extends keepTogether behavior making sure the popper and its - // reference have enough pixels in conjunction - // - - // top/left side - if (reference[opSide] - arrowElementSize < popper[side]) { - data.offsets.popper[side] -= - popper[side] - (reference[opSide] - arrowElementSize); - } - // bottom/right side - if (reference[side] + arrowElementSize > popper[opSide]) { - data.offsets.popper[side] += - reference[side] + arrowElementSize - popper[opSide]; - } - data.offsets.popper = getClientRect(data.offsets.popper); - - // compute center of the popper - const center = reference[side] + reference[len] / 2 - arrowElementSize / 2; - - // Compute the sideValue using the updated popper offsets - // take popper margin in account because we don't have this info available - const css = getStyleComputedProperty(data.instance.popper); - const popperMarginSide = parseFloat(css[`margin${sideCapitalized}`], 10); - const popperBorderSide = parseFloat(css[`border${sideCapitalized}Width`], 10); - let sideValue = - center - data.offsets.popper[side] - popperMarginSide - popperBorderSide; - - // prevent arrowElement from being placed not contiguously to its popper - sideValue = Math.max(Math.min(popper[len] - arrowElementSize, sideValue), 0); - - data.arrowElement = arrowElement; - data.offsets.arrow = { - [side]: Math.round(sideValue), - [altSide]: '', // make sure to unset any eventual altSide value from the DOM node - }; - - return data; -} diff --git a/QR-GEN/Scripts/src/modifiers/computeStyle.js b/QR-GEN/Scripts/src/modifiers/computeStyle.js deleted file mode 100644 index 55e0200..0000000 --- a/QR-GEN/Scripts/src/modifiers/computeStyle.js +++ /dev/null @@ -1,112 +0,0 @@ -import getSupportedPropertyName from '../utils/getSupportedPropertyName'; -import find from '../utils/find'; -import getOffsetParent from '../utils/getOffsetParent'; -import getBoundingClientRect from '../utils/getBoundingClientRect'; -import getRoundedOffsets from '../utils/getRoundedOffsets'; -import isBrowser from '../utils/isBrowser'; - -const isFirefox = isBrowser && /Firefox/i.test(navigator.userAgent); - -/** - * @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 - */ -export default function computeStyle(data, options) { - const { x, y } = options; - const { popper } = data.offsets; - - // Remove this legacy support in Popper.js v2 - const legacyGpuAccelerationOption = find( - data.instance.modifiers, - modifier => modifier.name === 'applyStyle' - ).gpuAcceleration; - if (legacyGpuAccelerationOption !== undefined) { - console.warn( - 'WARNING: `gpuAcceleration` option moved to `computeStyle` modifier and will not be supported in future versions of Popper.js!' - ); - } - const gpuAcceleration = - legacyGpuAccelerationOption !== undefined - ? legacyGpuAccelerationOption - : options.gpuAcceleration; - - const offsetParent = getOffsetParent(data.instance.popper); - const offsetParentRect = getBoundingClientRect(offsetParent); - - // Styles - const styles = { - position: popper.position, - }; - - const offsets = getRoundedOffsets( - data, - window.devicePixelRatio < 2 || !isFirefox - ); - - const sideA = x === 'bottom' ? 'top' : 'bottom'; - const sideB = y === 'right' ? 'left' : 'right'; - - // if gpuAcceleration is set to `true` and transform is supported, - // we use `translate3d` to apply the position to the popper we - // automatically use the supported prefixed version if needed - const prefixedProperty = getSupportedPropertyName('transform'); - - // now, let's make a step back and look at this code closely (wtf?) - // If the content of the popper grows once it's been positioned, it - // may happen that the popper gets misplaced because of the new content - // overflowing its reference element - // To avoid this problem, we provide two options (x and y), which allow - // the consumer to define the offset origin. - // If we position a popper on top of a reference element, we can set - // `x` to `top` to make the popper grow towards its top instead of - // its bottom. - let left, top; - if (sideA === 'bottom') { - // when offsetParent is the positioning is relative to the bottom of the screen (excluding the scrollbar) - // and not the bottom of the html element - if (offsetParent.nodeName === 'HTML') { - top = -offsetParent.clientHeight + offsets.bottom; - } else { - top = -offsetParentRect.height + offsets.bottom; - } - } else { - top = offsets.top; - } - if (sideB === 'right') { - if (offsetParent.nodeName === 'HTML') { - left = -offsetParent.clientWidth + offsets.right; - } else { - left = -offsetParentRect.width + offsets.right; - } - } else { - left = offsets.left; - } - if (gpuAcceleration && prefixedProperty) { - styles[prefixedProperty] = `translate3d(${left}px, ${top}px, 0)`; - styles[sideA] = 0; - styles[sideB] = 0; - styles.willChange = 'transform'; - } else { - // othwerise, we use the standard `top`, `left`, `bottom` and `right` properties - const invertTop = sideA === 'bottom' ? -1 : 1; - const invertLeft = sideB === 'right' ? -1 : 1; - styles[sideA] = top * invertTop; - styles[sideB] = left * invertLeft; - styles.willChange = `${sideA}, ${sideB}`; - } - - // Attributes - const attributes = { - 'x-placement': data.placement, - }; - - // Update `data` attributes, styles and arrowStyles - data.attributes = { ...attributes, ...data.attributes }; - data.styles = { ...styles, ...data.styles }; - data.arrowStyles = { ...data.offsets.arrow, ...data.arrowStyles }; - - return data; -} diff --git a/QR-GEN/Scripts/src/modifiers/flip.js b/QR-GEN/Scripts/src/modifiers/flip.js deleted file mode 100644 index 109b4e9..0000000 --- a/QR-GEN/Scripts/src/modifiers/flip.js +++ /dev/null @@ -1,146 +0,0 @@ -import getOppositePlacement from '../utils/getOppositePlacement'; -import getOppositeVariation from '../utils/getOppositeVariation'; -import getPopperOffsets from '../utils/getPopperOffsets'; -import runModifiers from '../utils/runModifiers'; -import getBoundaries from '../utils/getBoundaries'; -import isModifierEnabled from '../utils/isModifierEnabled'; -import clockwise from '../utils/clockwise'; - -const BEHAVIORS = { - FLIP: 'flip', - CLOCKWISE: 'clockwise', - COUNTERCLOCKWISE: 'counterclockwise', -}; - -/** - * @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 - */ -export default function flip(data, options) { - // if `inner` modifier is enabled, we can't use the `flip` modifier - if (isModifierEnabled(data.instance.modifiers, 'inner')) { - return data; - } - - if (data.flipped && data.placement === data.originalPlacement) { - // seems like flip is trying to loop, probably there's not enough space on any of the flippable sides - return data; - } - - const boundaries = getBoundaries( - data.instance.popper, - data.instance.reference, - options.padding, - options.boundariesElement, - data.positionFixed - ); - - let placement = data.placement.split('-')[0]; - let placementOpposite = getOppositePlacement(placement); - let variation = data.placement.split('-')[1] || ''; - - let flipOrder = []; - - switch (options.behavior) { - case BEHAVIORS.FLIP: - flipOrder = [placement, placementOpposite]; - break; - case BEHAVIORS.CLOCKWISE: - flipOrder = clockwise(placement); - break; - case BEHAVIORS.COUNTERCLOCKWISE: - flipOrder = clockwise(placement, true); - break; - default: - flipOrder = options.behavior; - } - - flipOrder.forEach((step, index) => { - if (placement !== step || flipOrder.length === index + 1) { - return data; - } - - placement = data.placement.split('-')[0]; - placementOpposite = getOppositePlacement(placement); - - const popperOffsets = data.offsets.popper; - const refOffsets = data.offsets.reference; - - // using floor because the reference offsets may contain decimals we are not going to consider here - const floor = Math.floor; - const overlapsRef = - (placement === 'left' && - floor(popperOffsets.right) > floor(refOffsets.left)) || - (placement === 'right' && - floor(popperOffsets.left) < floor(refOffsets.right)) || - (placement === 'top' && - floor(popperOffsets.bottom) > floor(refOffsets.top)) || - (placement === 'bottom' && - floor(popperOffsets.top) < floor(refOffsets.bottom)); - - const overflowsLeft = floor(popperOffsets.left) < floor(boundaries.left); - const overflowsRight = floor(popperOffsets.right) > floor(boundaries.right); - const overflowsTop = floor(popperOffsets.top) < floor(boundaries.top); - const overflowsBottom = - floor(popperOffsets.bottom) > floor(boundaries.bottom); - - const overflowsBoundaries = - (placement === 'left' && overflowsLeft) || - (placement === 'right' && overflowsRight) || - (placement === 'top' && overflowsTop) || - (placement === 'bottom' && overflowsBottom); - - // flip the variation if required - const isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - - // flips variation if reference element overflows boundaries - const flippedVariationByRef = - !!options.flipVariations && - ((isVertical && variation === 'start' && overflowsLeft) || - (isVertical && variation === 'end' && overflowsRight) || - (!isVertical && variation === 'start' && overflowsTop) || - (!isVertical && variation === 'end' && overflowsBottom)); - - // flips variation if popper content overflows boundaries - const flippedVariationByContent = - !!options.flipVariationsByContent && - ((isVertical && variation === 'start' && overflowsRight) || - (isVertical && variation === 'end' && overflowsLeft) || - (!isVertical && variation === 'start' && overflowsBottom) || - (!isVertical && variation === 'end' && overflowsTop)); - - const flippedVariation = flippedVariationByRef || flippedVariationByContent; - - if (overlapsRef || overflowsBoundaries || flippedVariation) { - // this boolean to detect any flip loop - data.flipped = true; - - if (overlapsRef || overflowsBoundaries) { - placement = flipOrder[index + 1]; - } - - if (flippedVariation) { - variation = getOppositeVariation(variation); - } - - data.placement = placement + (variation ? '-' + variation : ''); - - // this object contains `position`, we want to preserve it along with - // any additional property we may add in the future - data.offsets.popper = { - ...data.offsets.popper, - ...getPopperOffsets( - data.instance.popper, - data.offsets.reference, - data.placement - ), - }; - - data = runModifiers(data.instance.modifiers, data, 'flip'); - } - }); - return data; -} diff --git a/QR-GEN/Scripts/src/modifiers/hide.js b/QR-GEN/Scripts/src/modifiers/hide.js deleted file mode 100644 index 4527438..0000000 --- a/QR-GEN/Scripts/src/modifiers/hide.js +++ /dev/null @@ -1,46 +0,0 @@ -import isModifierRequired from '../utils/isModifierRequired'; -import find from '../utils/find'; - -/** - * @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 - */ -export default function hide(data) { - if (!isModifierRequired(data.instance.modifiers, 'hide', 'preventOverflow')) { - return data; - } - - const refRect = data.offsets.reference; - const bound = find( - data.instance.modifiers, - modifier => modifier.name === 'preventOverflow' - ).boundaries; - - if ( - refRect.bottom < bound.top || - refRect.left > bound.right || - refRect.top > bound.bottom || - refRect.right < bound.left - ) { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === true) { - return data; - } - - data.hide = true; - data.attributes['x-out-of-boundaries'] = ''; - } else { - // Avoid unnecessary DOM access if visibility hasn't changed - if (data.hide === false) { - return data; - } - - data.hide = false; - data.attributes['x-out-of-boundaries'] = false; - } - - return data; -} diff --git a/QR-GEN/Scripts/src/modifiers/index.js b/QR-GEN/Scripts/src/modifiers/index.js deleted file mode 100644 index 3fd648a..0000000 --- a/QR-GEN/Scripts/src/modifiers/index.js +++ /dev/null @@ -1,369 +0,0 @@ -import applyStyle, { applyStyleOnLoad } from './applyStyle'; -import computeStyle from './computeStyle'; -import arrow from './arrow'; -import flip from './flip'; -import keepTogether from './keepTogether'; -import offset from './offset'; -import preventOverflow from './preventOverflow'; -import shift from './shift'; -import hide from './hide'; -import inner from './inner'; - -/** - * Modifier function, each modifier can have a function of this type assigned - * to its `fn` property.
- * These functions will be called on each update, this means that you must - * make sure they are performant enough to avoid performance bottlenecks. - * - * @function ModifierFn - * @argument {dataObject} data - The data object generated by `update` method - * @argument {Object} options - Modifiers configuration and options - * @returns {dataObject} The data object, properly modified - */ - -/** - * Modifiers are plugins used to alter the behavior of your poppers.
- * Popper.js uses a set of 9 modifiers to provide all the basic functionalities - * needed by the library. - * - * Usually you don't want to override the `order`, `fn` and `onLoad` props. - * All the other properties are configurations that could be tweaked. - * @namespace modifiers - */ -export default { - /** - * Modifier used to shift the popper on the start or end of its reference - * element.
- * It will read the variation of the `placement` property.
- * It can be one either `-end` or `-start`. - * @memberof modifiers - * @inner - */ - shift: { - /** @prop {number} order=100 - Index used to define the order of execution */ - order: 100, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: shift, - }, - - /** - * The `offset` modifier can shift your popper on both its axis. - * - * It accepts the following units: - * - `px` or unit-less, interpreted as pixels - * - `%` or `%r`, percentage relative to the length of the reference element - * - `%p`, percentage relative to the length of the popper element - * - `vw`, CSS viewport width unit - * - `vh`, CSS viewport height unit - * - * For length is intended the main axis relative to the placement of the popper.
- * This means that if the placement is `top` or `bottom`, the length will be the - * `width`. In case of `left` or `right`, it will be the `height`. - * - * You can provide a single value (as `Number` or `String`), or a pair of values - * as `String` divided by a comma or one (or more) white spaces.
- * The latter is a deprecated method because it leads to confusion and will be - * removed in v2.
- * Additionally, it accepts additions and subtractions between different units. - * Note that multiplications and divisions aren't supported. - * - * Valid examples are: - * ``` - * 10 - * '10%' - * '10, 10' - * '10%, 10' - * '10 + 10%' - * '10 - 5vh + 3%' - * '-10px + 5vh, 5px - 6%' - * ``` - * > **NB**: If you desire to apply offsets to your poppers in a way that may make them overlap - * > with their reference element, unfortunately, you will have to disable the `flip` modifier. - * > You can read more on this at this [issue](https://github.com/FezVrasta/popper.js/issues/373). - * - * @memberof modifiers - * @inner - */ - offset: { - /** @prop {number} order=200 - Index used to define the order of execution */ - order: 200, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: offset, - /** @prop {Number|String} offset=0 - * The offset value as described in the modifier description - */ - offset: 0, - }, - - /** - * Modifier used to prevent the popper from being positioned outside the boundary. - * - * A scenario exists where the reference itself is not within the boundaries.
- * We can say it has "escaped the boundaries" — or just "escaped".
- * In this case we need to decide whether the popper should either: - * - * - detach from the reference and remain "trapped" in the boundaries, or - * - if it should ignore the boundary and "escape with its reference" - * - * When `escapeWithReference` is set to`true` and reference is completely - * outside its boundaries, the popper will overflow (or completely leave) - * the boundaries in order to remain attached to the edge of the reference. - * - * @memberof modifiers - * @inner - */ - preventOverflow: { - /** @prop {number} order=300 - Index used to define the order of execution */ - order: 300, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: preventOverflow, - /** - * @prop {Array} [priority=['left','right','top','bottom']] - * Popper will try to prevent overflow following these priorities by default, - * then, it could overflow on the left and on top of the `boundariesElement` - */ - priority: ['left', 'right', 'top', 'bottom'], - /** - * @prop {number} padding=5 - * Amount of pixel used to define a minimum distance between the boundaries - * and the popper. This makes sure the popper always has a little padding - * between the edges of its container - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='scrollParent' - * Boundaries used by the modifier. Can be `scrollParent`, `window`, - * `viewport` or any DOM element. - */ - boundariesElement: 'scrollParent', - }, - - /** - * Modifier used to make sure the reference and its popper stay near each other - * without leaving any gap between the two. Especially useful when the arrow is - * enabled and you want to ensure that it points to its reference element. - * It cares only about the first axis. You can still have poppers with margin - * between the popper and its reference element. - * @memberof modifiers - * @inner - */ - keepTogether: { - /** @prop {number} order=400 - Index used to define the order of execution */ - order: 400, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: keepTogether, - }, - - /** - * This modifier is used to move the `arrowElement` of the popper to make - * sure it is positioned between the reference element and its popper element. - * It will read the outer size of the `arrowElement` node to detect how many - * pixels of conjunction are needed. - * - * It has no effect if no `arrowElement` is provided. - * @memberof modifiers - * @inner - */ - arrow: { - /** @prop {number} order=500 - Index used to define the order of execution */ - order: 500, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: arrow, - /** @prop {String|HTMLElement} element='[x-arrow]' - Selector or node used as arrow */ - element: '[x-arrow]', - }, - - /** - * Modifier used to flip the popper's placement when it starts to overlap its - * reference element. - * - * Requires the `preventOverflow` modifier before it in order to work. - * - * **NOTE:** this modifier will interrupt the current update cycle and will - * restart it if it detects the need to flip the placement. - * @memberof modifiers - * @inner - */ - flip: { - /** @prop {number} order=600 - Index used to define the order of execution */ - order: 600, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: flip, - /** - * @prop {String|Array} behavior='flip' - * The behavior used to change the popper's placement. It can be one of - * `flip`, `clockwise`, `counterclockwise` or an array with a list of valid - * placements (with optional variations) - */ - behavior: 'flip', - /** - * @prop {number} padding=5 - * The popper will flip if it hits the edges of the `boundariesElement` - */ - padding: 5, - /** - * @prop {String|HTMLElement} boundariesElement='viewport' - * The element which will define the boundaries of the popper position. - * The popper will never be placed outside of the defined boundaries - * (except if `keepTogether` is enabled) - */ - boundariesElement: 'viewport', - /** - * @prop {Boolean} flipVariations=false - * The popper will switch placement variation between `-start` and `-end` when - * the reference element overlaps its boundaries. - * - * The original placement should have a set variation. - */ - flipVariations: false, - /** - * @prop {Boolean} flipVariationsByContent=false - * The popper will switch placement variation between `-start` and `-end` when - * the popper element overlaps its reference boundaries. - * - * The original placement should have a set variation. - */ - flipVariationsByContent: false, - }, - - /** - * Modifier used to make the popper flow toward the inner of the reference element. - * By default, when this modifier is disabled, the popper will be placed outside - * the reference element. - * @memberof modifiers - * @inner - */ - inner: { - /** @prop {number} order=700 - Index used to define the order of execution */ - order: 700, - /** @prop {Boolean} enabled=false - Whether the modifier is enabled or not */ - enabled: false, - /** @prop {ModifierFn} */ - fn: inner, - }, - - /** - * Modifier used to hide the popper when its reference element is outside of the - * popper boundaries. It will set a `x-out-of-boundaries` attribute which can - * be used to hide with a CSS selector the popper when its reference is - * out of boundaries. - * - * Requires the `preventOverflow` modifier before it in order to work. - * @memberof modifiers - * @inner - */ - hide: { - /** @prop {number} order=800 - Index used to define the order of execution */ - order: 800, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: hide, - }, - - /** - * Computes the style that will be applied to the popper element to gets - * properly positioned. - * - * Note that this modifier will not touch the DOM, it just prepares the styles - * so that `applyStyle` modifier can apply it. This separation is useful - * in case you need to replace `applyStyle` with a custom implementation. - * - * This modifier has `850` as `order` value to maintain backward compatibility - * with previous versions of Popper.js. Expect the modifiers ordering method - * to change in future major versions of the library. - * - * @memberof modifiers - * @inner - */ - computeStyle: { - /** @prop {number} order=850 - Index used to define the order of execution */ - order: 850, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: computeStyle, - /** - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: true, - /** - * @prop {string} [x='bottom'] - * Where to anchor the X axis (`bottom` or `top`). AKA X offset origin. - * Change this if your popper should grow in a direction different from `bottom` - */ - x: 'bottom', - /** - * @prop {string} [x='left'] - * Where to anchor the Y axis (`left` or `right`). AKA Y offset origin. - * Change this if your popper should grow in a direction different from `right` - */ - y: 'right', - }, - - /** - * Applies the computed styles to the popper element. - * - * All the DOM manipulations are limited to this modifier. This is useful in case - * you want to integrate Popper.js inside a framework or view library and you - * want to delegate all the DOM manipulations to it. - * - * Note that if you disable this modifier, you must make sure the popper element - * has its position set to `absolute` before Popper.js can do its work! - * - * Just disable this modifier and define your own to achieve the desired effect. - * - * @memberof modifiers - * @inner - */ - applyStyle: { - /** @prop {number} order=900 - Index used to define the order of execution */ - order: 900, - /** @prop {Boolean} enabled=true - Whether the modifier is enabled or not */ - enabled: true, - /** @prop {ModifierFn} */ - fn: applyStyle, - /** @prop {Function} */ - onLoad: applyStyleOnLoad, - /** - * @deprecated since version 1.10.0, the property moved to `computeStyle` modifier - * @prop {Boolean} gpuAcceleration=true - * If true, it uses the CSS 3D transformation to position the popper. - * Otherwise, it will use the `top` and `left` properties - */ - gpuAcceleration: undefined, - }, -}; - -/** - * The `dataObject` is an object containing all the information used by Popper.js. - * This object is passed to modifiers and to the `onCreate` and `onUpdate` callbacks. - * @name dataObject - * @property {Object} data.instance The Popper.js instance - * @property {String} data.placement Placement applied to popper - * @property {String} data.originalPlacement Placement originally defined on init - * @property {Boolean} data.flipped True if popper has been flipped by flip modifier - * @property {Boolean} data.hide True if the reference element is out of boundaries, useful to know when to hide the popper - * @property {HTMLElement} data.arrowElement Node used as arrow by arrow modifier - * @property {Object} data.styles Any CSS property defined here will be applied to the popper. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.arrowStyles Any CSS property defined here will be applied to the popper arrow. It expects the JavaScript nomenclature (eg. `marginBottom`) - * @property {Object} data.boundaries Offsets of the popper boundaries - * @property {Object} data.offsets The measurements of popper, reference and arrow elements - * @property {Object} data.offsets.popper `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.reference `top`, `left`, `width`, `height` values - * @property {Object} data.offsets.arrow] `top` and `left` offsets, only one of them will be different from 0 - */ diff --git a/QR-GEN/Scripts/src/modifiers/inner.js b/QR-GEN/Scripts/src/modifiers/inner.js deleted file mode 100644 index da2b927..0000000 --- a/QR-GEN/Scripts/src/modifiers/inner.js +++ /dev/null @@ -1,27 +0,0 @@ -import getClientRect from '../utils/getClientRect'; -import getOppositePlacement from '../utils/getOppositePlacement'; - -/** - * @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 - */ -export default function inner(data) { - const placement = data.placement; - const basePlacement = placement.split('-')[0]; - const { popper, reference } = data.offsets; - const isHoriz = ['left', 'right'].indexOf(basePlacement) !== -1; - - const subtractLength = ['top', 'left'].indexOf(basePlacement) === -1; - - popper[isHoriz ? 'left' : 'top'] = - reference[basePlacement] - - (subtractLength ? popper[isHoriz ? 'width' : 'height'] : 0); - - data.placement = getOppositePlacement(placement); - data.offsets.popper = getClientRect(popper); - - return data; -} diff --git a/QR-GEN/Scripts/src/modifiers/keepTogether.js b/QR-GEN/Scripts/src/modifiers/keepTogether.js deleted file mode 100644 index 3d5b0b3..0000000 --- a/QR-GEN/Scripts/src/modifiers/keepTogether.js +++ /dev/null @@ -1,26 +0,0 @@ -/** - * @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 - */ -export default function keepTogether(data) { - const { popper, reference } = data.offsets; - const placement = data.placement.split('-')[0]; - const floor = Math.floor; - const isVertical = ['top', 'bottom'].indexOf(placement) !== -1; - const side = isVertical ? 'right' : 'bottom'; - const opSide = isVertical ? 'left' : 'top'; - const measurement = isVertical ? 'width' : 'height'; - - if (popper[side] < floor(reference[opSide])) { - data.offsets.popper[opSide] = - floor(reference[opSide]) - popper[measurement]; - } - if (popper[opSide] > floor(reference[side])) { - data.offsets.popper[opSide] = floor(reference[side]); - } - - return data; -} diff --git a/QR-GEN/Scripts/src/modifiers/offset.js b/QR-GEN/Scripts/src/modifiers/offset.js deleted file mode 100644 index 70c9222..0000000 --- a/QR-GEN/Scripts/src/modifiers/offset.js +++ /dev/null @@ -1,194 +0,0 @@ -import isNumeric from '../utils/isNumeric'; -import getClientRect from '../utils/getClientRect'; -import find from '../utils/find'; - -/** - * Converts a string containing value + unit into a px value number - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} str - Value + unit string - * @argument {String} measurement - `height` or `width` - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @returns {Number|String} - * Value in pixels, or original string if no values were extracted - */ -export function toValue(str, measurement, popperOffsets, referenceOffsets) { - // separate value from unit - const split = str.match(/((?:\-|\+)?\d*\.?\d*)(.*)/); - const value = +split[1]; - const unit = split[2]; - - // If it's not a number it's an operator, I guess - if (!value) { - return str; - } - - if (unit.indexOf('%') === 0) { - let element; - switch (unit) { - case '%p': - element = popperOffsets; - break; - case '%': - case '%r': - default: - element = referenceOffsets; - } - - const rect = getClientRect(element); - return rect[measurement] / 100 * value; - } else if (unit === 'vh' || unit === 'vw') { - // if is a vh or vw, we calculate the size based on the viewport - let size; - if (unit === 'vh') { - size = Math.max( - document.documentElement.clientHeight, - window.innerHeight || 0 - ); - } else { - size = Math.max( - document.documentElement.clientWidth, - window.innerWidth || 0 - ); - } - return size / 100 * value; - } else { - // if is an explicit pixel unit, we get rid of the unit and keep the value - // if is an implicit unit, it's px, and we return just the value - return value; - } -} - -/** - * Parse an `offset` string to extrapolate `x` and `y` numeric offsets. - * @function - * @memberof {modifiers~offset} - * @private - * @argument {String} offset - * @argument {Object} popperOffsets - * @argument {Object} referenceOffsets - * @argument {String} basePlacement - * @returns {Array} a two cells array with x and y offsets in numbers - */ -export function parseOffset( - offset, - popperOffsets, - referenceOffsets, - basePlacement -) { - const offsets = [0, 0]; - - // Use height if placement is left or right and index is 0 otherwise use width - // in this way the first offset will use an axis and the second one - // will use the other one - const useHeight = ['right', 'left'].indexOf(basePlacement) !== -1; - - // Split the offset string to obtain a list of values and operands - // The regex addresses values with the plus or minus sign in front (+10, -20, etc) - const fragments = offset.split(/(\+|\-)/).map(frag => frag.trim()); - - // Detect if the offset string contains a pair of values or a single one - // they could be separated by comma or space - const divider = fragments.indexOf( - find(fragments, frag => frag.search(/,|\s/) !== -1) - ); - - if (fragments[divider] && fragments[divider].indexOf(',') === -1) { - console.warn( - 'Offsets separated by white space(s) are deprecated, use a comma (,) instead.' - ); - } - - // If divider is found, we divide the list of values and operands to divide - // them by ofset X and Y. - const splitRegex = /\s*,\s*|\s+/; - let ops = divider !== -1 - ? [ - fragments - .slice(0, divider) - .concat([fragments[divider].split(splitRegex)[0]]), - [fragments[divider].split(splitRegex)[1]].concat( - fragments.slice(divider + 1) - ), - ] - : [fragments]; - - // Convert the values with units to absolute pixels to allow our computations - ops = ops.map((op, index) => { - // Most of the units rely on the orientation of the popper - const measurement = (index === 1 ? !useHeight : useHeight) - ? 'height' - : 'width'; - let mergeWithPrevious = false; - return ( - op - // This aggregates any `+` or `-` sign that aren't considered operators - // e.g.: 10 + +5 => [10, +, +5] - .reduce((a, b) => { - if (a[a.length - 1] === '' && ['+', '-'].indexOf(b) !== -1) { - a[a.length - 1] = b; - mergeWithPrevious = true; - return a; - } else if (mergeWithPrevious) { - a[a.length - 1] += b; - mergeWithPrevious = false; - return a; - } else { - return a.concat(b); - } - }, []) - // Here we convert the string values into number values (in px) - .map(str => toValue(str, measurement, popperOffsets, referenceOffsets)) - ); - }); - - // Loop trough the offsets arrays and execute the operations - ops.forEach((op, index) => { - op.forEach((frag, index2) => { - if (isNumeric(frag)) { - offsets[index] += frag * (op[index2 - 1] === '-' ? -1 : 1); - } - }); - }); - return offsets; -} - -/** - * @function - * @memberof Modifiers - * @argument {Object} data - The data object generated by update method - * @argument {Object} options - Modifiers configuration and options - * @argument {Number|String} options.offset=0 - * The offset value as described in the modifier description - * @returns {Object} The data object, properly modified - */ -export default function offset(data, { offset }) { - const { placement, offsets: { popper, reference } } = data; - const basePlacement = placement.split('-')[0]; - - let offsets; - if (isNumeric(+offset)) { - offsets = [+offset, 0]; - } else { - offsets = parseOffset(offset, popper, reference, basePlacement); - } - - if (basePlacement === 'left') { - popper.top += offsets[0]; - popper.left -= offsets[1]; - } else if (basePlacement === 'right') { - popper.top += offsets[0]; - popper.left += offsets[1]; - } else if (basePlacement === 'top') { - popper.left += offsets[0]; - popper.top -= offsets[1]; - } else if (basePlacement === 'bottom') { - popper.left += offsets[0]; - popper.top += offsets[1]; - } - - data.popper = popper; - return data; -} diff --git a/QR-GEN/packages.config b/QR-GEN/packages.config index 83b11cc..fb7dd61 100644 --- a/QR-GEN/packages.config +++ b/QR-GEN/packages.config @@ -18,7 +18,6 @@ -