mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-08-06 21:44:08 -06:00
ENH: model info display UI
Change-Id: I066c0e7f8ce87ec00b1141a1b44430444a819b42 (cherry picked from commit 05907a1a42da82737090d55046974d401f8af057)
This commit is contained in:
parent
0cc953ad41
commit
b4ffa91cb4
343 changed files with 54828 additions and 2 deletions
|
@ -0,0 +1,4 @@
|
|||
export default function classesToSelector(classes = '') {
|
||||
return `.${classes.trim().replace(/([\.:!\/])/g, '\\$1') // eslint-disable-line
|
||||
.replace(/ /g, '.')}`;
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
import { getDocument } from 'ssr-window';
|
||||
export default function createElementIfNotDefined(swiper, originalParams, params, checkProps) {
|
||||
const document = getDocument();
|
||||
|
||||
if (swiper.params.createElements) {
|
||||
Object.keys(checkProps).forEach(key => {
|
||||
if (!params[key] && params.auto === true) {
|
||||
let element = swiper.$el.children(`.${checkProps[key]}`)[0];
|
||||
|
||||
if (!element) {
|
||||
element = document.createElement('div');
|
||||
element.className = checkProps[key];
|
||||
swiper.$el.append(element);
|
||||
}
|
||||
|
||||
params[key] = element;
|
||||
originalParams[key] = element;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return params;
|
||||
}
|
13
resources/web/include/swiper/shared/create-shadow.js
Normal file
13
resources/web/include/swiper/shared/create-shadow.js
Normal file
|
@ -0,0 +1,13 @@
|
|||
import $ from './dom.js';
|
||||
export default function createShadow(params, $slideEl, side) {
|
||||
const shadowClass = `swiper-slide-shadow${side ? `-${side}` : ''}`;
|
||||
const $shadowContainer = params.transformEl ? $slideEl.find(params.transformEl) : $slideEl;
|
||||
let $shadowEl = $shadowContainer.children(`.${shadowClass}`);
|
||||
|
||||
if (!$shadowEl.length) {
|
||||
$shadowEl = $(`<div class="swiper-slide-shadow${side ? `-${side}` : ''}"></div>`);
|
||||
$shadowContainer.append($shadowEl);
|
||||
}
|
||||
|
||||
return $shadowEl;
|
||||
}
|
46
resources/web/include/swiper/shared/dom.js
Normal file
46
resources/web/include/swiper/shared/dom.js
Normal file
|
@ -0,0 +1,46 @@
|
|||
import { $, addClass, removeClass, hasClass, toggleClass, attr, removeAttr, transform, transition, on, off, trigger, transitionEnd, outerWidth, outerHeight, styles, offset, css, each, html, text, is, index, eq, append, prepend, next, nextAll, prev, prevAll, parent, parents, closest, find, children, filter, remove } from 'dom7';
|
||||
const Methods = {
|
||||
addClass,
|
||||
removeClass,
|
||||
hasClass,
|
||||
toggleClass,
|
||||
attr,
|
||||
removeAttr,
|
||||
transform,
|
||||
transition,
|
||||
on,
|
||||
off,
|
||||
trigger,
|
||||
transitionEnd,
|
||||
outerWidth,
|
||||
outerHeight,
|
||||
styles,
|
||||
offset,
|
||||
css,
|
||||
each,
|
||||
html,
|
||||
text,
|
||||
is,
|
||||
index,
|
||||
eq,
|
||||
append,
|
||||
prepend,
|
||||
next,
|
||||
nextAll,
|
||||
prev,
|
||||
prevAll,
|
||||
parent,
|
||||
parents,
|
||||
closest,
|
||||
find,
|
||||
children,
|
||||
filter,
|
||||
remove
|
||||
};
|
||||
Object.keys(Methods).forEach(methodName => {
|
||||
Object.defineProperty($.fn, methodName, {
|
||||
value: Methods[methodName],
|
||||
writable: true
|
||||
});
|
||||
});
|
||||
export default $;
|
31
resources/web/include/swiper/shared/effect-init.js
Normal file
31
resources/web/include/swiper/shared/effect-init.js
Normal file
|
@ -0,0 +1,31 @@
|
|||
export default function effectInit(params) {
|
||||
const {
|
||||
effect,
|
||||
swiper,
|
||||
on,
|
||||
setTranslate,
|
||||
setTransition,
|
||||
overwriteParams,
|
||||
perspective
|
||||
} = params;
|
||||
on('beforeInit', () => {
|
||||
if (swiper.params.effect !== effect) return;
|
||||
swiper.classNames.push(`${swiper.params.containerModifierClass}${effect}`);
|
||||
|
||||
if (perspective && perspective()) {
|
||||
swiper.classNames.push(`${swiper.params.containerModifierClass}3d`);
|
||||
}
|
||||
|
||||
const overwriteParamsResult = overwriteParams ? overwriteParams() : {};
|
||||
Object.assign(swiper.params, overwriteParamsResult);
|
||||
Object.assign(swiper.originalParams, overwriteParamsResult);
|
||||
});
|
||||
on('setTranslate', () => {
|
||||
if (swiper.params.effect !== effect) return;
|
||||
setTranslate();
|
||||
});
|
||||
on('setTransition', (_s, duration) => {
|
||||
if (swiper.params.effect !== effect) return;
|
||||
setTransition(duration);
|
||||
});
|
||||
}
|
10
resources/web/include/swiper/shared/effect-target.js
Normal file
10
resources/web/include/swiper/shared/effect-target.js
Normal file
|
@ -0,0 +1,10 @@
|
|||
export default function effectTarget(effectParams, $slideEl) {
|
||||
if (effectParams.transformEl) {
|
||||
return $slideEl.find(effectParams.transformEl).css({
|
||||
'backface-visibility': 'hidden',
|
||||
'-webkit-backface-visibility': 'hidden'
|
||||
});
|
||||
}
|
||||
|
||||
return $slideEl;
|
||||
}
|
|
@ -0,0 +1,35 @@
|
|||
export default function effectVirtualTransitionEnd({
|
||||
swiper,
|
||||
duration,
|
||||
transformEl,
|
||||
allSlides
|
||||
}) {
|
||||
const {
|
||||
slides,
|
||||
activeIndex,
|
||||
$wrapperEl
|
||||
} = swiper;
|
||||
|
||||
if (swiper.params.virtualTranslate && duration !== 0) {
|
||||
let eventTriggered = false;
|
||||
let $transitionEndTarget;
|
||||
|
||||
if (allSlides) {
|
||||
$transitionEndTarget = transformEl ? slides.find(transformEl) : slides;
|
||||
} else {
|
||||
$transitionEndTarget = transformEl ? slides.eq(activeIndex).find(transformEl) : slides.eq(activeIndex);
|
||||
}
|
||||
|
||||
$transitionEndTarget.transitionEnd(() => {
|
||||
if (eventTriggered) return;
|
||||
if (!swiper || swiper.destroyed) return;
|
||||
eventTriggered = true;
|
||||
swiper.animating = false;
|
||||
const triggerEvents = ['webkitTransitionEnd', 'transitionend'];
|
||||
|
||||
for (let i = 0; i < triggerEvents.length; i += 1) {
|
||||
$wrapperEl.trigger(triggerEvents[i]);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
26
resources/web/include/swiper/shared/get-browser.js
Normal file
26
resources/web/include/swiper/shared/get-browser.js
Normal file
|
@ -0,0 +1,26 @@
|
|||
import { getWindow } from 'ssr-window';
|
||||
let browser;
|
||||
|
||||
function calcBrowser() {
|
||||
const window = getWindow();
|
||||
|
||||
function isSafari() {
|
||||
const ua = window.navigator.userAgent.toLowerCase();
|
||||
return ua.indexOf('safari') >= 0 && ua.indexOf('chrome') < 0 && ua.indexOf('android') < 0;
|
||||
}
|
||||
|
||||
return {
|
||||
isSafari: isSafari(),
|
||||
isWebView: /(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/i.test(window.navigator.userAgent)
|
||||
};
|
||||
}
|
||||
|
||||
function getBrowser() {
|
||||
if (!browser) {
|
||||
browser = calcBrowser();
|
||||
}
|
||||
|
||||
return browser;
|
||||
}
|
||||
|
||||
export { getBrowser };
|
57
resources/web/include/swiper/shared/get-device.js
Normal file
57
resources/web/include/swiper/shared/get-device.js
Normal file
|
@ -0,0 +1,57 @@
|
|||
import { getWindow } from 'ssr-window';
|
||||
import { getSupport } from './get-support.js';
|
||||
let deviceCached;
|
||||
|
||||
function calcDevice({
|
||||
userAgent
|
||||
} = {}) {
|
||||
const support = getSupport();
|
||||
const window = getWindow();
|
||||
const platform = window.navigator.platform;
|
||||
const ua = userAgent || window.navigator.userAgent;
|
||||
const device = {
|
||||
ios: false,
|
||||
android: false
|
||||
};
|
||||
const screenWidth = window.screen.width;
|
||||
const screenHeight = window.screen.height;
|
||||
const android = ua.match(/(Android);?[\s\/]+([\d.]+)?/); // eslint-disable-line
|
||||
|
||||
let ipad = ua.match(/(iPad).*OS\s([\d_]+)/);
|
||||
const ipod = ua.match(/(iPod)(.*OS\s([\d_]+))?/);
|
||||
const iphone = !ipad && ua.match(/(iPhone\sOS|iOS)\s([\d_]+)/);
|
||||
const windows = platform === 'Win32';
|
||||
let macos = platform === 'MacIntel'; // iPadOs 13 fix
|
||||
|
||||
const iPadScreens = ['1024x1366', '1366x1024', '834x1194', '1194x834', '834x1112', '1112x834', '768x1024', '1024x768', '820x1180', '1180x820', '810x1080', '1080x810'];
|
||||
|
||||
if (!ipad && macos && support.touch && iPadScreens.indexOf(`${screenWidth}x${screenHeight}`) >= 0) {
|
||||
ipad = ua.match(/(Version)\/([\d.]+)/);
|
||||
if (!ipad) ipad = [0, 1, '13_0_0'];
|
||||
macos = false;
|
||||
} // Android
|
||||
|
||||
|
||||
if (android && !windows) {
|
||||
device.os = 'android';
|
||||
device.android = true;
|
||||
}
|
||||
|
||||
if (ipad || iphone || ipod) {
|
||||
device.os = 'ios';
|
||||
device.ios = true;
|
||||
} // Export object
|
||||
|
||||
|
||||
return device;
|
||||
}
|
||||
|
||||
function getDevice(overrides = {}) {
|
||||
if (!deviceCached) {
|
||||
deviceCached = calcDevice(overrides);
|
||||
}
|
||||
|
||||
return deviceCached;
|
||||
}
|
||||
|
||||
export { getDevice };
|
41
resources/web/include/swiper/shared/get-support.js
Normal file
41
resources/web/include/swiper/shared/get-support.js
Normal file
|
@ -0,0 +1,41 @@
|
|||
import { getWindow, getDocument } from 'ssr-window';
|
||||
let support;
|
||||
|
||||
function calcSupport() {
|
||||
const window = getWindow();
|
||||
const document = getDocument();
|
||||
return {
|
||||
smoothScroll: document.documentElement && 'scrollBehavior' in document.documentElement.style,
|
||||
touch: !!('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch),
|
||||
passiveListener: function checkPassiveListener() {
|
||||
let supportsPassive = false;
|
||||
|
||||
try {
|
||||
const opts = Object.defineProperty({}, 'passive', {
|
||||
// eslint-disable-next-line
|
||||
get() {
|
||||
supportsPassive = true;
|
||||
}
|
||||
|
||||
});
|
||||
window.addEventListener('testPassiveListener', null, opts);
|
||||
} catch (e) {// No support
|
||||
}
|
||||
|
||||
return supportsPassive;
|
||||
}(),
|
||||
gestures: function checkGestures() {
|
||||
return 'ongesturestart' in window;
|
||||
}()
|
||||
};
|
||||
}
|
||||
|
||||
function getSupport() {
|
||||
if (!support) {
|
||||
support = calcSupport();
|
||||
}
|
||||
|
||||
return support;
|
||||
}
|
||||
|
||||
export { getSupport };
|
197
resources/web/include/swiper/shared/utils.js
Normal file
197
resources/web/include/swiper/shared/utils.js
Normal file
|
@ -0,0 +1,197 @@
|
|||
import { getWindow } from 'ssr-window';
|
||||
|
||||
function deleteProps(obj) {
|
||||
const object = obj;
|
||||
Object.keys(object).forEach(key => {
|
||||
try {
|
||||
object[key] = null;
|
||||
} catch (e) {// no getter for object
|
||||
}
|
||||
|
||||
try {
|
||||
delete object[key];
|
||||
} catch (e) {// something got wrong
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function nextTick(callback, delay = 0) {
|
||||
return setTimeout(callback, delay);
|
||||
}
|
||||
|
||||
function now() {
|
||||
return Date.now();
|
||||
}
|
||||
|
||||
function getComputedStyle(el) {
|
||||
const window = getWindow();
|
||||
let style;
|
||||
|
||||
if (window.getComputedStyle) {
|
||||
style = window.getComputedStyle(el, null);
|
||||
}
|
||||
|
||||
if (!style && el.currentStyle) {
|
||||
style = el.currentStyle;
|
||||
}
|
||||
|
||||
if (!style) {
|
||||
style = el.style;
|
||||
}
|
||||
|
||||
return style;
|
||||
}
|
||||
|
||||
function getTranslate(el, axis = 'x') {
|
||||
const window = getWindow();
|
||||
let matrix;
|
||||
let curTransform;
|
||||
let transformMatrix;
|
||||
const curStyle = getComputedStyle(el, null);
|
||||
|
||||
if (window.WebKitCSSMatrix) {
|
||||
curTransform = curStyle.transform || curStyle.webkitTransform;
|
||||
|
||||
if (curTransform.split(',').length > 6) {
|
||||
curTransform = curTransform.split(', ').map(a => a.replace(',', '.')).join(', ');
|
||||
} // Some old versions of Webkit choke when 'none' is passed; pass
|
||||
// empty string instead in this case
|
||||
|
||||
|
||||
transformMatrix = new window.WebKitCSSMatrix(curTransform === 'none' ? '' : curTransform);
|
||||
} else {
|
||||
transformMatrix = curStyle.MozTransform || curStyle.OTransform || curStyle.MsTransform || curStyle.msTransform || curStyle.transform || curStyle.getPropertyValue('transform').replace('translate(', 'matrix(1, 0, 0, 1,');
|
||||
matrix = transformMatrix.toString().split(',');
|
||||
}
|
||||
|
||||
if (axis === 'x') {
|
||||
// Latest Chrome and webkits Fix
|
||||
if (window.WebKitCSSMatrix) curTransform = transformMatrix.m41; // Crazy IE10 Matrix
|
||||
else if (matrix.length === 16) curTransform = parseFloat(matrix[12]); // Normal Browsers
|
||||
else curTransform = parseFloat(matrix[4]);
|
||||
}
|
||||
|
||||
if (axis === 'y') {
|
||||
// Latest Chrome and webkits Fix
|
||||
if (window.WebKitCSSMatrix) curTransform = transformMatrix.m42; // Crazy IE10 Matrix
|
||||
else if (matrix.length === 16) curTransform = parseFloat(matrix[13]); // Normal Browsers
|
||||
else curTransform = parseFloat(matrix[5]);
|
||||
}
|
||||
|
||||
return curTransform || 0;
|
||||
}
|
||||
|
||||
function isObject(o) {
|
||||
return typeof o === 'object' && o !== null && o.constructor && Object.prototype.toString.call(o).slice(8, -1) === 'Object';
|
||||
}
|
||||
|
||||
function isNode(node) {
|
||||
// eslint-disable-next-line
|
||||
if (typeof window !== 'undefined' && typeof window.HTMLElement !== 'undefined') {
|
||||
return node instanceof HTMLElement;
|
||||
}
|
||||
|
||||
return node && (node.nodeType === 1 || node.nodeType === 11);
|
||||
}
|
||||
|
||||
function extend(...args) {
|
||||
const to = Object(args[0]);
|
||||
const noExtend = ['__proto__', 'constructor', 'prototype'];
|
||||
|
||||
for (let i = 1; i < args.length; i += 1) {
|
||||
const nextSource = args[i];
|
||||
|
||||
if (nextSource !== undefined && nextSource !== null && !isNode(nextSource)) {
|
||||
const keysArray = Object.keys(Object(nextSource)).filter(key => noExtend.indexOf(key) < 0);
|
||||
|
||||
for (let nextIndex = 0, len = keysArray.length; nextIndex < len; nextIndex += 1) {
|
||||
const nextKey = keysArray[nextIndex];
|
||||
const desc = Object.getOwnPropertyDescriptor(nextSource, nextKey);
|
||||
|
||||
if (desc !== undefined && desc.enumerable) {
|
||||
if (isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
|
||||
if (nextSource[nextKey].__swiper__) {
|
||||
to[nextKey] = nextSource[nextKey];
|
||||
} else {
|
||||
extend(to[nextKey], nextSource[nextKey]);
|
||||
}
|
||||
} else if (!isObject(to[nextKey]) && isObject(nextSource[nextKey])) {
|
||||
to[nextKey] = {};
|
||||
|
||||
if (nextSource[nextKey].__swiper__) {
|
||||
to[nextKey] = nextSource[nextKey];
|
||||
} else {
|
||||
extend(to[nextKey], nextSource[nextKey]);
|
||||
}
|
||||
} else {
|
||||
to[nextKey] = nextSource[nextKey];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return to;
|
||||
}
|
||||
|
||||
function setCSSProperty(el, varName, varValue) {
|
||||
el.style.setProperty(varName, varValue);
|
||||
}
|
||||
|
||||
function animateCSSModeScroll({
|
||||
swiper,
|
||||
targetPosition,
|
||||
side
|
||||
}) {
|
||||
const window = getWindow();
|
||||
const startPosition = -swiper.translate;
|
||||
let startTime = null;
|
||||
let time;
|
||||
const duration = swiper.params.speed;
|
||||
swiper.wrapperEl.style.scrollSnapType = 'none';
|
||||
window.cancelAnimationFrame(swiper.cssModeFrameID);
|
||||
const dir = targetPosition > startPosition ? 'next' : 'prev';
|
||||
|
||||
const isOutOfBound = (current, target) => {
|
||||
return dir === 'next' && current >= target || dir === 'prev' && current <= target;
|
||||
};
|
||||
|
||||
const animate = () => {
|
||||
time = new Date().getTime();
|
||||
|
||||
if (startTime === null) {
|
||||
startTime = time;
|
||||
}
|
||||
|
||||
const progress = Math.max(Math.min((time - startTime) / duration, 1), 0);
|
||||
const easeProgress = 0.5 - Math.cos(progress * Math.PI) / 2;
|
||||
let currentPosition = startPosition + easeProgress * (targetPosition - startPosition);
|
||||
|
||||
if (isOutOfBound(currentPosition, targetPosition)) {
|
||||
currentPosition = targetPosition;
|
||||
}
|
||||
|
||||
swiper.wrapperEl.scrollTo({
|
||||
[side]: currentPosition
|
||||
});
|
||||
|
||||
if (isOutOfBound(currentPosition, targetPosition)) {
|
||||
swiper.wrapperEl.style.overflow = 'hidden';
|
||||
swiper.wrapperEl.style.scrollSnapType = '';
|
||||
setTimeout(() => {
|
||||
swiper.wrapperEl.style.overflow = '';
|
||||
swiper.wrapperEl.scrollTo({
|
||||
[side]: currentPosition
|
||||
});
|
||||
});
|
||||
window.cancelAnimationFrame(swiper.cssModeFrameID);
|
||||
return;
|
||||
}
|
||||
|
||||
swiper.cssModeFrameID = window.requestAnimationFrame(animate);
|
||||
};
|
||||
|
||||
animate();
|
||||
}
|
||||
|
||||
export { animateCSSModeScroll, deleteProps, nextTick, now, getTranslate, isObject, extend, getComputedStyle, setCSSProperty };
|
Loading…
Add table
Add a link
Reference in a new issue