mirror of
				https://github.com/SoftFever/OrcaSlicer.git
				synced 2025-10-31 12:41:20 -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
				
			
		
							
								
								
									
										16
									
								
								resources/web/include/swiper/core/slide/index.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								resources/web/include/swiper/core/slide/index.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,16 @@ | |||
| import slideTo from './slideTo.js'; | ||||
| import slideToLoop from './slideToLoop.js'; | ||||
| import slideNext from './slideNext.js'; | ||||
| import slidePrev from './slidePrev.js'; | ||||
| import slideReset from './slideReset.js'; | ||||
| import slideToClosest from './slideToClosest.js'; | ||||
| import slideToClickedSlide from './slideToClickedSlide.js'; | ||||
| export default { | ||||
|   slideTo, | ||||
|   slideToLoop, | ||||
|   slideNext, | ||||
|   slidePrev, | ||||
|   slideReset, | ||||
|   slideToClosest, | ||||
|   slideToClickedSlide | ||||
| }; | ||||
							
								
								
									
										26
									
								
								resources/web/include/swiper/core/slide/slideNext.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								resources/web/include/swiper/core/slide/slideNext.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,26 @@ | |||
| /* eslint no-unused-vars: "off" */ | ||||
| export default function slideNext(speed = this.params.speed, runCallbacks = true, internal) { | ||||
|   const swiper = this; | ||||
|   const { | ||||
|     animating, | ||||
|     enabled, | ||||
|     params | ||||
|   } = swiper; | ||||
|   if (!enabled) return swiper; | ||||
|   let perGroup = params.slidesPerGroup; | ||||
| 
 | ||||
|   if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { | ||||
|     perGroup = Math.max(swiper.slidesPerViewDynamic('current', true), 1); | ||||
|   } | ||||
| 
 | ||||
|   const increment = swiper.activeIndex < params.slidesPerGroupSkip ? 1 : perGroup; | ||||
| 
 | ||||
|   if (params.loop) { | ||||
|     if (animating && params.loopPreventsSlide) return false; | ||||
|     swiper.loopFix(); // eslint-disable-next-line
 | ||||
| 
 | ||||
|     swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; | ||||
|   } | ||||
| 
 | ||||
|   return swiper.slideTo(swiper.activeIndex + increment, speed, runCallbacks, internal); | ||||
| } | ||||
							
								
								
									
										59
									
								
								resources/web/include/swiper/core/slide/slidePrev.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								resources/web/include/swiper/core/slide/slidePrev.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,59 @@ | |||
