Comparing version 1.12.3 to 1.12.4
@@ -13,3 +13,2 @@ 'use strict'; | ||
}; | ||
function getVendorPrefix() { | ||
@@ -19,7 +18,5 @@ if (vendorPrefix !== undefined) { | ||
} | ||
vendorPrefix = ''; | ||
var style = document.createElement('p').style; | ||
var testProp = 'Transform'; | ||
for (var key in jsCssMap) { | ||
@@ -30,10 +27,7 @@ if (key + testProp in style) { | ||
} | ||
return vendorPrefix; | ||
} | ||
function getTransitionName() { | ||
return getVendorPrefix() ? "".concat(getVendorPrefix(), "TransitionProperty") : 'transitionProperty'; | ||
} | ||
function getTransformName() { | ||
@@ -44,6 +38,4 @@ return getVendorPrefix() ? "".concat(getVendorPrefix(), "Transform") : 'transform'; | ||
var name = getTransitionName(); | ||
if (name) { | ||
node.style[name] = value; | ||
if (name !== 'transitionProperty') { | ||
@@ -54,9 +46,6 @@ node.style.transitionProperty = value; | ||
} | ||
function setTransform(node, value) { | ||
var name = getTransformName(); | ||
if (name) { | ||
node.style[name] = value; | ||
if (name !== 'transform') { | ||
@@ -67,3 +56,2 @@ node.style.transform = value; | ||
} | ||
function getTransitionProperty(node) { | ||
@@ -75,3 +63,2 @@ return node.style.transitionProperty || node.style[getTransitionName()]; | ||
var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName()); | ||
if (transform && transform !== 'none') { | ||
@@ -84,3 +71,2 @@ var matrix = transform.replace(/[^0-9\-.,]/g, '').split(','); | ||
} | ||
return { | ||
@@ -96,7 +82,5 @@ x: 0, | ||
var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName()); | ||
if (transform && transform !== 'none') { | ||
var arr; | ||
var match2d = transform.match(matrix2d); | ||
if (match2d) { | ||
@@ -127,17 +111,12 @@ match2d = match2d[1]; | ||
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { | ||
_typeof = function _typeof(obj) { | ||
return typeof obj; | ||
}; | ||
} else { | ||
_typeof = function _typeof(obj) { | ||
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
}; | ||
} | ||
return _typeof(obj); | ||
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { | ||
return typeof obj; | ||
} : function (obj) { | ||
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
}, _typeof(obj); | ||
} | ||
var RE_NUM = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source; | ||
var getComputedStyleX; // https://stackoverflow.com/a/3485654/3040605 | ||
var getComputedStyleX; | ||
// https://stackoverflow.com/a/3485654/3040605 | ||
function forceRelayout(elem) { | ||
@@ -147,9 +126,6 @@ var originalStyle = elem.style.display; | ||
elem.offsetHeight; // eslint-disable-line | ||
elem.style.display = originalStyle; | ||
} | ||
function css(el, name, v) { | ||
var value = v; | ||
if (_typeof(name) === 'object') { | ||
@@ -161,6 +137,4 @@ for (var i in name) { | ||
} | ||
return undefined; | ||
} | ||
if (typeof value !== 'undefined') { | ||
@@ -170,10 +144,7 @@ if (typeof value === 'number') { | ||
} | ||
el.style[name] = value; | ||
return undefined; | ||
} | ||
return getComputedStyleX(el, name); | ||
} | ||
function getClientPosition(elem) { | ||
@@ -185,5 +156,7 @@ var box; | ||
var body = doc.body; | ||
var docElem = doc && doc.documentElement; // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式 | ||
var docElem = doc && doc.documentElement; | ||
// 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式 | ||
box = elem.getBoundingClientRect(); | ||
box = elem.getBoundingClientRect(); // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop | ||
// 注:jQuery 还考虑减去 docElem.clientLeft/clientTop | ||
// 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确 | ||
@@ -193,3 +166,5 @@ // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin | ||
x = Math.floor(box.left); | ||
y = Math.floor(box.top); // In IE, most of the time, 2 extra pixels are added to the top and left | ||
y = Math.floor(box.top); | ||
// In IE, most of the time, 2 extra pixels are added to the top and left | ||
// due to the implicit 2-pixel inset border. In IE6/7 quirks mode and | ||
@@ -199,2 +174,3 @@ // IE6 standards mode, this border can be overridden by setting the | ||
// offset always being 2 pixels. | ||
// In quirks mode, the offset can be determined by querying the body's | ||
@@ -205,2 +181,3 @@ // clientLeft/clientTop, but in standards mode, it is found by querying | ||
// too expensive just to query them all. | ||
// ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的 | ||
@@ -221,12 +198,9 @@ // 窗口边框标准是设 documentElement ,quirks 时设置 body | ||
} | ||
function getScroll(w, top) { | ||
var ret = w["page".concat(top ? 'Y' : 'X', "Offset")]; | ||
var method = "scroll".concat(top ? 'Top' : 'Left'); | ||
if (typeof ret !== 'number') { | ||
var d = w.document; // ie6,7,8 standard mode | ||
var d = w.document; | ||
// ie6,7,8 standard mode | ||
ret = d.documentElement[method]; | ||
if (typeof ret !== 'number') { | ||
@@ -237,14 +211,10 @@ // quirks mode | ||
} | ||
return ret; | ||
} | ||
function getScrollLeft(w) { | ||
return getScroll(w); | ||
} | ||
function getScrollTop(w) { | ||
return getScroll(w, true); | ||
} | ||
function getOffset(el) { | ||
@@ -258,2 +228,3 @@ var pos = getClientPosition(el); | ||
} | ||
/** | ||
@@ -263,11 +234,7 @@ * A crude way of determining if an object is a window | ||
*/ | ||
function isWindow(obj) { | ||
// must use == for ie8 | ||
/* eslint eqeqeq:0 */ | ||
return obj !== null && obj !== undefined && obj == obj.window; | ||
} | ||
function getDocument(node) { | ||
@@ -277,10 +244,7 @@ if (isWindow(node)) { | ||
} | ||
if (node.nodeType === 9) { | ||
return node; | ||
} | ||
return node.ownerDocument; | ||
} | ||
function _getComputedStyle(elem, name, cs) { | ||
@@ -290,13 +254,11 @@ var computedStyle = cs; | ||
var d = getDocument(elem); | ||
computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null); // https://github.com/kissyteam/kissy/issues/61 | ||
computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null); | ||
// https://github.com/kissyteam/kissy/issues/61 | ||
if (computedStyle) { | ||
val = computedStyle.getPropertyValue(name) || computedStyle[name]; | ||
} | ||
return val; | ||
} | ||
var _RE_NUM_NO_PX = new RegExp("^(".concat(RE_NUM, ")(?!px)[a-z%]+$"), 'i'); | ||
var RE_POS = /^(top|right|bottom|left)$/; | ||
@@ -307,10 +269,12 @@ var CURRENT_STYLE = 'currentStyle'; | ||
var PX = 'px'; | ||
function _getComputedStyleIE(elem, name) { | ||
// currentStyle maybe null | ||
// http://msdn.microsoft.com/en-us/library/ms535231.aspx | ||
var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值 | ||
var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; | ||
// 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值 | ||
// 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19 | ||
// 在 ie 下不对,需要直接用 offset 方式 | ||
// borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了 | ||
// From the awesome hack by Dean Edwards | ||
@@ -321,3 +285,2 @@ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 | ||
// exclude left right for relativity | ||
if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) { | ||
@@ -327,20 +290,20 @@ // Remember the original values | ||
var left = style[LEFT]; | ||
var rsLeft = elem[RUNTIME_STYLE][LEFT]; // prevent flashing of content | ||
var rsLeft = elem[RUNTIME_STYLE][LEFT]; | ||
elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; // Put in the new values to get a computed value out | ||
// prevent flashing of content | ||
elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; | ||
// Put in the new values to get a computed value out | ||
style[LEFT] = name === 'fontSize' ? '1em' : ret || 0; | ||
ret = style.pixelLeft + PX; // Revert the changed values | ||
ret = style.pixelLeft + PX; | ||
// Revert the changed values | ||
style[LEFT] = left; | ||
elem[RUNTIME_STYLE][LEFT] = rsLeft; | ||
} | ||
return ret === '' ? 'auto' : ret; | ||
} | ||
if (typeof window !== 'undefined') { | ||
getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE; | ||
} | ||
function getOffsetDirection(dir, option) { | ||
@@ -350,6 +313,4 @@ if (dir === 'left') { | ||
} | ||
return option.useCssBottom ? 'bottom' : dir; | ||
} | ||
function oppositeOffsetDirection(dir) { | ||
@@ -365,5 +326,5 @@ if (dir === 'left') { | ||
} | ||
} // 设置 elem 相对 elem.ownerDocument 的坐标 | ||
} | ||
// 设置 elem 相对 elem.ownerDocument 的坐标 | ||
function setLeftTop(elem, offset, option) { | ||
@@ -374,3 +335,2 @@ // set position first, in-case top/left are set even on static elem | ||
} | ||
var presetH = -999; | ||
@@ -382,14 +342,10 @@ var presetV = -999; | ||
var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty); | ||
if (horizontalProperty !== 'left') { | ||
presetH = 999; | ||
} | ||
if (verticalProperty !== 'top') { | ||
presetV = 999; | ||
} | ||
var originalTransition = ''; | ||
var originalOffset = getOffset(elem); | ||
if ('left' in offset || 'top' in offset) { | ||
@@ -399,3 +355,2 @@ originalTransition = getTransitionProperty(elem) || ''; | ||
} | ||
if ('left' in offset) { | ||
@@ -405,13 +360,10 @@ elem.style[oppositeHorizontalProperty] = ''; | ||
} | ||
if ('top' in offset) { | ||
elem.style[oppositeVerticalProperty] = ''; | ||
elem.style[verticalProperty] = "".concat(presetV, "px"); | ||
} // force relayout | ||
} | ||
// force relayout | ||
forceRelayout(elem); | ||
var old = getOffset(elem); | ||
var originalStyle = {}; | ||
for (var key in offset) { | ||
@@ -422,3 +374,2 @@ if (offset.hasOwnProperty(key)) { | ||
var off = originalOffset[key] - old[key]; | ||
if (dir === key) { | ||
@@ -431,19 +382,13 @@ originalStyle[dir] = preset + off; | ||
} | ||
css(elem, originalStyle); // force relayout | ||
css(elem, originalStyle); | ||
// force relayout | ||
forceRelayout(elem); | ||
if ('left' in offset || 'top' in offset) { | ||
setTransitionProperty(elem, originalTransition); | ||
} | ||
var ret = {}; | ||
for (var _key in offset) { | ||
if (offset.hasOwnProperty(_key)) { | ||
var _dir = getOffsetDirection(_key, option); | ||
var _off = offset[_key] - originalOffset[_key]; | ||
if (_key === _dir) { | ||
@@ -456,6 +401,4 @@ ret[_dir] = originalStyle[_dir] + _off; | ||
} | ||
css(elem, ret); | ||
} | ||
function setTransform$1(elem, offset) { | ||
@@ -468,14 +411,10 @@ var originalOffset = getOffset(elem); | ||
}; | ||
if ('left' in offset) { | ||
resultXY.x = originalXY.x + offset.left - originalOffset.left; | ||
} | ||
if ('top' in offset) { | ||
resultXY.y = originalXY.y + offset.top - originalOffset.top; | ||
} | ||
setTransformXY(elem, resultXY); | ||
} | ||
function setOffset(elem, offset, option) { | ||
@@ -488,3 +427,2 @@ if (option.ignoreShake) { | ||
var tTop = offset.top.toFixed(0); | ||
if (oLeft === tLeft && oTop === tTop) { | ||
@@ -494,3 +432,2 @@ return; | ||
} | ||
if (option.useCssRight || option.useCssBottom) { | ||
@@ -504,3 +441,2 @@ setLeftTop(elem, offset, option); | ||
} | ||
function each(arr, fn) { | ||
@@ -511,7 +447,5 @@ for (var i = 0; i < arr.length; i++) { | ||
} | ||
function isBorderBoxFn(elem) { | ||
return getComputedStyleX(elem, 'boxSizing') === 'border-box'; | ||
} | ||
var BOX_MODELS = ['margin', 'border', 'padding']; | ||
@@ -522,8 +456,8 @@ var CONTENT_INDEX = -1; | ||
var MARGIN_INDEX = 0; | ||
function swap(elem, options, callback) { | ||
var old = {}; | ||
var style = elem.style; | ||
var name; // Remember the old values, and insert the new ones | ||
var name; | ||
// Remember the old values, and insert the new ones | ||
for (name in options) { | ||
@@ -535,5 +469,5 @@ if (options.hasOwnProperty(name)) { | ||
} | ||
callback.call(elem); | ||
callback.call(elem); // Revert the old values | ||
// Revert the old values | ||
for (name in options) { | ||
@@ -545,3 +479,2 @@ if (options.hasOwnProperty(name)) { | ||
} | ||
function getPBMWidth(elem, props, which) { | ||
@@ -552,10 +485,7 @@ var value = 0; | ||
var i; | ||
for (j = 0; j < props.length; j++) { | ||
prop = props[j]; | ||
if (prop) { | ||
for (i = 0; i < which.length; i++) { | ||
var cssProp = void 0; | ||
if (prop === 'border') { | ||
@@ -566,3 +496,2 @@ cssProp = "".concat(prop).concat(which[i], "Width"); | ||
} | ||
value += parseFloat(getComputedStyleX(elem, cssProp)) || 0; | ||
@@ -572,10 +501,7 @@ } | ||
} | ||
return value; | ||
} | ||
var domUtils = { | ||
getParent: function getParent(element) { | ||
var parent = element; | ||
do { | ||
@@ -588,3 +514,2 @@ if (parent.nodeType === 11 && parent.host) { | ||
} while (parent && parent.nodeType !== 1 && parent.nodeType !== 9); | ||
return parent; | ||
@@ -596,8 +521,9 @@ } | ||
var d = refWin.document; | ||
return Math.max( // firefox chrome documentElement.scrollHeight< body.scrollHeight | ||
return Math.max( | ||
// firefox chrome documentElement.scrollHeight< body.scrollHeight | ||
// ie standard mode : documentElement.scrollHeight> body.scrollHeight | ||
d.documentElement["scroll".concat(name)], // quirks : documentElement.scrollHeight 最大等于可视窗口多一点? | ||
d.documentElement["scroll".concat(name)], | ||
// quirks : documentElement.scrollHeight 最大等于可视窗口多一点? | ||
d.body["scroll".concat(name)], domUtils["viewport".concat(name)](d)); | ||
}; | ||
domUtils["viewport".concat(name)] = function (win) { | ||
@@ -609,8 +535,9 @@ // pc browser includes scrollbar in window.innerWidth | ||
var documentElement = doc.documentElement; | ||
var documentElementProp = documentElement[prop]; // 标准模式取 documentElement | ||
var documentElementProp = documentElement[prop]; | ||
// 标准模式取 documentElement | ||
// backcompat 取 body | ||
return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp; | ||
}; | ||
}); | ||
/* | ||
@@ -624,6 +551,4 @@ 得到元素的大小信息 | ||
*/ | ||
function getWH(elem, name, ex) { | ||
var extra = ex; | ||
if (isWindow(elem)) { | ||
@@ -634,3 +559,2 @@ return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem); | ||
} | ||
var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom']; | ||
@@ -640,23 +564,17 @@ var borderBoxValue = name === 'width' ? Math.floor(elem.getBoundingClientRect().width) : Math.floor(elem.getBoundingClientRect().height); | ||
var cssBoxValue = 0; | ||
if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) { | ||
borderBoxValue = undefined; // Fall back to computed then un computed css if necessary | ||
borderBoxValue = undefined; | ||
// Fall back to computed then un computed css if necessary | ||
cssBoxValue = getComputedStyleX(elem, name); | ||
if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) { | ||
cssBoxValue = elem.style[name] || 0; | ||
} // Normalize '', auto, and prepare for extra | ||
cssBoxValue = parseFloat(cssBoxValue) || 0; | ||
} | ||
// Normalize '', auto, and prepare for extra | ||
cssBoxValue = Math.floor(parseFloat(cssBoxValue)) || 0; | ||
} | ||
if (extra === undefined) { | ||
extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX; | ||
} | ||
var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox; | ||
var val = borderBoxValue || cssBoxValue; | ||
if (extra === CONTENT_INDEX) { | ||
@@ -666,3 +584,2 @@ if (borderBoxValueOrIsBorderBox) { | ||
} | ||
return cssBoxValue; | ||
@@ -673,9 +590,6 @@ } else if (borderBoxValueOrIsBorderBox) { | ||
} | ||
return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which) : getPBMWidth(elem, ['margin'], which)); | ||
} | ||
return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which); | ||
} | ||
var cssShow = { | ||
@@ -685,4 +599,5 @@ position: 'absolute', | ||
display: 'block' | ||
}; // fix #119 : https://github.com/kissyteam/kissy/issues/119 | ||
}; | ||
// fix #119 : https://github.com/kissyteam/kissy/issues/119 | ||
function getWHIgnoreDisplay() { | ||
@@ -692,7 +607,6 @@ for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) { | ||
} | ||
var val; | ||
var elem = args[0]; // in case elem is window | ||
var elem = args[0]; | ||
// in case elem is window | ||
// elem.offsetWidth === undefined | ||
if (elem.offsetWidth !== 0) { | ||
@@ -705,36 +619,25 @@ val = getWH.apply(undefined, args); | ||
} | ||
return val; | ||
} | ||
each(['width', 'height'], function (name) { | ||
var first = name.charAt(0).toUpperCase() + name.slice(1); | ||
domUtils["outer".concat(first)] = function (el, includeMargin) { | ||
return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX); | ||
}; | ||
var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom']; | ||
domUtils[name] = function (elem, v) { | ||
var val = v; | ||
if (val !== undefined) { | ||
if (elem) { | ||
var isBorderBox = isBorderBoxFn(elem); | ||
if (isBorderBox) { | ||
val += getPBMWidth(elem, ['padding', 'border'], which); | ||
} | ||
return css(elem, name, val); | ||
} | ||
return undefined; | ||
} | ||
return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX); | ||
}; | ||
}); | ||
function mix(to, from) { | ||
@@ -746,6 +649,4 @@ for (var i in from) { | ||
} | ||
return to; | ||
} | ||
var utils = { | ||
@@ -756,3 +657,2 @@ getWindow: function getWindow(node) { | ||
} | ||
var doc = node.ownerDocument || node; | ||
@@ -775,3 +675,2 @@ return doc.defaultView || doc.parentWindow; | ||
var ret = {}; | ||
for (i in obj) { | ||
@@ -782,5 +681,3 @@ if (obj.hasOwnProperty(i)) { | ||
} | ||
var overflow = obj.overflow; | ||
if (overflow) { | ||
@@ -793,3 +690,2 @@ for (i in obj) { | ||
} | ||
return ret; | ||
@@ -806,7 +702,5 @@ }, | ||
var ret = {}; | ||
for (var i = 0; i < arguments.length; i++) { | ||
utils.mix(ret, i < 0 || arguments.length <= i ? undefined : arguments[i]); | ||
} | ||
return ret; | ||
@@ -822,10 +716,8 @@ }, | ||
*/ | ||
var getParent = utils.getParent; | ||
function getOffsetParent(element) { | ||
if (utils.isWindow(element) || element.nodeType === 9) { | ||
return null; | ||
} // ie 这个也不是完全可行 | ||
} | ||
// ie 这个也不是完全可行 | ||
/* | ||
@@ -845,4 +737,2 @@ <div style="width: 50px;height: 100px;overflow: hidden"> | ||
// 统一的 offsetParent 方法 | ||
var doc = utils.getDocument(element); | ||
@@ -853,10 +743,7 @@ var body = doc.body; | ||
var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute'; | ||
if (!skipStatic) { | ||
return element.nodeName.toLowerCase() === 'html' ? null : getParent(element); | ||
} | ||
for (parent = getParent(element); parent && parent !== body && parent.nodeType !== 9; parent = getParent(parent)) { | ||
positionStyle = utils.css(parent, 'position'); | ||
if (positionStyle !== 'static') { | ||
@@ -866,3 +753,2 @@ return parent; | ||
} | ||
return null; | ||
@@ -876,11 +762,9 @@ } | ||
} | ||
var doc = utils.getDocument(element); | ||
var body = doc.body; | ||
var parent = null; | ||
for (parent = getParent$1(element); // 修复元素位于 document.documentElement 下导致崩溃问题 | ||
for (parent = getParent$1(element); | ||
// 修复元素位于 document.documentElement 下导致崩溃问题 | ||
parent && parent !== body && parent !== doc; parent = getParent$1(parent)) { | ||
var positionStyle = utils.css(parent, 'position'); | ||
if (positionStyle === 'fixed') { | ||
@@ -890,3 +774,2 @@ return true; | ||
} | ||
return false; | ||
@@ -898,3 +781,2 @@ } | ||
*/ | ||
function getVisibleRectForElement(element, alwaysByViewport) { | ||
@@ -911,17 +793,20 @@ var visibleRect = { | ||
var body = doc.body; | ||
var documentElement = doc.documentElement; // Determine the size of the visible rect by climbing the dom accounting for | ||
var documentElement = doc.documentElement; | ||
// Determine the size of the visible rect by climbing the dom accounting for | ||
// all scrollable containers. | ||
while (el) { | ||
// clientWidth is zero for inline block elements in ie. | ||
if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) && // body may have overflow set on it, yet we still get the entire | ||
if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) && | ||
// body may have overflow set on it, yet we still get the entire | ||
// viewport. In some browsers, el.offsetParent may be | ||
// document.documentElement, so check for that too. | ||
el !== body && el !== documentElement && utils.css(el, 'overflow') !== 'visible') { | ||
var pos = utils.offset(el); // add border | ||
var pos = utils.offset(el); | ||
// add border | ||
pos.left += el.clientLeft; | ||
pos.top += el.clientTop; | ||
visibleRect.top = Math.max(visibleRect.top, pos.top); | ||
visibleRect.right = Math.min(visibleRect.right, // consider area without scrollBar | ||
visibleRect.right = Math.min(visibleRect.right, | ||
// consider area without scrollBar | ||
pos.left + el.clientWidth); | ||
@@ -933,15 +818,12 @@ visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight); | ||
} | ||
el = getOffsetParent(el); | ||
} | ||
el = getOffsetParent(el); | ||
} // Set element position to fixed | ||
// Set element position to fixed | ||
// make sure absolute element itself don't affect it's visible area | ||
// https://github.com/ant-design/ant-design/issues/7601 | ||
var originalPosition = null; | ||
if (!utils.isWindow(element) && element.nodeType !== 9) { | ||
originalPosition = element.style.position; | ||
var position = utils.css(element, 'position'); | ||
if (position === 'absolute') { | ||
@@ -951,3 +833,2 @@ element.style.position = 'fixed'; | ||
} | ||
var scrollX = utils.getWindowScrollLeft(win); | ||
@@ -958,20 +839,18 @@ var scrollY = utils.getWindowScrollTop(win); | ||
var documentWidth = documentElement.scrollWidth; | ||
var documentHeight = documentElement.scrollHeight; // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX. | ||
var documentHeight = documentElement.scrollHeight; | ||
// scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX. | ||
// We should cut this ourself. | ||
var bodyStyle = window.getComputedStyle(body); | ||
if (bodyStyle.overflowX === 'hidden') { | ||
documentWidth = win.innerWidth; | ||
} | ||
if (bodyStyle.overflowY === 'hidden') { | ||
documentHeight = win.innerHeight; | ||
} // Reset element position after calculate the visible area | ||
} | ||
// Reset element position after calculate the visible area | ||
if (element.style) { | ||
element.style.position = originalPosition; | ||
} | ||
if (alwaysByViewport || isAncestorFixed(element)) { | ||
@@ -990,3 +869,2 @@ // Clip by viewport's size. | ||
} | ||
return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null; | ||
@@ -1001,29 +879,28 @@ } | ||
}; | ||
if (overflow.adjustX && pos.left < visibleRect.left) { | ||
pos.left = visibleRect.left; | ||
} // Left edge inside and right edge outside viewport, try to resize it. | ||
} | ||
// Left edge inside and right edge outside viewport, try to resize it. | ||
if (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) { | ||
size.width -= pos.left + size.width - visibleRect.right; | ||
} // Right edge outside viewport, try to move it. | ||
} | ||
// Right edge outside viewport, try to move it. | ||
if (overflow.adjustX && pos.left + size.width > visibleRect.right) { | ||
// 保证左边界和可视区域左边界对齐 | ||
pos.left = Math.max(visibleRect.right - size.width, visibleRect.left); | ||
} // Top edge outside viewport, try to move it. | ||
} | ||
// Top edge outside viewport, try to move it. | ||
if (overflow.adjustY && pos.top < visibleRect.top) { | ||
pos.top = visibleRect.top; | ||
} // Top edge inside and bottom edge outside viewport, try to resize it. | ||
} | ||
// Top edge inside and bottom edge outside viewport, try to resize it. | ||
if (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) { | ||
size.height -= pos.top + size.height - visibleRect.bottom; | ||
} // Bottom edge outside viewport, try to move it. | ||
} | ||
// Bottom edge outside viewport, try to move it. | ||
if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) { | ||
@@ -1033,3 +910,2 @@ // 保证上边界和可视区域上边界对齐 | ||
} | ||
return utils.mix(pos, size); | ||
@@ -1042,3 +918,2 @@ } | ||
var h; | ||
if (!utils.isWindow(node) && node.nodeType !== 9) { | ||
@@ -1057,3 +932,2 @@ offset = utils.offset(node); | ||
} | ||
offset.width = w; | ||
@@ -1067,2 +941,3 @@ offset.height = h; | ||
*/ | ||
function getAlignOffset(region, align) { | ||
@@ -1075,3 +950,2 @@ var V = align.charAt(0); | ||
var y = region.top; | ||
if (V === 'c') { | ||
@@ -1082,3 +956,2 @@ y += h / 2; | ||
} | ||
if (H === 'c') { | ||
@@ -1089,3 +962,2 @@ x += w / 2; | ||
} | ||
return { | ||
@@ -1112,18 +984,16 @@ left: x, | ||
// http://yiminghe.iteye.com/blog/1124720 | ||
function isFailX(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right; | ||
} | ||
function isFailY(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom; | ||
} | ||
function isCompleteFailX(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left; | ||
} | ||
function isCompleteFailY(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top; | ||
} | ||
function flip(points, reg, map) { | ||
@@ -1138,3 +1008,2 @@ var ret = []; | ||
} | ||
function flipOffset(offset, index) { | ||
@@ -1144,6 +1013,4 @@ offset[index] = -offset[index]; | ||
} | ||
function convertOffset(str, offsetLen) { | ||
var n; | ||
if (/%$/.test(str)) { | ||
@@ -1154,6 +1021,4 @@ n = parseInt(str.substring(0, str.length - 1), 10) / 100 * offsetLen; | ||
} | ||
return n || 0; | ||
} | ||
function normalizeOffset(offset, el) { | ||
@@ -1163,2 +1028,3 @@ offset[0] = convertOffset(offset[0], el.width); | ||
} | ||
/** | ||
@@ -1169,4 +1035,2 @@ * @param el | ||
*/ | ||
function doAlign(el, tgtRegion, align, isTgtRegionVisible) { | ||
@@ -1183,15 +1047,16 @@ var points = align.points; | ||
var fail = 0; | ||
var alwaysByViewport = !!(overflow && overflow.alwaysByViewport); // 当前节点可以被放置的显示区域 | ||
var visibleRect = getVisibleRectForElement(source, alwaysByViewport); // 当前节点所占的区域, left/top/width/height | ||
var elRegion = getRegion(source); // 将 offset 转换成数值,支持百分比 | ||
var alwaysByViewport = !!(overflow && overflow.alwaysByViewport); | ||
// 当前节点可以被放置的显示区域 | ||
var visibleRect = getVisibleRectForElement(source, alwaysByViewport); | ||
// 当前节点所占的区域, left/top/width/height | ||
var elRegion = getRegion(source); | ||
// 将 offset 转换成数值,支持百分比 | ||
normalizeOffset(offset, elRegion); | ||
normalizeOffset(targetOffset, tgtRegion); // 当前节点将要被放置的位置 | ||
normalizeOffset(targetOffset, tgtRegion); | ||
// 当前节点将要被放置的位置 | ||
var elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset); | ||
// 当前节点将要所处的区域 | ||
var newElRegion = utils.merge(elRegion, elFuturePos); | ||
var elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset); // 当前节点将要所处的区域 | ||
var newElRegion = utils.merge(elRegion, elFuturePos); // 如果可视区域不能完全放置当前节点时允许调整 | ||
// 如果可视区域不能完全放置当前节点时允许调整 | ||
if (visibleRect && (overflow.adjustX || overflow.adjustY) && isTgtRegionVisible) { | ||
@@ -1205,8 +1070,7 @@ if (overflow.adjustX) { | ||
r: 'l' | ||
}); // 偏移量也反下 | ||
}); | ||
// 偏移量也反下 | ||
var newOffset = flipOffset(offset, 0); | ||
var newTargetOffset = flipOffset(targetOffset, 0); | ||
var newElFuturePos = getElFuturePos(elRegion, tgtRegion, newPoints, newOffset, newTargetOffset); | ||
if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) { | ||
@@ -1220,3 +1084,2 @@ fail = 1; | ||
} | ||
if (overflow.adjustY) { | ||
@@ -1229,11 +1092,7 @@ // 如果纵向不能放下 | ||
b: 't' | ||
}); // 偏移量也反下 | ||
}); | ||
// 偏移量也反下 | ||
var _newOffset = flipOffset(offset, 1); | ||
var _newTargetOffset = flipOffset(targetOffset, 1); | ||
var _newElFuturePos = getElFuturePos(elRegion, tgtRegion, _newPoints, _newOffset, _newTargetOffset); | ||
if (!isCompleteFailY(_newElFuturePos, elRegion, visibleRect)) { | ||
@@ -1246,5 +1105,5 @@ fail = 1; | ||
} | ||
} // 如果失败,重新计算当前节点将要被放置的位置 | ||
} | ||
// 如果失败,重新计算当前节点将要被放置的位置 | ||
if (fail) { | ||
@@ -1254,10 +1113,10 @@ elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset); | ||
} | ||
var isStillFailX = isFailX(elFuturePos, elRegion, visibleRect); | ||
var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect); // 检查反下后的位置是否可以放下了,如果仍然放不下: | ||
var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect); | ||
// 检查反下后的位置是否可以放下了,如果仍然放不下: | ||
// 1. 复原修改过的定位参数 | ||
if (isStillFailX || isStillFailY) { | ||
var _newPoints2 = points; // 重置对应部分的翻转逻辑 | ||
var _newPoints2 = points; | ||
// 重置对应部分的翻转逻辑 | ||
if (isStillFailX) { | ||
@@ -1269,3 +1128,2 @@ _newPoints2 = flip(points, /[lr]/gi, { | ||
} | ||
if (isStillFailY) { | ||
@@ -1277,29 +1135,27 @@ _newPoints2 = flip(points, /[tb]/gi, { | ||
} | ||
points = _newPoints2; | ||
offset = align.offset || [0, 0]; | ||
targetOffset = align.targetOffset || [0, 0]; | ||
} // 2. 只有指定了可以调整当前方向才调整 | ||
} | ||
// 2. 只有指定了可以调整当前方向才调整 | ||
newOverflowCfg.adjustX = overflow.adjustX && isStillFailX; | ||
newOverflowCfg.adjustY = overflow.adjustY && isStillFailY; // 确实要调整,甚至可能会调整高度宽度 | ||
newOverflowCfg.adjustY = overflow.adjustY && isStillFailY; | ||
// 确实要调整,甚至可能会调整高度宽度 | ||
if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) { | ||
newElRegion = adjustForViewport(elFuturePos, elRegion, visibleRect, newOverflowCfg); | ||
} | ||
} // need judge to in case set fixed with in css on height auto element | ||
} | ||
// need judge to in case set fixed with in css on height auto element | ||
if (newElRegion.width !== elRegion.width) { | ||
utils.css(source, 'width', utils.width(source) + newElRegion.width - elRegion.width); | ||
} | ||
if (newElRegion.height !== elRegion.height) { | ||
utils.css(source, 'height', utils.height(source) + newElRegion.height - elRegion.height); | ||
} // https://github.com/kissyteam/kissy/issues/190 | ||
} | ||
// https://github.com/kissyteam/kissy/issues/190 | ||
// 相对于屏幕位置没变,而 left/top 变了 | ||
// 例如 <div 'relative'><el absolute></div> | ||
utils.offset(source, { | ||
@@ -1335,3 +1191,2 @@ left: newElRegion.left, | ||
} | ||
function alignElement(el, refNode, align) { | ||
@@ -1343,3 +1198,2 @@ var target = align.target || refNode; | ||
} | ||
alignElement.__getOffsetParent = getOffsetParent; | ||
@@ -1350,38 +1204,21 @@ alignElement.__getVisibleRectForElement = getVisibleRectForElement; | ||
var keys = Object.keys(object); | ||
if (Object.getOwnPropertySymbols) { | ||
var symbols = Object.getOwnPropertySymbols(object); | ||
if (enumerableOnly) { | ||
symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
}); | ||
} | ||
keys.push.apply(keys, symbols); | ||
enumerableOnly && (symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
})), keys.push.apply(keys, symbols); | ||
} | ||
return keys; | ||
} | ||
function _objectSpread(target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i] != null ? arguments[i] : {}; | ||
if (i % 2) { | ||
ownKeys(Object(source), true).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}); | ||
} else if (Object.getOwnPropertyDescriptors) { | ||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | ||
} else { | ||
ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
var source = null != arguments[i] ? arguments[i] : {}; | ||
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
return target; | ||
} | ||
function _defineProperty(obj, key, value) { | ||
@@ -1398,5 +1235,5 @@ if (key in obj) { | ||
} | ||
return obj; | ||
} | ||
/** | ||
@@ -1416,3 +1253,2 @@ * `tgtPoint`: { pageX, pageY } or { clientX, clientY }. | ||
var viewportHeight = utils.viewportHeight(win); | ||
if ('pageX' in tgtPoint) { | ||
@@ -1423,3 +1259,2 @@ pageX = tgtPoint.pageX; | ||
} | ||
if ('pageY' in tgtPoint) { | ||
@@ -1430,3 +1265,2 @@ pageY = tgtPoint.pageY; | ||
} | ||
var tgtRegion = { | ||
@@ -1438,4 +1272,5 @@ left: pageX, | ||
}; | ||
var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight; // Provide default target point | ||
var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight; | ||
// Provide default target point | ||
var points = [align.points[0], 'cc']; | ||
@@ -1442,0 +1277,0 @@ return doAlign(el, tgtRegion, _objectSpread(_objectSpread({}, align), {}, { |
function ownKeys(object, enumerableOnly) { | ||
var keys = Object.keys(object); | ||
if (Object.getOwnPropertySymbols) { | ||
var symbols = Object.getOwnPropertySymbols(object); | ||
if (enumerableOnly) { | ||
symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
}); | ||
} | ||
keys.push.apply(keys, symbols); | ||
enumerableOnly && (symbols = symbols.filter(function (sym) { | ||
return Object.getOwnPropertyDescriptor(object, sym).enumerable; | ||
})), keys.push.apply(keys, symbols); | ||
} | ||
return keys; | ||
} | ||
function _objectSpread2(target) { | ||
for (var i = 1; i < arguments.length; i++) { | ||
var source = arguments[i] != null ? arguments[i] : {}; | ||
if (i % 2) { | ||
ownKeys(Object(source), true).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}); | ||
} else if (Object.getOwnPropertyDescriptors) { | ||
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)); | ||
} else { | ||
ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
var source = null != arguments[i] ? arguments[i] : {}; | ||
i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { | ||
_defineProperty(target, key, source[key]); | ||
}) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { | ||
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); | ||
}); | ||
} | ||
return target; | ||
} | ||
function _typeof(obj) { | ||
"@babel/helpers - typeof"; | ||
if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { | ||
_typeof = function (obj) { | ||
return typeof obj; | ||
}; | ||
} else { | ||
_typeof = function (obj) { | ||
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
}; | ||
} | ||
return _typeof(obj); | ||
return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { | ||
return typeof obj; | ||
} : function (obj) { | ||
return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; | ||
}, _typeof(obj); | ||
} | ||
function _defineProperty(obj, key, value) { | ||
@@ -66,3 +42,2 @@ if (key in obj) { | ||
} | ||
return obj; | ||
@@ -79,3 +54,2 @@ } | ||
}; | ||
function getVendorPrefix() { | ||
@@ -85,7 +59,5 @@ if (vendorPrefix !== undefined) { | ||
} | ||
vendorPrefix = ''; | ||
var style = document.createElement('p').style; | ||
var testProp = 'Transform'; | ||
for (var key in jsCssMap) { | ||
@@ -96,10 +68,7 @@ if (key + testProp in style) { | ||
} | ||
return vendorPrefix; | ||
} | ||
function getTransitionName() { | ||
return getVendorPrefix() ? "".concat(getVendorPrefix(), "TransitionProperty") : 'transitionProperty'; | ||
} | ||
function getTransformName() { | ||
@@ -110,6 +79,4 @@ return getVendorPrefix() ? "".concat(getVendorPrefix(), "Transform") : 'transform'; | ||
var name = getTransitionName(); | ||
if (name) { | ||
node.style[name] = value; | ||
if (name !== 'transitionProperty') { | ||
@@ -120,9 +87,6 @@ node.style.transitionProperty = value; | ||
} | ||
function setTransform(node, value) { | ||
var name = getTransformName(); | ||
if (name) { | ||
node.style[name] = value; | ||
if (name !== 'transform') { | ||
@@ -133,3 +97,2 @@ node.style.transform = value; | ||
} | ||
function getTransitionProperty(node) { | ||
@@ -141,3 +104,2 @@ return node.style.transitionProperty || node.style[getTransitionName()]; | ||
var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName()); | ||
if (transform && transform !== 'none') { | ||
@@ -150,3 +112,2 @@ var matrix = transform.replace(/[^0-9\-.,]/g, '').split(','); | ||
} | ||
return { | ||
@@ -162,7 +123,5 @@ x: 0, | ||
var transform = style.getPropertyValue('transform') || style.getPropertyValue(getTransformName()); | ||
if (transform && transform !== 'none') { | ||
var arr; | ||
var match2d = transform.match(matrix2d); | ||
if (match2d) { | ||
@@ -191,4 +150,5 @@ match2d = match2d[1]; | ||
var RE_NUM = /[\-+]?(?:\d*\.|)\d+(?:[eE][\-+]?\d+|)/.source; | ||
var getComputedStyleX; // https://stackoverflow.com/a/3485654/3040605 | ||
var getComputedStyleX; | ||
// https://stackoverflow.com/a/3485654/3040605 | ||
function forceRelayout(elem) { | ||
@@ -198,9 +158,6 @@ var originalStyle = elem.style.display; | ||
elem.offsetHeight; // eslint-disable-line | ||
elem.style.display = originalStyle; | ||
} | ||
function css(el, name, v) { | ||
var value = v; | ||
if (_typeof(name) === 'object') { | ||
@@ -212,6 +169,4 @@ for (var i in name) { | ||
} | ||
return undefined; | ||
} | ||
if (typeof value !== 'undefined') { | ||
@@ -221,10 +176,7 @@ if (typeof value === 'number') { | ||
} | ||
el.style[name] = value; | ||
return undefined; | ||
} | ||
return getComputedStyleX(el, name); | ||
} | ||
function getClientPosition(elem) { | ||
@@ -236,5 +188,7 @@ var box; | ||
var body = doc.body; | ||
var docElem = doc && doc.documentElement; // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式 | ||
var docElem = doc && doc.documentElement; | ||
// 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式 | ||
box = elem.getBoundingClientRect(); | ||
box = elem.getBoundingClientRect(); // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop | ||
// 注:jQuery 还考虑减去 docElem.clientLeft/clientTop | ||
// 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确 | ||
@@ -244,3 +198,5 @@ // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin | ||
x = Math.floor(box.left); | ||
y = Math.floor(box.top); // In IE, most of the time, 2 extra pixels are added to the top and left | ||
y = Math.floor(box.top); | ||
// In IE, most of the time, 2 extra pixels are added to the top and left | ||
// due to the implicit 2-pixel inset border. In IE6/7 quirks mode and | ||
@@ -250,2 +206,3 @@ // IE6 standards mode, this border can be overridden by setting the | ||
// offset always being 2 pixels. | ||
// In quirks mode, the offset can be determined by querying the body's | ||
@@ -256,2 +213,3 @@ // clientLeft/clientTop, but in standards mode, it is found by querying | ||
// too expensive just to query them all. | ||
// ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的 | ||
@@ -272,12 +230,9 @@ // 窗口边框标准是设 documentElement ,quirks 时设置 body | ||
} | ||
function getScroll(w, top) { | ||
var ret = w["page".concat(top ? 'Y' : 'X', "Offset")]; | ||
var method = "scroll".concat(top ? 'Top' : 'Left'); | ||
if (typeof ret !== 'number') { | ||
var d = w.document; // ie6,7,8 standard mode | ||
var d = w.document; | ||
// ie6,7,8 standard mode | ||
ret = d.documentElement[method]; | ||
if (typeof ret !== 'number') { | ||
@@ -288,14 +243,10 @@ // quirks mode | ||
} | ||
return ret; | ||
} | ||
function getScrollLeft(w) { | ||
return getScroll(w); | ||
} | ||
function getScrollTop(w) { | ||
return getScroll(w, true); | ||
} | ||
function getOffset(el) { | ||
@@ -309,2 +260,3 @@ var pos = getClientPosition(el); | ||
} | ||
/** | ||
@@ -314,11 +266,7 @@ * A crude way of determining if an object is a window | ||
*/ | ||
function isWindow(obj) { | ||
// must use == for ie8 | ||
/* eslint eqeqeq:0 */ | ||
return obj !== null && obj !== undefined && obj == obj.window; | ||
} | ||
function getDocument(node) { | ||
@@ -328,10 +276,7 @@ if (isWindow(node)) { | ||
} | ||
if (node.nodeType === 9) { | ||
return node; | ||
} | ||
return node.ownerDocument; | ||
} | ||
function _getComputedStyle(elem, name, cs) { | ||
@@ -341,13 +286,11 @@ var computedStyle = cs; | ||
var d = getDocument(elem); | ||
computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null); // https://github.com/kissyteam/kissy/issues/61 | ||
computedStyle = computedStyle || d.defaultView.getComputedStyle(elem, null); | ||
// https://github.com/kissyteam/kissy/issues/61 | ||
if (computedStyle) { | ||
val = computedStyle.getPropertyValue(name) || computedStyle[name]; | ||
} | ||
return val; | ||
} | ||
var _RE_NUM_NO_PX = new RegExp("^(".concat(RE_NUM, ")(?!px)[a-z%]+$"), 'i'); | ||
var RE_POS = /^(top|right|bottom|left)$/; | ||
@@ -358,10 +301,12 @@ var CURRENT_STYLE = 'currentStyle'; | ||
var PX = 'px'; | ||
function _getComputedStyleIE(elem, name) { | ||
// currentStyle maybe null | ||
// http://msdn.microsoft.com/en-us/library/ms535231.aspx | ||
var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值 | ||
var ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name]; | ||
// 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值 | ||
// 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19 | ||
// 在 ie 下不对,需要直接用 offset 方式 | ||
// borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了 | ||
// From the awesome hack by Dean Edwards | ||
@@ -372,3 +317,2 @@ // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291 | ||
// exclude left right for relativity | ||
if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) { | ||
@@ -378,20 +322,20 @@ // Remember the original values | ||
var left = style[LEFT]; | ||
var rsLeft = elem[RUNTIME_STYLE][LEFT]; // prevent flashing of content | ||
var rsLeft = elem[RUNTIME_STYLE][LEFT]; | ||
elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; // Put in the new values to get a computed value out | ||
// prevent flashing of content | ||
elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT]; | ||
// Put in the new values to get a computed value out | ||
style[LEFT] = name === 'fontSize' ? '1em' : ret || 0; | ||
ret = style.pixelLeft + PX; // Revert the changed values | ||
ret = style.pixelLeft + PX; | ||
// Revert the changed values | ||
style[LEFT] = left; | ||
elem[RUNTIME_STYLE][LEFT] = rsLeft; | ||
} | ||
return ret === '' ? 'auto' : ret; | ||
} | ||
if (typeof window !== 'undefined') { | ||
getComputedStyleX = window.getComputedStyle ? _getComputedStyle : _getComputedStyleIE; | ||
} | ||
function getOffsetDirection(dir, option) { | ||
@@ -401,6 +345,4 @@ if (dir === 'left') { | ||
} | ||
return option.useCssBottom ? 'bottom' : dir; | ||
} | ||
function oppositeOffsetDirection(dir) { | ||
@@ -416,5 +358,5 @@ if (dir === 'left') { | ||
} | ||
} // 设置 elem 相对 elem.ownerDocument 的坐标 | ||
} | ||
// 设置 elem 相对 elem.ownerDocument 的坐标 | ||
function setLeftTop(elem, offset, option) { | ||
@@ -425,3 +367,2 @@ // set position first, in-case top/left are set even on static elem | ||
} | ||
var presetH = -999; | ||
@@ -433,14 +374,10 @@ var presetV = -999; | ||
var oppositeVerticalProperty = oppositeOffsetDirection(verticalProperty); | ||
if (horizontalProperty !== 'left') { | ||
presetH = 999; | ||
} | ||
if (verticalProperty !== 'top') { | ||
presetV = 999; | ||
} | ||
var originalTransition = ''; | ||
var originalOffset = getOffset(elem); | ||
if ('left' in offset || 'top' in offset) { | ||
@@ -450,3 +387,2 @@ originalTransition = getTransitionProperty(elem) || ''; | ||
} | ||
if ('left' in offset) { | ||
@@ -456,13 +392,10 @@ elem.style[oppositeHorizontalProperty] = ''; | ||
} | ||
if ('top' in offset) { | ||
elem.style[oppositeVerticalProperty] = ''; | ||
elem.style[verticalProperty] = "".concat(presetV, "px"); | ||
} // force relayout | ||
} | ||
// force relayout | ||
forceRelayout(elem); | ||
var old = getOffset(elem); | ||
var originalStyle = {}; | ||
for (var key in offset) { | ||
@@ -473,3 +406,2 @@ if (offset.hasOwnProperty(key)) { | ||
var off = originalOffset[key] - old[key]; | ||
if (dir === key) { | ||
@@ -482,19 +414,13 @@ originalStyle[dir] = preset + off; | ||
} | ||
css(elem, originalStyle); // force relayout | ||
css(elem, originalStyle); | ||
// force relayout | ||
forceRelayout(elem); | ||
if ('left' in offset || 'top' in offset) { | ||
setTransitionProperty(elem, originalTransition); | ||
} | ||
var ret = {}; | ||
for (var _key in offset) { | ||
if (offset.hasOwnProperty(_key)) { | ||
var _dir = getOffsetDirection(_key, option); | ||
var _off = offset[_key] - originalOffset[_key]; | ||
if (_key === _dir) { | ||
@@ -507,6 +433,4 @@ ret[_dir] = originalStyle[_dir] + _off; | ||
} | ||
css(elem, ret); | ||
} | ||
function setTransform$1(elem, offset) { | ||
@@ -519,14 +443,10 @@ var originalOffset = getOffset(elem); | ||
}; | ||
if ('left' in offset) { | ||
resultXY.x = originalXY.x + offset.left - originalOffset.left; | ||
} | ||
if ('top' in offset) { | ||
resultXY.y = originalXY.y + offset.top - originalOffset.top; | ||
} | ||
setTransformXY(elem, resultXY); | ||
} | ||
function setOffset(elem, offset, option) { | ||
@@ -539,3 +459,2 @@ if (option.ignoreShake) { | ||
var tTop = offset.top.toFixed(0); | ||
if (oLeft === tLeft && oTop === tTop) { | ||
@@ -545,3 +464,2 @@ return; | ||
} | ||
if (option.useCssRight || option.useCssBottom) { | ||
@@ -555,3 +473,2 @@ setLeftTop(elem, offset, option); | ||
} | ||
function each(arr, fn) { | ||
@@ -562,7 +479,5 @@ for (var i = 0; i < arr.length; i++) { | ||
} | ||
function isBorderBoxFn(elem) { | ||
return getComputedStyleX(elem, 'boxSizing') === 'border-box'; | ||
} | ||
var BOX_MODELS = ['margin', 'border', 'padding']; | ||
@@ -573,8 +488,8 @@ var CONTENT_INDEX = -1; | ||
var MARGIN_INDEX = 0; | ||
function swap(elem, options, callback) { | ||
var old = {}; | ||
var style = elem.style; | ||
var name; // Remember the old values, and insert the new ones | ||
var name; | ||
// Remember the old values, and insert the new ones | ||
for (name in options) { | ||
@@ -586,5 +501,5 @@ if (options.hasOwnProperty(name)) { | ||
} | ||
callback.call(elem); | ||
callback.call(elem); // Revert the old values | ||
// Revert the old values | ||
for (name in options) { | ||
@@ -596,3 +511,2 @@ if (options.hasOwnProperty(name)) { | ||
} | ||
function getPBMWidth(elem, props, which) { | ||
@@ -603,10 +517,7 @@ var value = 0; | ||
var i; | ||
for (j = 0; j < props.length; j++) { | ||
prop = props[j]; | ||
if (prop) { | ||
for (i = 0; i < which.length; i++) { | ||
var cssProp = void 0; | ||
if (prop === 'border') { | ||
@@ -617,3 +528,2 @@ cssProp = "".concat(prop).concat(which[i], "Width"); | ||
} | ||
value += parseFloat(getComputedStyleX(elem, cssProp)) || 0; | ||
@@ -623,10 +533,7 @@ } | ||
} | ||
return value; | ||
} | ||
var domUtils = { | ||
getParent: function getParent(element) { | ||
var parent = element; | ||
do { | ||
@@ -639,3 +546,2 @@ if (parent.nodeType === 11 && parent.host) { | ||
} while (parent && parent.nodeType !== 1 && parent.nodeType !== 9); | ||
return parent; | ||
@@ -647,8 +553,9 @@ } | ||
var d = refWin.document; | ||
return Math.max( // firefox chrome documentElement.scrollHeight< body.scrollHeight | ||
return Math.max( | ||
// firefox chrome documentElement.scrollHeight< body.scrollHeight | ||
// ie standard mode : documentElement.scrollHeight> body.scrollHeight | ||
d.documentElement["scroll".concat(name)], // quirks : documentElement.scrollHeight 最大等于可视窗口多一点? | ||
d.documentElement["scroll".concat(name)], | ||
// quirks : documentElement.scrollHeight 最大等于可视窗口多一点? | ||
d.body["scroll".concat(name)], domUtils["viewport".concat(name)](d)); | ||
}; | ||
domUtils["viewport".concat(name)] = function (win) { | ||
@@ -660,8 +567,9 @@ // pc browser includes scrollbar in window.innerWidth | ||
var documentElement = doc.documentElement; | ||
var documentElementProp = documentElement[prop]; // 标准模式取 documentElement | ||
var documentElementProp = documentElement[prop]; | ||
// 标准模式取 documentElement | ||
// backcompat 取 body | ||
return doc.compatMode === 'CSS1Compat' && documentElementProp || body && body[prop] || documentElementProp; | ||
}; | ||
}); | ||
/* | ||
@@ -675,6 +583,4 @@ 得到元素的大小信息 | ||
*/ | ||
function getWH(elem, name, ex) { | ||
var extra = ex; | ||
if (isWindow(elem)) { | ||
@@ -685,3 +591,2 @@ return name === 'width' ? domUtils.viewportWidth(elem) : domUtils.viewportHeight(elem); | ||
} | ||
var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom']; | ||
@@ -691,23 +596,17 @@ var borderBoxValue = name === 'width' ? Math.floor(elem.getBoundingClientRect().width) : Math.floor(elem.getBoundingClientRect().height); | ||
var cssBoxValue = 0; | ||
if (borderBoxValue === null || borderBoxValue === undefined || borderBoxValue <= 0) { | ||
borderBoxValue = undefined; // Fall back to computed then un computed css if necessary | ||
borderBoxValue = undefined; | ||
// Fall back to computed then un computed css if necessary | ||
cssBoxValue = getComputedStyleX(elem, name); | ||
if (cssBoxValue === null || cssBoxValue === undefined || Number(cssBoxValue) < 0) { | ||
cssBoxValue = elem.style[name] || 0; | ||
} // Normalize '', auto, and prepare for extra | ||
cssBoxValue = parseFloat(cssBoxValue) || 0; | ||
} | ||
// Normalize '', auto, and prepare for extra | ||
cssBoxValue = Math.floor(parseFloat(cssBoxValue)) || 0; | ||
} | ||
if (extra === undefined) { | ||
extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX; | ||
} | ||
var borderBoxValueOrIsBorderBox = borderBoxValue !== undefined || isBorderBox; | ||
var val = borderBoxValue || cssBoxValue; | ||
if (extra === CONTENT_INDEX) { | ||
@@ -717,3 +616,2 @@ if (borderBoxValueOrIsBorderBox) { | ||
} | ||
return cssBoxValue; | ||
@@ -724,9 +622,6 @@ } else if (borderBoxValueOrIsBorderBox) { | ||
} | ||
return val + (extra === PADDING_INDEX ? -getPBMWidth(elem, ['border'], which) : getPBMWidth(elem, ['margin'], which)); | ||
} | ||
return cssBoxValue + getPBMWidth(elem, BOX_MODELS.slice(extra), which); | ||
} | ||
var cssShow = { | ||
@@ -736,4 +631,5 @@ position: 'absolute', | ||
display: 'block' | ||
}; // fix #119 : https://github.com/kissyteam/kissy/issues/119 | ||
}; | ||
// fix #119 : https://github.com/kissyteam/kissy/issues/119 | ||
function getWHIgnoreDisplay() { | ||
@@ -743,7 +639,6 @@ for (var _len = arguments.length, args = new Array(_len), _key2 = 0; _key2 < _len; _key2++) { | ||
} | ||
var val; | ||
var elem = args[0]; // in case elem is window | ||
var elem = args[0]; | ||
// in case elem is window | ||
// elem.offsetWidth === undefined | ||
if (elem.offsetWidth !== 0) { | ||
@@ -756,36 +651,25 @@ val = getWH.apply(undefined, args); | ||
} | ||
return val; | ||
} | ||
each(['width', 'height'], function (name) { | ||
var first = name.charAt(0).toUpperCase() + name.slice(1); | ||
domUtils["outer".concat(first)] = function (el, includeMargin) { | ||
return el && getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX); | ||
}; | ||
var which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom']; | ||
domUtils[name] = function (elem, v) { | ||
var val = v; | ||
if (val !== undefined) { | ||
if (elem) { | ||
var isBorderBox = isBorderBoxFn(elem); | ||
if (isBorderBox) { | ||
val += getPBMWidth(elem, ['padding', 'border'], which); | ||
} | ||
return css(elem, name, val); | ||
} | ||
return undefined; | ||
} | ||
return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX); | ||
}; | ||
}); | ||
function mix(to, from) { | ||
@@ -797,6 +681,4 @@ for (var i in from) { | ||
} | ||
return to; | ||
} | ||
var utils = { | ||
@@ -807,3 +689,2 @@ getWindow: function getWindow(node) { | ||
} | ||
var doc = node.ownerDocument || node; | ||
@@ -826,3 +707,2 @@ return doc.defaultView || doc.parentWindow; | ||
var ret = {}; | ||
for (i in obj) { | ||
@@ -833,5 +713,3 @@ if (obj.hasOwnProperty(i)) { | ||
} | ||
var overflow = obj.overflow; | ||
if (overflow) { | ||
@@ -844,3 +722,2 @@ for (i in obj) { | ||
} | ||
return ret; | ||
@@ -857,7 +734,5 @@ }, | ||
var ret = {}; | ||
for (var i = 0; i < arguments.length; i++) { | ||
utils.mix(ret, i < 0 || arguments.length <= i ? undefined : arguments[i]); | ||
} | ||
return ret; | ||
@@ -873,10 +748,8 @@ }, | ||
*/ | ||
var getParent = utils.getParent; | ||
function getOffsetParent(element) { | ||
if (utils.isWindow(element) || element.nodeType === 9) { | ||
return null; | ||
} // ie 这个也不是完全可行 | ||
} | ||
// ie 这个也不是完全可行 | ||
/* | ||
@@ -896,4 +769,2 @@ <div style="width: 50px;height: 100px;overflow: hidden"> | ||
// 统一的 offsetParent 方法 | ||
var doc = utils.getDocument(element); | ||
@@ -904,10 +775,7 @@ var body = doc.body; | ||
var skipStatic = positionStyle === 'fixed' || positionStyle === 'absolute'; | ||
if (!skipStatic) { | ||
return element.nodeName.toLowerCase() === 'html' ? null : getParent(element); | ||
} | ||
for (parent = getParent(element); parent && parent !== body && parent.nodeType !== 9; parent = getParent(parent)) { | ||
positionStyle = utils.css(parent, 'position'); | ||
if (positionStyle !== 'static') { | ||
@@ -917,3 +785,2 @@ return parent; | ||
} | ||
return null; | ||
@@ -927,11 +794,9 @@ } | ||
} | ||
var doc = utils.getDocument(element); | ||
var body = doc.body; | ||
var parent = null; | ||
for (parent = getParent$1(element); // 修复元素位于 document.documentElement 下导致崩溃问题 | ||
for (parent = getParent$1(element); | ||
// 修复元素位于 document.documentElement 下导致崩溃问题 | ||
parent && parent !== body && parent !== doc; parent = getParent$1(parent)) { | ||
var positionStyle = utils.css(parent, 'position'); | ||
if (positionStyle === 'fixed') { | ||
@@ -941,3 +806,2 @@ return true; | ||
} | ||
return false; | ||
@@ -949,3 +813,2 @@ } | ||
*/ | ||
function getVisibleRectForElement(element, alwaysByViewport) { | ||
@@ -962,17 +825,20 @@ var visibleRect = { | ||
var body = doc.body; | ||
var documentElement = doc.documentElement; // Determine the size of the visible rect by climbing the dom accounting for | ||
var documentElement = doc.documentElement; | ||
// Determine the size of the visible rect by climbing the dom accounting for | ||
// all scrollable containers. | ||
while (el) { | ||
// clientWidth is zero for inline block elements in ie. | ||
if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) && // body may have overflow set on it, yet we still get the entire | ||
if ((navigator.userAgent.indexOf('MSIE') === -1 || el.clientWidth !== 0) && | ||
// body may have overflow set on it, yet we still get the entire | ||
// viewport. In some browsers, el.offsetParent may be | ||
// document.documentElement, so check for that too. | ||
el !== body && el !== documentElement && utils.css(el, 'overflow') !== 'visible') { | ||
var pos = utils.offset(el); // add border | ||
var pos = utils.offset(el); | ||
// add border | ||
pos.left += el.clientLeft; | ||
pos.top += el.clientTop; | ||
visibleRect.top = Math.max(visibleRect.top, pos.top); | ||
visibleRect.right = Math.min(visibleRect.right, // consider area without scrollBar | ||
visibleRect.right = Math.min(visibleRect.right, | ||
// consider area without scrollBar | ||
pos.left + el.clientWidth); | ||
@@ -984,15 +850,12 @@ visibleRect.bottom = Math.min(visibleRect.bottom, pos.top + el.clientHeight); | ||
} | ||
el = getOffsetParent(el); | ||
} | ||
el = getOffsetParent(el); | ||
} // Set element position to fixed | ||
// Set element position to fixed | ||
// make sure absolute element itself don't affect it's visible area | ||
// https://github.com/ant-design/ant-design/issues/7601 | ||
var originalPosition = null; | ||
if (!utils.isWindow(element) && element.nodeType !== 9) { | ||
originalPosition = element.style.position; | ||
var position = utils.css(element, 'position'); | ||
if (position === 'absolute') { | ||
@@ -1002,3 +865,2 @@ element.style.position = 'fixed'; | ||
} | ||
var scrollX = utils.getWindowScrollLeft(win); | ||
@@ -1009,20 +871,18 @@ var scrollY = utils.getWindowScrollTop(win); | ||
var documentWidth = documentElement.scrollWidth; | ||
var documentHeight = documentElement.scrollHeight; // scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX. | ||
var documentHeight = documentElement.scrollHeight; | ||
// scrollXXX on html is sync with body which means overflow: hidden on body gets wrong scrollXXX. | ||
// We should cut this ourself. | ||
var bodyStyle = window.getComputedStyle(body); | ||
if (bodyStyle.overflowX === 'hidden') { | ||
documentWidth = win.innerWidth; | ||
} | ||
if (bodyStyle.overflowY === 'hidden') { | ||
documentHeight = win.innerHeight; | ||
} // Reset element position after calculate the visible area | ||
} | ||
// Reset element position after calculate the visible area | ||
if (element.style) { | ||
element.style.position = originalPosition; | ||
} | ||
if (alwaysByViewport || isAncestorFixed(element)) { | ||
@@ -1041,3 +901,2 @@ // Clip by viewport's size. | ||
} | ||
return visibleRect.top >= 0 && visibleRect.left >= 0 && visibleRect.bottom > visibleRect.top && visibleRect.right > visibleRect.left ? visibleRect : null; | ||
@@ -1052,29 +911,28 @@ } | ||
}; | ||
if (overflow.adjustX && pos.left < visibleRect.left) { | ||
pos.left = visibleRect.left; | ||
} // Left edge inside and right edge outside viewport, try to resize it. | ||
} | ||
// Left edge inside and right edge outside viewport, try to resize it. | ||
if (overflow.resizeWidth && pos.left >= visibleRect.left && pos.left + size.width > visibleRect.right) { | ||
size.width -= pos.left + size.width - visibleRect.right; | ||
} // Right edge outside viewport, try to move it. | ||
} | ||
// Right edge outside viewport, try to move it. | ||
if (overflow.adjustX && pos.left + size.width > visibleRect.right) { | ||
// 保证左边界和可视区域左边界对齐 | ||
pos.left = Math.max(visibleRect.right - size.width, visibleRect.left); | ||
} // Top edge outside viewport, try to move it. | ||
} | ||
// Top edge outside viewport, try to move it. | ||
if (overflow.adjustY && pos.top < visibleRect.top) { | ||
pos.top = visibleRect.top; | ||
} // Top edge inside and bottom edge outside viewport, try to resize it. | ||
} | ||
// Top edge inside and bottom edge outside viewport, try to resize it. | ||
if (overflow.resizeHeight && pos.top >= visibleRect.top && pos.top + size.height > visibleRect.bottom) { | ||
size.height -= pos.top + size.height - visibleRect.bottom; | ||
} // Bottom edge outside viewport, try to move it. | ||
} | ||
// Bottom edge outside viewport, try to move it. | ||
if (overflow.adjustY && pos.top + size.height > visibleRect.bottom) { | ||
@@ -1084,3 +942,2 @@ // 保证上边界和可视区域上边界对齐 | ||
} | ||
return utils.mix(pos, size); | ||
@@ -1093,3 +950,2 @@ } | ||
var h; | ||
if (!utils.isWindow(node) && node.nodeType !== 9) { | ||
@@ -1108,3 +964,2 @@ offset = utils.offset(node); | ||
} | ||
offset.width = w; | ||
@@ -1118,2 +973,3 @@ offset.height = h; | ||
*/ | ||
function getAlignOffset(region, align) { | ||
@@ -1126,3 +982,2 @@ var V = align.charAt(0); | ||
var y = region.top; | ||
if (V === 'c') { | ||
@@ -1133,3 +988,2 @@ y += h / 2; | ||
} | ||
if (H === 'c') { | ||
@@ -1140,3 +994,2 @@ x += w / 2; | ||
} | ||
return { | ||
@@ -1163,18 +1016,16 @@ left: x, | ||
// http://yiminghe.iteye.com/blog/1124720 | ||
function isFailX(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.left < visibleRect.left || elFuturePos.left + elRegion.width > visibleRect.right; | ||
} | ||
function isFailY(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.top < visibleRect.top || elFuturePos.top + elRegion.height > visibleRect.bottom; | ||
} | ||
function isCompleteFailX(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.left > visibleRect.right || elFuturePos.left + elRegion.width < visibleRect.left; | ||
} | ||
function isCompleteFailY(elFuturePos, elRegion, visibleRect) { | ||
return elFuturePos.top > visibleRect.bottom || elFuturePos.top + elRegion.height < visibleRect.top; | ||
} | ||
function flip(points, reg, map) { | ||
@@ -1189,3 +1040,2 @@ var ret = []; | ||
} | ||
function flipOffset(offset, index) { | ||
@@ -1195,6 +1045,4 @@ offset[index] = -offset[index]; | ||
} | ||
function convertOffset(str, offsetLen) { | ||
var n; | ||
if (/%$/.test(str)) { | ||
@@ -1205,6 +1053,4 @@ n = parseInt(str.substring(0, str.length - 1), 10) / 100 * offsetLen; | ||
} | ||
return n || 0; | ||
} | ||
function normalizeOffset(offset, el) { | ||
@@ -1214,2 +1060,3 @@ offset[0] = convertOffset(offset[0], el.width); | ||
} | ||
/** | ||
@@ -1220,4 +1067,2 @@ * @param el | ||
*/ | ||
function doAlign(el, tgtRegion, align, isTgtRegionVisible) { | ||
@@ -1234,15 +1079,16 @@ var points = align.points; | ||
var fail = 0; | ||
var alwaysByViewport = !!(overflow && overflow.alwaysByViewport); // 当前节点可以被放置的显示区域 | ||
var visibleRect = getVisibleRectForElement(source, alwaysByViewport); // 当前节点所占的区域, left/top/width/height | ||
var elRegion = getRegion(source); // 将 offset 转换成数值,支持百分比 | ||
var alwaysByViewport = !!(overflow && overflow.alwaysByViewport); | ||
// 当前节点可以被放置的显示区域 | ||
var visibleRect = getVisibleRectForElement(source, alwaysByViewport); | ||
// 当前节点所占的区域, left/top/width/height | ||
var elRegion = getRegion(source); | ||
// 将 offset 转换成数值,支持百分比 | ||
normalizeOffset(offset, elRegion); | ||
normalizeOffset(targetOffset, tgtRegion); // 当前节点将要被放置的位置 | ||
normalizeOffset(targetOffset, tgtRegion); | ||
// 当前节点将要被放置的位置 | ||
var elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset); | ||
// 当前节点将要所处的区域 | ||
var newElRegion = utils.merge(elRegion, elFuturePos); | ||
var elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset); // 当前节点将要所处的区域 | ||
var newElRegion = utils.merge(elRegion, elFuturePos); // 如果可视区域不能完全放置当前节点时允许调整 | ||
// 如果可视区域不能完全放置当前节点时允许调整 | ||
if (visibleRect && (overflow.adjustX || overflow.adjustY) && isTgtRegionVisible) { | ||
@@ -1256,8 +1102,7 @@ if (overflow.adjustX) { | ||
r: 'l' | ||
}); // 偏移量也反下 | ||
}); | ||
// 偏移量也反下 | ||
var newOffset = flipOffset(offset, 0); | ||
var newTargetOffset = flipOffset(targetOffset, 0); | ||
var newElFuturePos = getElFuturePos(elRegion, tgtRegion, newPoints, newOffset, newTargetOffset); | ||
if (!isCompleteFailX(newElFuturePos, elRegion, visibleRect)) { | ||
@@ -1271,3 +1116,2 @@ fail = 1; | ||
} | ||
if (overflow.adjustY) { | ||
@@ -1280,11 +1124,7 @@ // 如果纵向不能放下 | ||
b: 't' | ||
}); // 偏移量也反下 | ||
}); | ||
// 偏移量也反下 | ||
var _newOffset = flipOffset(offset, 1); | ||
var _newTargetOffset = flipOffset(targetOffset, 1); | ||
var _newElFuturePos = getElFuturePos(elRegion, tgtRegion, _newPoints, _newOffset, _newTargetOffset); | ||
if (!isCompleteFailY(_newElFuturePos, elRegion, visibleRect)) { | ||
@@ -1297,5 +1137,5 @@ fail = 1; | ||
} | ||
} // 如果失败,重新计算当前节点将要被放置的位置 | ||
} | ||
// 如果失败,重新计算当前节点将要被放置的位置 | ||
if (fail) { | ||
@@ -1305,10 +1145,10 @@ elFuturePos = getElFuturePos(elRegion, tgtRegion, points, offset, targetOffset); | ||
} | ||
var isStillFailX = isFailX(elFuturePos, elRegion, visibleRect); | ||
var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect); // 检查反下后的位置是否可以放下了,如果仍然放不下: | ||
var isStillFailY = isFailY(elFuturePos, elRegion, visibleRect); | ||
// 检查反下后的位置是否可以放下了,如果仍然放不下: | ||
// 1. 复原修改过的定位参数 | ||
if (isStillFailX || isStillFailY) { | ||
var _newPoints2 = points; // 重置对应部分的翻转逻辑 | ||
var _newPoints2 = points; | ||
// 重置对应部分的翻转逻辑 | ||
if (isStillFailX) { | ||
@@ -1320,3 +1160,2 @@ _newPoints2 = flip(points, /[lr]/gi, { | ||
} | ||
if (isStillFailY) { | ||
@@ -1328,29 +1167,27 @@ _newPoints2 = flip(points, /[tb]/gi, { | ||
} | ||
points = _newPoints2; | ||
offset = align.offset || [0, 0]; | ||
targetOffset = align.targetOffset || [0, 0]; | ||
} // 2. 只有指定了可以调整当前方向才调整 | ||
} | ||
// 2. 只有指定了可以调整当前方向才调整 | ||
newOverflowCfg.adjustX = overflow.adjustX && isStillFailX; | ||
newOverflowCfg.adjustY = overflow.adjustY && isStillFailY; // 确实要调整,甚至可能会调整高度宽度 | ||
newOverflowCfg.adjustY = overflow.adjustY && isStillFailY; | ||
// 确实要调整,甚至可能会调整高度宽度 | ||
if (newOverflowCfg.adjustX || newOverflowCfg.adjustY) { | ||
newElRegion = adjustForViewport(elFuturePos, elRegion, visibleRect, newOverflowCfg); | ||
} | ||
} // need judge to in case set fixed with in css on height auto element | ||
} | ||
// need judge to in case set fixed with in css on height auto element | ||
if (newElRegion.width !== elRegion.width) { | ||
utils.css(source, 'width', utils.width(source) + newElRegion.width - elRegion.width); | ||
} | ||
if (newElRegion.height !== elRegion.height) { | ||
utils.css(source, 'height', utils.height(source) + newElRegion.height - elRegion.height); | ||
} // https://github.com/kissyteam/kissy/issues/190 | ||
} | ||
// https://github.com/kissyteam/kissy/issues/190 | ||
// 相对于屏幕位置没变,而 left/top 变了 | ||
// 例如 <div 'relative'><el absolute></div> | ||
utils.offset(source, { | ||
@@ -1386,3 +1223,2 @@ left: newElRegion.left, | ||
} | ||
function alignElement(el, refNode, align) { | ||
@@ -1394,3 +1230,2 @@ var target = align.target || refNode; | ||
} | ||
alignElement.__getOffsetParent = getOffsetParent; | ||
@@ -1413,3 +1248,2 @@ alignElement.__getVisibleRectForElement = getVisibleRectForElement; | ||
var viewportHeight = utils.viewportHeight(win); | ||
if ('pageX' in tgtPoint) { | ||
@@ -1420,3 +1254,2 @@ pageX = tgtPoint.pageX; | ||
} | ||
if ('pageY' in tgtPoint) { | ||
@@ -1427,3 +1260,2 @@ pageY = tgtPoint.pageY; | ||
} | ||
var tgtRegion = { | ||
@@ -1435,4 +1267,5 @@ left: pageX, | ||
}; | ||
var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight; // Provide default target point | ||
var pointInView = pageX >= 0 && pageX <= scrollX + viewportWidth && pageY >= 0 && pageY <= scrollY + viewportHeight; | ||
// Provide default target point | ||
var points = [align.points[0], 'cc']; | ||
@@ -1439,0 +1272,0 @@ return doAlign(el, tgtRegion, _objectSpread2(_objectSpread2({}, align), {}, { |
{ | ||
"name": "dom-align", | ||
"description": "Align DOM Node Flexibly ", | ||
"version": "1.12.3", | ||
"version": "1.12.4", | ||
"license": "MIT", | ||
"files": [ | ||
"dist-*/", | ||
"bin/" | ||
], | ||
"pika": true, | ||
@@ -11,0 +7,0 @@ "sideEffects": false, |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
2248
245555