Browse Source
* chore: remove css-animate * chore(site): remove localStorage support checkpull/7632/head
extclp
6 months ago
committed by
GitHub
7 changed files with 3 additions and 391 deletions
@ -1,130 +0,0 @@ |
|||||||
const START_EVENT_NAME_MAP = { |
|
||||||
transitionstart: { |
|
||||||
transition: 'transitionstart', |
|
||||||
WebkitTransition: 'webkitTransitionStart', |
|
||||||
MozTransition: 'mozTransitionStart', |
|
||||||
OTransition: 'oTransitionStart', |
|
||||||
msTransition: 'MSTransitionStart', |
|
||||||
}, |
|
||||||
|
|
||||||
animationstart: { |
|
||||||
animation: 'animationstart', |
|
||||||
WebkitAnimation: 'webkitAnimationStart', |
|
||||||
MozAnimation: 'mozAnimationStart', |
|
||||||
OAnimation: 'oAnimationStart', |
|
||||||
msAnimation: 'MSAnimationStart', |
|
||||||
}, |
|
||||||
}; |
|
||||||
|
|
||||||
const END_EVENT_NAME_MAP = { |
|
||||||
transitionend: { |
|
||||||
transition: 'transitionend', |
|
||||||
WebkitTransition: 'webkitTransitionEnd', |
|
||||||
MozTransition: 'mozTransitionEnd', |
|
||||||
OTransition: 'oTransitionEnd', |
|
||||||
msTransition: 'MSTransitionEnd', |
|
||||||
}, |
|
||||||
|
|
||||||
animationend: { |
|
||||||
animation: 'animationend', |
|
||||||
WebkitAnimation: 'webkitAnimationEnd', |
|
||||||
MozAnimation: 'mozAnimationEnd', |
|
||||||
OAnimation: 'oAnimationEnd', |
|
||||||
msAnimation: 'MSAnimationEnd', |
|
||||||
}, |
|
||||||
}; |
|
||||||
|
|
||||||
const startEvents = []; |
|
||||||
const endEvents = []; |
|
||||||
|
|
||||||
function detectEvents() { |
|
||||||
const testEl = document.createElement('div'); |
|
||||||
const style = testEl.style; |
|
||||||
|
|
||||||
if (!('AnimationEvent' in window)) { |
|
||||||
delete START_EVENT_NAME_MAP.animationstart.animation; |
|
||||||
delete END_EVENT_NAME_MAP.animationend.animation; |
|
||||||
} |
|
||||||
|
|
||||||
if (!('TransitionEvent' in window)) { |
|
||||||
delete START_EVENT_NAME_MAP.transitionstart.transition; |
|
||||||
delete END_EVENT_NAME_MAP.transitionend.transition; |
|
||||||
} |
|
||||||
|
|
||||||
function process(EVENT_NAME_MAP, events) { |
|
||||||
for (const baseEventName in EVENT_NAME_MAP) { |
|
||||||
if (EVENT_NAME_MAP.hasOwnProperty(baseEventName)) { |
|
||||||
const baseEvents = EVENT_NAME_MAP[baseEventName]; |
|
||||||
for (const styleName in baseEvents) { |
|
||||||
if (styleName in style) { |
|
||||||
events.push(baseEvents[styleName]); |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
process(START_EVENT_NAME_MAP, startEvents); |
|
||||||
process(END_EVENT_NAME_MAP, endEvents); |
|
||||||
} |
|
||||||
|
|
||||||
if (typeof window !== 'undefined' && typeof document !== 'undefined') { |
|
||||||
detectEvents(); |
|
||||||
} |
|
||||||
|
|
||||||
function addEventListener(node, eventName, eventListener) { |
|
||||||
node.addEventListener(eventName, eventListener, false); |
|
||||||
} |
|
||||||
|
|
||||||
function removeEventListener(node, eventName, eventListener) { |
|
||||||
node.removeEventListener(eventName, eventListener, false); |
|
||||||
} |
|
||||||
|
|
||||||
const TransitionEvents = { |
|
||||||
// Start events
|
|
||||||
startEvents, |
|
||||||
|
|
||||||
addStartEventListener(node, eventListener) { |
|
||||||
if (startEvents.length === 0) { |
|
||||||
setTimeout(eventListener, 0); |
|
||||||
return; |
|
||||||
} |
|
||||||
startEvents.forEach(startEvent => { |
|
||||||
addEventListener(node, startEvent, eventListener); |
|
||||||
}); |
|
||||||
}, |
|
||||||
|
|
||||||
removeStartEventListener(node, eventListener) { |
|
||||||
if (startEvents.length === 0) { |
|
||||||
return; |
|
||||||
} |
|
||||||
startEvents.forEach(startEvent => { |
|
||||||
removeEventListener(node, startEvent, eventListener); |
|
||||||
}); |
|
||||||
}, |
|
||||||
|
|
||||||
// End events
|
|
||||||
endEvents, |
|
||||||
|
|
||||||
addEndEventListener(node, eventListener) { |
|
||||||
if (endEvents.length === 0) { |
|
||||||
setTimeout(eventListener, 0); |
|
||||||
return; |
|
||||||
} |
|
||||||
endEvents.forEach(endEvent => { |
|
||||||
addEventListener(node, endEvent, eventListener); |
|
||||||
}); |
|
||||||
}, |
|
||||||
|
|
||||||
removeEndEventListener(node, eventListener) { |
|
||||||
if (endEvents.length === 0) { |
|
||||||
return; |
|
||||||
} |
|
||||||
endEvents.forEach(endEvent => { |
|
||||||
removeEventListener(node, endEvent, eventListener); |
|
||||||
}); |
|
||||||
}, |
|
||||||
}; |
|
||||||
|
|
||||||
export default TransitionEvents; |
|
@ -1,186 +0,0 @@ |
|||||||
// https://github.com/yiminghe/css-animation 1.5.0
|
|
||||||
|
|
||||||
import Event from './Event'; |
|
||||||
import classes from '../component-classes'; |
|
||||||
import { requestAnimationTimeout, cancelAnimationTimeout } from '../requestAnimationTimeout'; |
|
||||||
import { inBrowser } from '../env'; |
|
||||||
|
|
||||||
const isCssAnimationSupported = Event.endEvents.length !== 0; |
|
||||||
const capitalPrefixes = [ |
|
||||||
'Webkit', |
|
||||||
'Moz', |
|
||||||
'O', |
|
||||||
// ms is special .... !
|
|
||||||
'ms', |
|
||||||
]; |
|
||||||
const prefixes = ['-webkit-', '-moz-', '-o-', 'ms-', '']; |
|
||||||
|
|
||||||
function getStyleProperty(node, name) { |
|
||||||
if (inBrowser) return ''; |
|
||||||
// old ff need null, https://developer.mozilla.org/en-US/docs/Web/API/Window/getComputedStyle
|
|
||||||
const style = window.getComputedStyle(node, null); |
|
||||||
let ret = ''; |
|
||||||
for (let i = 0; i < prefixes.length; i++) { |
|
||||||
ret = style.getPropertyValue(prefixes[i] + name); |
|
||||||
if (ret) { |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
return ret; |
|
||||||
} |
|
||||||
|
|
||||||
function fixBrowserByTimeout(node) { |
|
||||||
if (isCssAnimationSupported) { |
|
||||||
const transitionDelay = parseFloat(getStyleProperty(node, 'transition-delay')) || 0; |
|
||||||
const transitionDuration = parseFloat(getStyleProperty(node, 'transition-duration')) || 0; |
|
||||||
const animationDelay = parseFloat(getStyleProperty(node, 'animation-delay')) || 0; |
|
||||||
const animationDuration = parseFloat(getStyleProperty(node, 'animation-duration')) || 0; |
|
||||||
const time = Math.max(transitionDuration + transitionDelay, animationDuration + animationDelay); |
|
||||||
// sometimes, browser bug
|
|
||||||
node.rcEndAnimTimeout = setTimeout(() => { |
|
||||||
node.rcEndAnimTimeout = null; |
|
||||||
if (node.rcEndListener) { |
|
||||||
node.rcEndListener(); |
|
||||||
} |
|
||||||
}, time * 1000 + 200); |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
function clearBrowserBugTimeout(node) { |
|
||||||
if (node.rcEndAnimTimeout) { |
|
||||||
clearTimeout(node.rcEndAnimTimeout); |
|
||||||
node.rcEndAnimTimeout = null; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
const cssAnimation = (node, transitionName, endCallback) => { |
|
||||||
const nameIsObj = typeof transitionName === 'object'; |
|
||||||
const className = nameIsObj ? transitionName.name : transitionName; |
|
||||||
const activeClassName = nameIsObj ? transitionName.active : `${transitionName}-active`; |
|
||||||
let end = endCallback; |
|
||||||
let start; |
|
||||||
let active; |
|
||||||
const nodeClasses = classes(node); |
|
||||||
|
|
||||||
if (endCallback && Object.prototype.toString.call(endCallback) === '[object Object]') { |
|
||||||
end = endCallback.end; |
|
||||||
start = endCallback.start; |
|
||||||
active = endCallback.active; |
|
||||||
} |
|
||||||
|
|
||||||
if (node.rcEndListener) { |
|
||||||
node.rcEndListener(); |
|
||||||
} |
|
||||||
|
|
||||||
node.rcEndListener = e => { |
|
||||||
if (e && e.target !== node) { |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if (node.rcAnimTimeout) { |
|
||||||
cancelAnimationTimeout(node.rcAnimTimeout); |
|
||||||
node.rcAnimTimeout = null; |
|
||||||
} |
|
||||||
|
|
||||||
clearBrowserBugTimeout(node); |
|
||||||
|
|
||||||
nodeClasses.remove(className); |
|
||||||
nodeClasses.remove(activeClassName); |
|
||||||
|
|
||||||
Event.removeEndEventListener(node, node.rcEndListener); |
|
||||||
node.rcEndListener = null; |
|
||||||
|
|
||||||
// Usually this optional end is used for informing an owner of
|
|
||||||
// a leave animation and telling it to remove the child.
|
|
||||||
if (end) { |
|
||||||
end(); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
Event.addEndEventListener(node, node.rcEndListener); |
|
||||||
|
|
||||||
if (start) { |
|
||||||
start(); |
|
||||||
} |
|
||||||
nodeClasses.add(className); |
|
||||||
|
|
||||||
node.rcAnimTimeout = requestAnimationTimeout(() => { |
|
||||||
node.rcAnimTimeout = null; |
|
||||||
|
|
||||||
nodeClasses.add(className); |
|
||||||
nodeClasses.add(activeClassName); |
|
||||||
|
|
||||||
if (active) { |
|
||||||
requestAnimationTimeout(active, 0); |
|
||||||
} |
|
||||||
fixBrowserByTimeout(node); |
|
||||||
// 30ms for firefox
|
|
||||||
}, 30); |
|
||||||
|
|
||||||
return { |
|
||||||
stop() { |
|
||||||
if (node.rcEndListener) { |
|
||||||
node.rcEndListener(); |
|
||||||
} |
|
||||||
}, |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
cssAnimation.style = (node, style, callback) => { |
|
||||||
if (node.rcEndListener) { |
|
||||||
node.rcEndListener(); |
|
||||||
} |
|
||||||
|
|
||||||
node.rcEndListener = e => { |
|
||||||
if (e && e.target !== node) { |
|
||||||
return; |
|
||||||
} |
|
||||||
|
|
||||||
if (node.rcAnimTimeout) { |
|
||||||
cancelAnimationTimeout(node.rcAnimTimeout); |
|
||||||
node.rcAnimTimeout = null; |
|
||||||
} |
|
||||||
|
|
||||||
clearBrowserBugTimeout(node); |
|
||||||
|
|
||||||
Event.removeEndEventListener(node, node.rcEndListener); |
|
||||||
node.rcEndListener = null; |
|
||||||
|
|
||||||
// Usually this optional callback is used for informing an owner of
|
|
||||||
// a leave animation and telling it to remove the child.
|
|
||||||
if (callback) { |
|
||||||
callback(); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
Event.addEndEventListener(node, node.rcEndListener); |
|
||||||
|
|
||||||
node.rcAnimTimeout = requestAnimationTimeout(() => { |
|
||||||
for (const s in style) { |
|
||||||
if (style.hasOwnProperty(s)) { |
|
||||||
node.style[s] = style[s]; |
|
||||||
} |
|
||||||
} |
|
||||||
node.rcAnimTimeout = null; |
|
||||||
fixBrowserByTimeout(node); |
|
||||||
}, 0); |
|
||||||
}; |
|
||||||
|
|
||||||
cssAnimation.setTransition = (node, p, value) => { |
|
||||||
let property = p; |
|
||||||
let v = value; |
|
||||||
if (value === undefined) { |
|
||||||
v = property; |
|
||||||
property = ''; |
|
||||||
} |
|
||||||
property = property || ''; |
|
||||||
capitalPrefixes.forEach(prefix => { |
|
||||||
node.style[`${prefix}Transition${property}`] = v; |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
cssAnimation.isCssAnimationSupported = isCssAnimationSupported; |
|
||||||
|
|
||||||
export { isCssAnimationSupported }; |
|
||||||
|
|
||||||
export default cssAnimation; |
|
@ -1,24 +0,0 @@ |
|||||||
let animation; |
|
||||||
|
|
||||||
function isCssAnimationSupported() { |
|
||||||
if (animation !== undefined) { |
|
||||||
return animation; |
|
||||||
} |
|
||||||
const domPrefixes = 'Webkit Moz O ms Khtml'.split(' '); |
|
||||||
const elm = document.createElement('div'); |
|
||||||
if (elm.style.animationName !== undefined) { |
|
||||||
animation = true; |
|
||||||
} |
|
||||||
if (animation !== undefined) { |
|
||||||
for (let i = 0; i < domPrefixes.length; i++) { |
|
||||||
if (elm.style[`${domPrefixes[i]}AnimationName`] !== undefined) { |
|
||||||
animation = true; |
|
||||||
break; |
|
||||||
} |
|
||||||
} |
|
||||||
} |
|
||||||
animation = animation || false; |
|
||||||
return animation; |
|
||||||
} |
|
||||||
|
|
||||||
export default isCssAnimationSupported; |
|
@ -1,33 +0,0 @@ |
|||||||
export function isZhCN(name) { |
|
||||||
return /-cn\/?$/.test(name); |
|
||||||
} |
|
||||||
export function isLocalStorageNameSupported() { |
|
||||||
const testKey = 'test'; |
|
||||||
const storage = window.localStorage; |
|
||||||
try { |
|
||||||
storage.setItem(testKey, '1'); |
|
||||||
storage.removeItem(testKey); |
|
||||||
return true; |
|
||||||
} catch (error) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
export function getLocalizedPathname(path, zhCN, query = {}, hash) { |
|
||||||
const pathname = path.startsWith('/') ? path : `/${path}`; |
|
||||||
let fullPath; |
|
||||||
if (!zhCN) { |
|
||||||
// to enUS
|
|
||||||
fullPath = /\/?index-cn/.test(pathname) ? '/' : pathname.replace('-cn', ''); |
|
||||||
} else if (pathname === '/') { |
|
||||||
fullPath = '/index-cn'; |
|
||||||
} else if (pathname.endsWith('/')) { |
|
||||||
fullPath = pathname.replace(/\/$/, '-cn/'); |
|
||||||
} else { |
|
||||||
fullPath = `${pathname}-cn`; |
|
||||||
} |
|
||||||
if (hash) { |
|
||||||
const localHash = hash[zhCN ? 'zhCN' : 'enUS']; |
|
||||||
fullPath += `#${localHash}`; |
|
||||||
} |
|
||||||
return { path: fullPath, query }; |
|
||||||
} |
|
Loading…
Reference in new issue