{"version":3,"file":"index.js","sources":["../../src/util.js","../../src/index.js"],"sourcesContent":["const RE_NUM = /[\\-+]?(?:\\d*\\.|)\\d+(?:[eE][\\-+]?\\d+|)/.source;\n\nfunction getClientPosition(elem) {\n  let box;\n  let x;\n  let y;\n  const doc = elem.ownerDocument;\n  const body = doc.body;\n  const docElem = doc && doc.documentElement;\n  // 根据 GBS 最新数据,A-Grade Browsers 都已支持 getBoundingClientRect 方法,不用再考虑传统的实现方式\n  box = elem.getBoundingClientRect();\n\n  // 注:jQuery 还考虑减去 docElem.clientLeft/clientTop\n  // 但测试发现,这样反而会导致当 html 和 body 有边距/边框样式时,获取的值不正确\n  // 此外,ie6 会忽略 html 的 margin 值,幸运地是没有谁会去设置 html 的 margin\n\n  x = box.left;\n  y = box.top;\n\n  // In IE, most of the time, 2 extra pixels are added to the top and left\n  // due to the implicit 2-pixel inset border.  In IE6/7 quirks mode and\n  // IE6 standards mode, this border can be overridden by setting the\n  // document element's border to zero -- thus, we cannot rely on the\n  // offset always being 2 pixels.\n\n  // In quirks mode, the offset can be determined by querying the body's\n  // clientLeft/clientTop, but in standards mode, it is found by querying\n  // the document element's clientLeft/clientTop.  Since we already called\n  // getClientBoundingRect we have already forced a reflow, so it is not\n  // too expensive just to query them all.\n\n  // ie 下应该减去窗口的边框吧,毕竟默认 absolute 都是相对窗口定位的\n  // 窗口边框标准是设 documentElement ,quirks 时设置 body\n  // 最好禁止在 body 和 html 上边框 ,但 ie < 9 html 默认有 2px ,减去\n  // 但是非 ie 不可能设置窗口边框,body html 也不是窗口 ,ie 可以通过 html,body 设置\n  // 标准 ie 下 docElem.clientTop 就是 border-top\n  // ie7 html 即窗口边框改变不了。永远为 2\n  // 但标准 firefox/chrome/ie9 下 docElem.clientTop 是窗口边框,即使设了 border-top 也为 0\n\n  x -= docElem.clientLeft || body.clientLeft || 0;\n  y -= docElem.clientTop || body.clientTop || 0;\n\n  return {\n    left: x,\n    top: y,\n  };\n}\n\nfunction getScroll(w, top) {\n  let ret = w[`page${top ? 'Y' : 'X'}Offset`];\n  const method = `scroll${top ? 'Top' : 'Left'}`;\n  if (typeof ret !== 'number') {\n    const d = w.document;\n    // ie6,7,8 standard mode\n    ret = d.documentElement[method];\n    if (typeof ret !== 'number') {\n      // quirks mode\n      ret = d.body[method];\n    }\n  }\n  return ret;\n}\n\nfunction getScrollLeft(w) {\n  return getScroll(w);\n}\n\nfunction getScrollTop(w) {\n  return getScroll(w, true);\n}\n\nfunction getOffset(el) {\n  const pos = getClientPosition(el);\n  const doc = el.ownerDocument;\n  const w = doc.defaultView || doc.parentWindow;\n  pos.left += getScrollLeft(w);\n  pos.top += getScrollTop(w);\n  return pos;\n}\nfunction _getComputedStyle(elem, name, computedStyle_) {\n  let val = '';\n  const d = elem.ownerDocument;\n  const computedStyle =\n    computedStyle_ || d.defaultView.getComputedStyle(elem, null);\n\n  // https://github.com/kissyteam/kissy/issues/61\n  if (computedStyle) {\n    val = computedStyle.getPropertyValue(name) || computedStyle[name];\n  }\n\n  return val;\n}\n\nconst _RE_NUM_NO_PX = new RegExp(`^(${RE_NUM})(?!px)[a-z%]+$`, 'i');\nconst RE_POS = /^(top|right|bottom|left)$/;\nconst CURRENT_STYLE = 'currentStyle';\nconst RUNTIME_STYLE = 'runtimeStyle';\nconst LEFT = 'left';\nconst PX = 'px';\n\nfunction _getComputedStyleIE(elem, name) {\n  // currentStyle maybe null\n  // http://msdn.microsoft.com/en-us/library/ms535231.aspx\n  let ret = elem[CURRENT_STYLE] && elem[CURRENT_STYLE][name];\n\n  // 当 width/height 设置为百分比时,通过 pixelLeft 方式转换的 width/height 值\n  // 一开始就处理了! CUSTOM_STYLE.height,CUSTOM_STYLE.width ,cssHook 解决@2011-08-19\n  // 在 ie 下不对,需要直接用 offset 方式\n  // borderWidth 等值也有问题,但考虑到 borderWidth 设为百分比的概率很小,这里就不考虑了\n\n  // From the awesome hack by Dean Edwards\n  // http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n  // If we're not dealing with a regular pixel number\n  // but a number that has a weird ending, we need to convert it to pixels\n  // exclude left right for relativity\n  if (_RE_NUM_NO_PX.test(ret) && !RE_POS.test(name)) {\n    // Remember the original values\n    const style = elem.style;\n    const left = style[LEFT];\n    const rsLeft = elem[RUNTIME_STYLE][LEFT];\n\n    // prevent flashing of content\n    elem[RUNTIME_STYLE][LEFT] = elem[CURRENT_STYLE][LEFT];\n\n    // Put in the new values to get a computed value out\n    style[LEFT] = name === 'fontSize' ? '1em' : ret || 0;\n    ret = style.pixelLeft + PX;\n\n    // Revert the changed values\n    style[LEFT] = left;\n\n    elem[RUNTIME_STYLE][LEFT] = rsLeft;\n  }\n  return ret === '' ? 'auto' : ret;\n}\n\nlet getComputedStyleX;\nif (typeof window !== 'undefined') {\n  getComputedStyleX = window.getComputedStyle\n    ? _getComputedStyle\n    : _getComputedStyleIE;\n}\n\nfunction each(arr, fn) {\n  for (let i = 0; i < arr.length; i++) {\n    fn(arr[i]);\n  }\n}\n\nfunction isBorderBoxFn(elem) {\n  return getComputedStyleX(elem, 'boxSizing') === 'border-box';\n}\n\nconst BOX_MODELS = ['margin', 'border', 'padding'];\nconst CONTENT_INDEX = -1;\nconst PADDING_INDEX = 2;\nconst BORDER_INDEX = 1;\nconst MARGIN_INDEX = 0;\n\nfunction swap(elem, options, callback) {\n  const old = {};\n  const style = elem.style;\n  let name;\n\n  // Remember the old values, and insert the new ones\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      old[name] = style[name];\n      style[name] = options[name];\n    }\n  }\n\n  callback.call(elem);\n\n  // Revert the old values\n  for (name in options) {\n    if (options.hasOwnProperty(name)) {\n      style[name] = old[name];\n    }\n  }\n}\n\nfunction getPBMWidth(elem, props, which) {\n  let value = 0;\n  let prop;\n  let j;\n  let i;\n  for (j = 0; j < props.length; j++) {\n    prop = props[j];\n    if (prop) {\n      for (i = 0; i < which.length; i++) {\n        let cssProp;\n        if (prop === 'border') {\n          cssProp = `${prop + which[i]}Width`;\n        } else {\n          cssProp = prop + which[i];\n        }\n        value += parseFloat(getComputedStyleX(elem, cssProp)) || 0;\n      }\n    }\n  }\n  return value;\n}\n\n/**\n * A crude way of determining if an object is a window\n * @member util\n */\nfunction isWindow(obj) {\n  // must use == for ie8\n  /* eslint eqeqeq:0 */\n  return obj != null && obj == obj.window;\n}\n\nconst domUtils = {};\n\neach(['Width', 'Height'], name => {\n  domUtils[`doc${name}`] = refWin => {\n    const d = refWin.document;\n    return Math.max(\n      // firefox chrome documentElement.scrollHeight< body.scrollHeight\n      // ie standard mode : documentElement.scrollHeight> body.scrollHeight\n      d.documentElement[`scroll${name}`],\n      // quirks : documentElement.scrollHeight 最大等于可视窗口多一点?\n      d.body[`scroll${name}`],\n      domUtils[`viewport${name}`](d),\n    );\n  };\n\n  domUtils[`viewport${name}`] = win => {\n    // pc browser includes scrollbar in window.innerWidth\n    const prop = `client${name}`;\n    const doc = win.document;\n    const body = doc.body;\n    const documentElement = doc.documentElement;\n    const documentElementProp = documentElement[prop];\n    // 标准模式取 documentElement\n    // backcompat 取 body\n    return (\n      (doc.compatMode === 'CSS1Compat' && documentElementProp) ||\n      (body && body[prop]) ||\n      documentElementProp\n    );\n  };\n});\n\n/*\n 得到元素的大小信息\n @param elem\n @param name\n @param {String} [extra]  'padding' : (css width) + padding\n 'border' : (css width) + padding + border\n 'margin' : (css width) + padding + border + margin\n */\nfunction getWH(elem, name, extra) {\n  if (isWindow(elem)) {\n    return name === 'width'\n      ? domUtils.viewportWidth(elem)\n      : domUtils.viewportHeight(elem);\n  } else if (elem.nodeType === 9) {\n    return name === 'width'\n      ? domUtils.docWidth(elem)\n      : domUtils.docHeight(elem);\n  }\n  const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n  let borderBoxValue = name === 'width' ? elem.offsetWidth : elem.offsetHeight;\n  const computedStyle = getComputedStyleX(elem);\n  const isBorderBox = isBorderBoxFn(elem, computedStyle);\n  let cssBoxValue = 0;\n  if (borderBoxValue == null || borderBoxValue <= 0) {\n    borderBoxValue = undefined;\n    // Fall back to computed then un computed css if necessary\n    cssBoxValue = getComputedStyleX(elem, name);\n    if (cssBoxValue == null || Number(cssBoxValue) < 0) {\n      cssBoxValue = elem.style[name] || 0;\n    }\n    // Normalize '', auto, and prepare for extra\n    cssBoxValue = parseFloat(cssBoxValue) || 0;\n  }\n  if (extra === undefined) {\n    extra = isBorderBox ? BORDER_INDEX : CONTENT_INDEX;\n  }\n  const borderBoxValueOrIsBorderBox =\n    borderBoxValue !== undefined || isBorderBox;\n  const val = borderBoxValue || cssBoxValue;\n  if (extra === CONTENT_INDEX) {\n    if (borderBoxValueOrIsBorderBox) {\n      return (\n        val - getPBMWidth(elem, ['border', 'padding'], which, computedStyle)\n      );\n    }\n    return cssBoxValue;\n  }\n  if (borderBoxValueOrIsBorderBox) {\n    const padding =\n      extra === PADDING_INDEX\n        ? -getPBMWidth(elem, ['border'], which, computedStyle)\n        : getPBMWidth(elem, ['margin'], which, computedStyle);\n    return val + (extra === BORDER_INDEX ? 0 : padding);\n  }\n  return (\n    cssBoxValue +\n    getPBMWidth(elem, BOX_MODELS.slice(extra), which, computedStyle)\n  );\n}\n\nconst cssShow = {\n  position: 'absolute',\n  visibility: 'hidden',\n  display: 'block',\n};\n\n// fix #119 : https://github.com/kissyteam/kissy/issues/119\nfunction getWHIgnoreDisplay(elem) {\n  let val;\n  const args = arguments;\n  // in case elem is window\n  // elem.offsetWidth === undefined\n  if (elem.offsetWidth !== 0) {\n    val = getWH.apply(undefined, args);\n  } else {\n    swap(elem, cssShow, () => {\n      val = getWH.apply(undefined, args);\n    });\n  }\n  return val;\n}\n\nfunction css(el, name, v) {\n  let value = v;\n  if (typeof name === 'object') {\n    for (const i in name) {\n      if (name.hasOwnProperty(i)) {\n        css(el, i, name[i]);\n      }\n    }\n    return undefined;\n  }\n  if (typeof value !== 'undefined') {\n    if (typeof value === 'number') {\n      value += 'px';\n    }\n    el.style[name] = value;\n    return undefined;\n  }\n  return getComputedStyleX(el, name);\n}\n\neach(['width', 'height'], name => {\n  const first = name.charAt(0).toUpperCase() + name.slice(1);\n  domUtils[`outer${first}`] = (el, includeMargin) => {\n    return (\n      el &&\n      getWHIgnoreDisplay(el, name, includeMargin ? MARGIN_INDEX : BORDER_INDEX)\n    );\n  };\n  const which = name === 'width' ? ['Left', 'Right'] : ['Top', 'Bottom'];\n\n  domUtils[name] = (elem, val) => {\n    if (val !== undefined) {\n      if (elem) {\n        const computedStyle = getComputedStyleX(elem);\n        const isBorderBox = isBorderBoxFn(elem);\n        if (isBorderBox) {\n          val += getPBMWidth(elem, ['padding', 'border'], which, computedStyle);\n        }\n        return css(elem, name, val);\n      }\n      return undefined;\n    }\n    return elem && getWHIgnoreDisplay(elem, name, CONTENT_INDEX);\n  };\n});\n\n// 设置 elem 相对 elem.ownerDocument 的坐标\nfunction setOffset(elem, offset) {\n  // set position first, in-case top/left are set even on static elem\n  if (css(elem, 'position') === 'static') {\n    elem.style.position = 'relative';\n  }\n\n  const old = getOffset(elem);\n  const ret = {};\n  let current;\n  let key;\n\n  for (key in offset) {\n    if (offset.hasOwnProperty(key)) {\n      current = parseFloat(css(elem, key)) || 0;\n      ret[key] = current + offset[key] - old[key];\n    }\n  }\n  css(elem, ret);\n}\n\nexport default {\n  getWindow(node) {\n    const doc = node.ownerDocument || node;\n    return doc.defaultView || doc.parentWindow;\n  },\n  offset(el, value) {\n    if (typeof value !== 'undefined') {\n      setOffset(el, value);\n    } else {\n      return getOffset(el);\n    }\n  },\n  isWindow,\n  each,\n  css,\n  clone(obj) {\n    const ret = {};\n    for (const i in obj) {\n      if (obj.hasOwnProperty(i)) {\n        ret[i] = obj[i];\n      }\n    }\n    const overflow = obj.overflow;\n    if (overflow) {\n      for (const i in obj) {\n        if (obj.hasOwnProperty(i)) {\n          ret.overflow[i] = obj.overflow[i];\n        }\n      }\n    }\n    return ret;\n  },\n  scrollLeft(w, v) {\n    if (isWindow(w)) {\n      if (v === undefined) {\n        return getScrollLeft(w);\n      }\n      window.scrollTo(v, getScrollTop(w));\n    } else {\n      if (v === undefined) {\n        return w.scrollLeft;\n      }\n      w.scrollLeft = v;\n    }\n  },\n  scrollTop(w, v) {\n    if (isWindow(w)) {\n      if (v === undefined) {\n        return getScrollTop(w);\n      }\n      window.scrollTo(getScrollLeft(w), v);\n    } else {\n      if (v === undefined) {\n        return w.scrollTop;\n      }\n      w.scrollTop = v;\n    }\n  },\n  viewportWidth: 0,\n  viewportHeight: 0,\n  ...domUtils,\n};\n","import util from './util';\n\nfunction scrollIntoView(elem, container, config) {\n  config = config || {};\n  // document 归一化到 window\n  if (container.nodeType === 9) {\n    container = util.getWindow(container);\n  }\n\n  let allowHorizontalScroll = config.allowHorizontalScroll;\n  const onlyScrollIfNeeded = config.onlyScrollIfNeeded;\n  let alignWithTop = config.alignWithTop;\n  let alignWithLeft = config.alignWithLeft;\n  const offsetTop = config.offsetTop || 0;\n  const offsetLeft = config.offsetLeft || 0;\n  const offsetBottom = config.offsetBottom || 0;\n  const offsetRight = config.offsetRight || 0;\n\n  allowHorizontalScroll =\n    allowHorizontalScroll === undefined ? true : allowHorizontalScroll;\n\n  const isWin = util.isWindow(container);\n  const elemOffset = util.offset(elem);\n  const eh = util.outerHeight(elem);\n  const ew = util.outerWidth(elem);\n  let containerOffset;\n  let ch;\n  let cw;\n  let containerScroll;\n  let diffTop;\n  let diffBottom;\n  let win;\n  let winScroll;\n  let ww;\n  let wh;\n\n  if (isWin) {\n    win = container;\n    wh = util.height(win);\n    ww = util.width(win);\n    winScroll = {\n      left: util.scrollLeft(win),\n      top: util.scrollTop(win),\n    };\n    // elem 相对 container 可视视窗的距离\n    diffTop = {\n      left: elemOffset.left - winScroll.left - offsetLeft,\n      top: elemOffset.top - winScroll.top - offsetTop,\n    };\n    diffBottom = {\n      left: elemOffset.left + ew - (winScroll.left + ww) + offsetRight,\n      top: elemOffset.top + eh - (winScroll.top + wh) + offsetBottom,\n    };\n    containerScroll = winScroll;\n  } else {\n    containerOffset = util.offset(container);\n    ch = container.clientHeight;\n    cw = container.clientWidth;\n    containerScroll = {\n      left: container.scrollLeft,\n      top: container.scrollTop,\n    };\n    // elem 相对 container 可视视窗的距离\n    // 注意边框, offset 是边框到根节点\n    diffTop = {\n      left:\n        elemOffset.left -\n        (containerOffset.left +\n          (parseFloat(util.css(container, 'borderLeftWidth')) || 0)) -\n        offsetLeft,\n      top:\n        elemOffset.top -\n        (containerOffset.top +\n          (parseFloat(util.css(container, 'borderTopWidth')) || 0)) -\n        offsetTop,\n    };\n    diffBottom = {\n      left:\n        elemOffset.left +\n        ew -\n        (containerOffset.left +\n          cw +\n          (parseFloat(util.css(container, 'borderRightWidth')) || 0)) +\n        offsetRight,\n      top:\n        elemOffset.top +\n        eh -\n        (containerOffset.top +\n          ch +\n          (parseFloat(util.css(container, 'borderBottomWidth')) || 0)) +\n        offsetBottom,\n    };\n  }\n\n  if (diffTop.top < 0 || diffBottom.top > 0) {\n    // 强制向上\n    if (alignWithTop === true) {\n      util.scrollTop(container, containerScroll.top + diffTop.top);\n    } else if (alignWithTop === false) {\n      util.scrollTop(container, containerScroll.top + diffBottom.top);\n    } else {\n      // 自动调整\n      if (diffTop.top < 0) {\n        util.scrollTop(container, containerScroll.top + diffTop.top);\n      } else {\n        util.scrollTop(container, containerScroll.top + diffBottom.top);\n      }\n    }\n  } else {\n    if (!onlyScrollIfNeeded) {\n      alignWithTop = alignWithTop === undefined ? true : !!alignWithTop;\n      if (alignWithTop) {\n        util.scrollTop(container, containerScroll.top + diffTop.top);\n      } else {\n        util.scrollTop(container, containerScroll.top + diffBottom.top);\n      }\n    }\n  }\n\n  if (allowHorizontalScroll) {\n    if (diffTop.left < 0 || diffBottom.left > 0) {\n      // 强制向上\n      if (alignWithLeft === true) {\n        util.scrollLeft(container, containerScroll.left + diffTop.left);\n      } else if (alignWithLeft === false) {\n        util.scrollLeft(container, containerScroll.left + diffBottom.left);\n      } else {\n        // 自动调整\n        if (diffTop.left < 0) {\n          util.scrollLeft(container, containerScroll.left + diffTop.left);\n        } else {\n          util.scrollLeft(container, containerScroll.left + diffBottom.left);\n        }\n      }\n    } else {\n      if (!onlyScrollIfNeeded) {\n        alignWithLeft = alignWithLeft === undefined ? true : !!alignWithLeft;\n        if (alignWithLeft) {\n          util.scrollLeft(container, containerScroll.left + diffTop.left);\n        } else {\n          util.scrollLeft(container, containerScroll.left + diffBottom.left);\n        }\n      }\n    }\n  }\n}\n\nexport default scrollIntoView;\n"],"names":["RE_NUM","source","getClientPosition","elem","box","x","y","doc","ownerDocument","body","docElem","documentElement","getBoundingClientRect","left","top","clientLeft","clientTop","getScroll","w","ret","method","d","document","getScrollLeft","getScrollTop","getOffset","el","pos","defaultView","parentWindow","_getComputedStyle","name","computedStyle_","val","computedStyle","getComputedStyle","getPropertyValue","_RE_NUM_NO_PX","RegExp","RE_POS","CURRENT_STYLE","RUNTIME_STYLE","LEFT","PX","_getComputedStyleIE","test","style","rsLeft","pixelLeft","getComputedStyleX","window","each","arr","fn","i","length","isBorderBoxFn","BOX_MODELS","CONTENT_INDEX","PADDING_INDEX","BORDER_INDEX","MARGIN_INDEX","swap","options","callback","old","hasOwnProperty","call","getPBMWidth","props","which","value","prop","j","cssProp","parseFloat","isWindow","obj","domUtils","refWin","Math","max","win","documentElementProp","compatMode","getWH","extra","viewportWidth","viewportHeight","nodeType","docWidth","docHeight","borderBoxValue","offsetWidth","offsetHeight","isBorderBox","cssBoxValue","undefined","Number","borderBoxValueOrIsBorderBox","padding","slice","cssShow","position","visibility","display","getWHIgnoreDisplay","args","arguments","apply","css","v","first","charAt","toUpperCase","includeMargin","setOffset","offset","current","key","getWindow","node","clone","overflow","scrollLeft","scrollTo","scrollTop","scrollIntoView","container","config","util","allowHorizontalScroll","onlyScrollIfNeeded","alignWithTop","alignWithLeft","offsetTop","offsetLeft","offsetBottom","offsetRight","isWin","elemOffset","eh","outerHeight","ew","outerWidth","containerOffset","ch","cw","containerScroll","diffTop","diffBottom","winScroll","ww","wh","height","width","clientHeight","clientWidth"],"mappings":"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"}