| /* eslint no-unused-vars: "off" */ | ||||
| export default function slidePrev(speed = this.params.speed, runCallbacks = true, internal) { | ||||
|   const swiper = this; | ||||
|   const { | ||||
|     params, | ||||
|     animating, | ||||
|     snapGrid, | ||||
|     slidesGrid, | ||||
|     rtlTranslate, | ||||
|     enabled | ||||
|   } = swiper; | ||||
|   if (!enabled) return swiper; | ||||
| 
 | ||||
|   if (params.loop) { | ||||
|     if (animating && params.loopPreventsSlide) return false; | ||||
|     swiper.loopFix(); // eslint-disable-next-line
 | ||||
| 
 | ||||
|     swiper._clientLeft = swiper.$wrapperEl[0].clientLeft; | ||||
|   } | ||||
| 
 | ||||
|   const translate = rtlTranslate ? swiper.translate : -swiper.translate; | ||||
| 
 | ||||
|   function normalize(val) { | ||||
|     if (val < 0) return -Math.floor(Math.abs(val)); | ||||
|     return Math.floor(val); | ||||
|   } | ||||
| 
 | ||||
|   const normalizedTranslate = normalize(translate); | ||||
|   const normalizedSnapGrid = snapGrid.map(val => normalize(val)); | ||||
|   let prevSnap = snapGrid[normalizedSnapGrid.indexOf(normalizedTranslate) - 1]; | ||||
| 
 | ||||
|   if (typeof prevSnap === 'undefined' && params.cssMode) { | ||||
|     let prevSnapIndex; | ||||
|     snapGrid.forEach((snap, snapIndex) => { | ||||
|       if (normalizedTranslate >= snap) { | ||||
|         // prevSnap = snap;
 | ||||
|         prevSnapIndex = snapIndex; | ||||
|       } | ||||
|     }); | ||||
| 
 | ||||
|     if (typeof prevSnapIndex !== 'undefined') { | ||||
|       prevSnap = snapGrid[prevSnapIndex > 0 ? prevSnapIndex - 1 : prevSnapIndex]; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   let prevIndex = 0; | ||||
| 
 | ||||
|   if (typeof prevSnap !== 'undefined') { | ||||
|     prevIndex = slidesGrid.indexOf(prevSnap); | ||||
|     if (prevIndex < 0) prevIndex = swiper.activeIndex - 1; | ||||
| 
 | ||||
|     if (params.slidesPerView === 'auto' && params.slidesPerGroup === 1 && params.slidesPerGroupAuto) { | ||||
|       prevIndex = prevIndex - swiper.slidesPerViewDynamic('previous', true) + 1; | ||||
|       prevIndex = Math.max(prevIndex, 0); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return swiper.slideTo(prevIndex, speed, runCallbacks, internal); | ||||
| } | ||||
							
								
								
									
										5
									
								
								resources/web/include/swiper/core/slide/slideReset.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										5
									
								
								resources/web/include/swiper/core/slide/slideReset.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,5 @@ | |||
| /* eslint no-unused-vars: "off" */ | ||||
| export default function slideReset(speed = this.params.speed, runCallbacks = true, internal) { | ||||
|   const swiper = this; | ||||
|   return swiper.slideTo(swiper.activeIndex, speed, runCallbacks, internal); | ||||
| } | ||||
							
								
								
									
										189
									
								
								resources/web/include/swiper/core/slide/slideTo.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										189
									
								
								resources/web/include/swiper/core/slide/slideTo.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,189 @@ | |||
| import { animateCSSModeScroll } from '../../shared/utils.js'; | ||||
| export default function slideTo(index = 0, speed = this.params.speed, runCallbacks = true, internal, initial) { | ||||
|   if (typeof index !== 'number' && typeof index !== 'string') { | ||||
|     throw new Error(`The 'index' argument cannot have type other than 'number' or 'string'. [${typeof index}] given.`); | ||||
|   } | ||||
| 
 | ||||
|   if (typeof index === 'string') { | ||||
|     /** | ||||
|      * The `index` argument converted from `string` to `number`. | ||||
|      * @type {number} | ||||
|      */ | ||||
|     const indexAsNumber = parseInt(index, 10); | ||||
|     /** | ||||
|      * Determines whether the `index` argument is a valid `number` | ||||
|      * after being converted from the `string` type. | ||||
|      * @type {boolean} | ||||
|      */ | ||||
| 
 | ||||
|     const isValidNumber = isFinite(indexAsNumber); | ||||
| 
 | ||||
|     if (!isValidNumber) { | ||||
|       throw new Error(`The passed-in 'index' (string) couldn't be converted to 'number'. [${index}] given.`); | ||||
|     } // Knowing that the converted `index` is a valid number,
 | ||||
|     // we can update the original argument's value.
 | ||||
| 
 | ||||
| 
 | ||||
|     index = indexAsNumber; | ||||
|   } | ||||
| 
 | ||||
|   const swiper = this; | ||||
|   let slideIndex = index; | ||||
|   if (slideIndex < 0) slideIndex = 0; | ||||
|   const { | ||||
|     params, | ||||
|     snapGrid, | ||||
|     slidesGrid, | ||||
|     previousIndex, | ||||
|     activeIndex, | ||||
|     rtlTranslate: rtl, | ||||
|     wrapperEl, | ||||
|     enabled | ||||
|   } = swiper; | ||||
| 
 | ||||
|   if (swiper.animating && params.preventInteractionOnTransition || !enabled && !internal && !initial) { | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   const skip = Math.min(swiper.params.slidesPerGroupSkip, slideIndex); | ||||
|   let snapIndex = skip + Math.floor((slideIndex - skip) / swiper.params.slidesPerGroup); | ||||
|   if (snapIndex >= snapGrid.length) snapIndex = snapGrid.length - 1; | ||||
| 
 | ||||
|   if ((activeIndex || params.initialSlide || 0) === (previousIndex || 0) && runCallbacks) { | ||||
|     swiper.emit('beforeSlideChangeStart'); | ||||
|   } | ||||
| 
 | ||||
|   const translate = -snapGrid[snapIndex]; // Update progress
 | ||||
| 
 | ||||
|   swiper.updateProgress(translate); // Normalize slideIndex
 | ||||
| 
 | ||||
|   if (params.normalizeSlideIndex) { | ||||
|     for (let i = 0; i < slidesGrid.length; i += 1) { | ||||
|       const normalizedTranslate = -Math.floor(translate * 100); | ||||
|       const normalizedGrid = Math.floor(slidesGrid[i] * 100); | ||||
|       const normalizedGridNext = Math.floor(slidesGrid[i + 1] * 100); | ||||
| 
 | ||||
|       if (typeof slidesGrid[i + 1] !== 'undefined') { | ||||
|         if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext - (normalizedGridNext - normalizedGrid) / 2) { | ||||
|           slideIndex = i; | ||||
|         } else if (normalizedTranslate >= normalizedGrid && normalizedTranslate < normalizedGridNext) { | ||||
|           slideIndex = i + 1; | ||||
|         } | ||||
|       } else if (normalizedTranslate >= normalizedGrid) { | ||||
|         slideIndex = i; | ||||
|       } | ||||
|     } | ||||
|   } // Directions locks
 | ||||
| 
 | ||||
| 
 | ||||
|   if (swiper.initialized && slideIndex !== activeIndex) { | ||||
|     if (!swiper.allowSlideNext && translate < swiper.translate && translate < swiper.minTranslate()) { | ||||
|       return false; | ||||
|     } | ||||
| 
 | ||||
|     if (!swiper.allowSlidePrev && translate > swiper.translate && translate > swiper.maxTranslate()) { | ||||
|       if ((activeIndex || 0) !== slideIndex) return false; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   let direction; | ||||
|   if (slideIndex > activeIndex) direction = 'next';else if (slideIndex < activeIndex) direction = 'prev';else direction = 'reset'; // Update Index
 | ||||
| 
 | ||||
|   if (rtl && -translate === swiper.translate || !rtl && translate === swiper.translate) { | ||||
|     swiper.updateActiveIndex(slideIndex); // Update Height
 | ||||
| 
 | ||||
|     if (params.autoHeight) { | ||||
|       swiper.updateAutoHeight(); | ||||
|     } | ||||
| 
 | ||||
|     swiper.updateSlidesClasses(); | ||||
| 
 | ||||
|     if (params.effect !== 'slide') { | ||||
|       swiper.setTranslate(translate); | ||||
|     } | ||||
| 
 | ||||
|     if (direction !== 'reset') { | ||||
|       swiper.transitionStart(runCallbacks, direction); | ||||
|       swiper.transitionEnd(runCallbacks, direction); | ||||
|     } | ||||
| 
 | ||||
|     return false; | ||||
|   } | ||||
| 
 | ||||
|   if (params.cssMode) { | ||||
|     const isH = swiper.isHorizontal(); | ||||
|     const t = rtl ? translate : -translate; | ||||
| 
 | ||||
|     if (speed === 0) { | ||||
|       const isVirtual = swiper.virtual && swiper.params.virtual.enabled; | ||||
| 
 | ||||
|       if (isVirtual) { | ||||
|         swiper.wrapperEl.style.scrollSnapType = 'none'; | ||||
|         swiper._immediateVirtual = true; | ||||
|       } | ||||
| 
 | ||||
|       wrapperEl[isH ? 'scrollLeft' : 'scrollTop'] = t; | ||||
| 
 | ||||
|       if (isVirtual) { | ||||
|         requestAnimationFrame(() => { | ||||
|           swiper.wrapperEl.style.scrollSnapType = ''; | ||||
|           swiper._swiperImmediateVirtual = false; | ||||
|         }); | ||||
|       } | ||||
|     } else { | ||||
|       if (!swiper.support.smoothScroll) { | ||||
|         animateCSSModeScroll({ | ||||
|           swiper, | ||||
|           targetPosition: t, | ||||
|           side: isH ? 'left' : 'top' | ||||
|         }); | ||||
|         return true; | ||||
|       } | ||||
| 
 | ||||
|       wrapperEl.scrollTo({ | ||||
|         [isH ? 'left' : 'top']: t, | ||||
|         behavior: 'smooth' | ||||
|       }); | ||||
|     } | ||||
| 
 | ||||
|     return true; | ||||
|   } | ||||
| 
 | ||||
|   if (speed === 0) { | ||||
|     swiper.setTransition(0); | ||||
|     swiper.setTranslate(translate); | ||||
|     swiper.updateActiveIndex(slideIndex); | ||||
|     swiper.updateSlidesClasses(); | ||||
|     swiper.emit('beforeTransitionStart', speed, internal); | ||||
|     swiper.transitionStart(runCallbacks, direction); | ||||
|     swiper.transitionEnd(runCallbacks, direction); | ||||
|   } else { | ||||
|     swiper.setTransition(speed); | ||||
|     swiper.setTranslate(translate); | ||||
|     swiper.updateActiveIndex(slideIndex); | ||||
|     swiper.updateSlidesClasses(); | ||||
|     swiper.emit('beforeTransitionStart', speed, internal); | ||||
|     swiper.transitionStart(runCallbacks, direction); | ||||
| 
 | ||||
|     if (!swiper.animating) { | ||||
|       swiper.animating = true; | ||||
| 
 | ||||
|       if (!swiper.onSlideToWrapperTransitionEnd) { | ||||
|         swiper.onSlideToWrapperTransitionEnd = function transitionEnd(e) { | ||||
|           if (!swiper || swiper.destroyed) return; | ||||
|           if (e.target !== this) return; | ||||
|           swiper.$wrapperEl[0].removeEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); | ||||
|           swiper.$wrapperEl[0].removeEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); | ||||
|           swiper.onSlideToWrapperTransitionEnd = null; | ||||
|           delete swiper.onSlideToWrapperTransitionEnd; | ||||
|           swiper.transitionEnd(runCallbacks, direction); | ||||
|         }; | ||||
|       } | ||||
| 
 | ||||
|       swiper.$wrapperEl[0].addEventListener('transitionend', swiper.onSlideToWrapperTransitionEnd); | ||||
|       swiper.$wrapperEl[0].addEventListener('webkitTransitionEnd', swiper.onSlideToWrapperTransitionEnd); | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   return true; | ||||
| } | ||||
|  | @ -0,0 +1,39 @@ | |||
| import $ from '../../shared/dom.js'; | ||||
| import { nextTick } from '../../shared/utils.js'; | ||||
| export default function slideToClickedSlide() { | ||||
|   const swiper = this; | ||||
|   const { | ||||
|     params, | ||||
|     $wrapperEl | ||||
|   } = swiper; | ||||
|   const slidesPerView = params.slidesPerView === 'auto' ? swiper.slidesPerViewDynamic() : params.slidesPerView; | ||||
|   let slideToIndex = swiper.clickedIndex; | ||||
|   let realIndex; | ||||
| 
 | ||||
|   if (params.loop) { | ||||
|     if (swiper.animating) return; | ||||
|     realIndex = parseInt($(swiper.clickedSlide).attr('data-swiper-slide-index'), 10); | ||||
| 
 | ||||
|     if (params.centeredSlides) { | ||||
|       if (slideToIndex < swiper.loopedSlides - slidesPerView / 2 || slideToIndex > swiper.slides.length - swiper.loopedSlides + slidesPerView / 2) { | ||||
|         swiper.loopFix(); | ||||
|         slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index(); | ||||
|         nextTick(() => { | ||||
|           swiper.slideTo(slideToIndex); | ||||
|         }); | ||||
|       } else { | ||||
|         swiper.slideTo(slideToIndex); | ||||
|       } | ||||
|     } else if (slideToIndex > swiper.slides.length - slidesPerView) { | ||||
|       swiper.loopFix(); | ||||
|       slideToIndex = $wrapperEl.children(`.${params.slideClass}[data-swiper-slide-index="${realIndex}"]:not(.${params.slideDuplicateClass})`).eq(0).index(); | ||||
|       nextTick(() => { | ||||
|         swiper.slideTo(slideToIndex); | ||||
|       }); | ||||
|     } else { | ||||
|       swiper.slideTo(slideToIndex); | ||||
|     } | ||||
|   } else { | ||||
|     swiper.slideTo(slideToIndex); | ||||
|   } | ||||
| } | ||||
							
								
								
									
										32
									
								
								resources/web/include/swiper/core/slide/slideToClosest.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								resources/web/include/swiper/core/slide/slideToClosest.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | |||
| /* eslint no-unused-vars: "off" */ | ||||
| export default function slideToClosest(speed = this.params.speed, runCallbacks = true, internal, threshold = 0.5) { | ||||
|   const swiper = this; | ||||
|   let index = swiper.activeIndex; | ||||
|   const skip = Math.min(swiper.params.slidesPerGroupSkip, index); | ||||
|   const snapIndex = skip + Math.floor((index - skip) / swiper.params.slidesPerGroup); | ||||
|   const translate = swiper.rtlTranslate ? swiper.translate : -swiper.translate; | ||||
| 
 | ||||
|   if (translate >= swiper.snapGrid[snapIndex]) { | ||||
|     // The current translate is on or after the current snap index, so the choice
 | ||||
|     // is between the current index and the one after it.
 | ||||
|     const currentSnap = swiper.snapGrid[snapIndex]; | ||||
|     const nextSnap = swiper.snapGrid[snapIndex + 1]; | ||||
| 
 | ||||
|     if (translate - currentSnap > (nextSnap - currentSnap) * threshold) { | ||||
|       index += swiper.params.slidesPerGroup; | ||||
|     } | ||||
|   } else { | ||||
|     // The current translate is before the current snap index, so the choice
 | ||||
|     // is between the current index and the one before it.
 | ||||
|     const prevSnap = swiper.snapGrid[snapIndex - 1]; | ||||
|     const currentSnap = swiper.snapGrid[snapIndex]; | ||||
| 
 | ||||
|     if (translate - prevSnap <= (currentSnap - prevSnap) * threshold) { | ||||
|       index -= swiper.params.slidesPerGroup; | ||||
|     } | ||||
|   } | ||||
| 
 | ||||
|   index = Math.max(index, 0); | ||||
|   index = Math.min(index, swiper.slidesGrid.length - 1); | ||||
|   return swiper.slideTo(index, speed, runCallbacks, internal); | ||||
| } | ||||
							
								
								
									
										10
									
								
								resources/web/include/swiper/core/slide/slideToLoop.js
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								resources/web/include/swiper/core/slide/slideToLoop.js
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,10 @@ | |||
| export default function slideToLoop(index = 0, speed = this.params.speed, runCallbacks = true, internal) { | ||||
|   const swiper = this; | ||||
|   let newIndex = index; | ||||
| 
 | ||||
|   if (swiper.params.loop) { | ||||
|     newIndex += swiper.loopedSlides; | ||||
|   } | ||||
| 
 | ||||
|   return swiper.slideTo(newIndex, speed, runCallbacks, internal); | ||||
| } | ||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 zorro.zhang
						zorro.zhang