| 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
  
 | 
  
 | 
/** 
 | 
 * AUTO-GENERATED FILE. DO NOT MODIFY. 
 | 
 */ 
 | 
  
 | 
/* 
 | 
* Licensed to the Apache Software Foundation (ASF) under one 
 | 
* or more contributor license agreements.  See the NOTICE file 
 | 
* distributed with this work for additional information 
 | 
* regarding copyright ownership.  The ASF licenses this file 
 | 
* to you under the Apache License, Version 2.0 (the 
 | 
* "License"); you may not use this file except in compliance 
 | 
* with the License.  You may obtain a copy of the License at 
 | 
* 
 | 
*   http://www.apache.org/licenses/LICENSE-2.0 
 | 
* 
 | 
* Unless required by applicable law or agreed to in writing, 
 | 
* software distributed under the License is distributed on an 
 | 
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
 | 
* KIND, either express or implied.  See the License for the 
 | 
* specific language governing permissions and limitations 
 | 
* under the License. 
 | 
*/ 
 | 
/** 
 | 
 * Calculate slider move result. 
 | 
 * Usage: 
 | 
 * (1) If both handle0 and handle1 are needed to be moved, set minSpan the same as 
 | 
 * maxSpan and the same as `Math.abs(handleEnd[1] - handleEnds[0])`. 
 | 
 * (2) If handle0 is forbidden to cross handle1, set minSpan as `0`. 
 | 
 * 
 | 
 * @param delta Move length. 
 | 
 * @param handleEnds handleEnds[0] can be bigger then handleEnds[1]. 
 | 
 *              handleEnds will be modified in this method. 
 | 
 * @param extent handleEnds is restricted by extent. 
 | 
 *              extent[0] should less or equals than extent[1]. 
 | 
 * @param handleIndex Can be 'all', means that both move the two handleEnds. 
 | 
 * @param minSpan The range of dataZoom can not be smaller than that. 
 | 
 *              If not set, handle0 and cross handle1. If set as a non-negative 
 | 
 *              number (including `0`), handles will push each other when reaching 
 | 
 *              the minSpan. 
 | 
 * @param maxSpan The range of dataZoom can not be larger than that. 
 | 
 * @return The input handleEnds. 
 | 
 */ 
 | 
export default function sliderMove(delta, handleEnds, extent, handleIndex, minSpan, maxSpan) { 
 | 
  delta = delta || 0; 
 | 
  var extentSpan = extent[1] - extent[0]; 
 | 
  // Notice maxSpan and minSpan can be null/undefined. 
 | 
  if (minSpan != null) { 
 | 
    minSpan = restrict(minSpan, [0, extentSpan]); 
 | 
  } 
 | 
  if (maxSpan != null) { 
 | 
    maxSpan = Math.max(maxSpan, minSpan != null ? minSpan : 0); 
 | 
  } 
 | 
  if (handleIndex === 'all') { 
 | 
    var handleSpan = Math.abs(handleEnds[1] - handleEnds[0]); 
 | 
    handleSpan = restrict(handleSpan, [0, extentSpan]); 
 | 
    minSpan = maxSpan = restrict(handleSpan, [minSpan, maxSpan]); 
 | 
    handleIndex = 0; 
 | 
  } 
 | 
  handleEnds[0] = restrict(handleEnds[0], extent); 
 | 
  handleEnds[1] = restrict(handleEnds[1], extent); 
 | 
  var originalDistSign = getSpanSign(handleEnds, handleIndex); 
 | 
  handleEnds[handleIndex] += delta; 
 | 
  // Restrict in extent. 
 | 
  var extentMinSpan = minSpan || 0; 
 | 
  var realExtent = extent.slice(); 
 | 
  originalDistSign.sign < 0 ? realExtent[0] += extentMinSpan : realExtent[1] -= extentMinSpan; 
 | 
  handleEnds[handleIndex] = restrict(handleEnds[handleIndex], realExtent); 
 | 
  // Expand span. 
 | 
  var currDistSign; 
 | 
  currDistSign = getSpanSign(handleEnds, handleIndex); 
 | 
  if (minSpan != null && (currDistSign.sign !== originalDistSign.sign || currDistSign.span < minSpan)) { 
 | 
    // If minSpan exists, 'cross' is forbidden. 
 | 
    handleEnds[1 - handleIndex] = handleEnds[handleIndex] + originalDistSign.sign * minSpan; 
 | 
  } 
 | 
  // Shrink span. 
 | 
  currDistSign = getSpanSign(handleEnds, handleIndex); 
 | 
  if (maxSpan != null && currDistSign.span > maxSpan) { 
 | 
    handleEnds[1 - handleIndex] = handleEnds[handleIndex] + currDistSign.sign * maxSpan; 
 | 
  } 
 | 
  return handleEnds; 
 | 
} 
 | 
function getSpanSign(handleEnds, handleIndex) { 
 | 
  var dist = handleEnds[handleIndex] - handleEnds[1 - handleIndex]; 
 | 
  // If `handleEnds[0] === handleEnds[1]`, always believe that handleEnd[0] 
 | 
  // is at left of handleEnds[1] for non-cross case. 
 | 
  return { 
 | 
    span: Math.abs(dist), 
 | 
    sign: dist > 0 ? -1 : dist < 0 ? 1 : handleIndex ? -1 : 1 
 | 
  }; 
 | 
} 
 | 
function restrict(value, extend) { 
 | 
  return Math.min(extend[1] != null ? extend[1] : Infinity, Math.max(extend[0] != null ? extend[0] : -Infinity, value)); 
 | 
} 
 |