mirror of
				https://github.com/mealie-recipes/mealie.git
				synced 2025-10-31 10:13:32 -04:00 
			
		
		
		
	* Activate more linting rules from eslint and typescript * Properly add VForm as type information * Fix usage of native types * Fix more linting issues * Rename vuetify types file, add VTooltip * Fix some more typing problems * Use composition API for more components * Convert RecipeRating * Convert RecipeNutrition * Convert more components to composition API * Fix globals plugin for type checking * Add missing icon types * Fix vuetify types in Nuxt context * Use composition API for RecipeActionMenu * Convert error.vue to composition API * Convert RecipeContextMenu to composition API * Use more composition API and type checking in recipe/create * Convert AppButtonUpload to composition API * Fix some type checking in RecipeContextMenu * Remove unused components BaseAutoForm and BaseColorPicker * Convert RecipeCategoryTagDialog to composition API * Convert RecipeCardSection to composition API * Convert RecipeCategoryTagSelector to composition API * Properly import vuetify type definitions * Convert BaseButton to composition API * Convert AutoForm to composition API * Remove unused requests API file * Remove static routes from recipe API * Fix more type errors * Convert AppHeader to composition API, fixing some search bar focus problems * Convert RecipeDialogSearch to composition API * Update API types from pydantic models, handle undefined values * Improve more typing problems * Add types to other plugins * Properly type the CRUD API access * Fix typing of static image routes * Fix more typing stuff * Fix some more typing problems * Turn off more rules
		
			
				
	
	
		
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			77 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| /* frac.js (C) 2012-present SheetJS -- http://sheetjs.com */
 | |
| /* https://developer.aliyun.com/mirror/npm/package/frac/v/0.3.0 Apache license */
 | |
| 
 | |
| function frac(x: number, D: number, mixed: boolean) {
 | |
|   let n1 = Math.floor(x);
 | |
|   let d1 = 1;
 | |
|   let n2 = n1 + 1;
 | |
|   let d2 = 1;
 | |
|   if (x !== n1)
 | |
|     while (d1 <= D && d2 <= D) {
 | |
|       const m = (n1 + n2) / (d1 + d2);
 | |
|       if (x === m) {
 | |
|         if (d1 + d2 <= D) {
 | |
|           d1 += d2;
 | |
|           n1 += n2;
 | |
|           d2 = D + 1;
 | |
|         } else if (d1 > d2) d2 = D + 1;
 | |
|         else d1 = D + 1;
 | |
|         break;
 | |
|       } else if (x < m) {
 | |
|         n2 = n1 + n2;
 | |
|         d2 = d1 + d2;
 | |
|       } else {
 | |
|         n1 = n1 + n2;
 | |
|         d1 = d1 + d2;
 | |
|       }
 | |
|     }
 | |
|   if (d1 > D) {
 | |
|     d1 = d2;
 | |
|     n1 = n2;
 | |
|   }
 | |
|   if (!mixed) return [0, n1, d1];
 | |
|   const q = Math.floor(n1 / d1);
 | |
|   return [q, n1 - q * d1, d1];
 | |
| }
 | |
| function cont(x: number, D: number, mixed: boolean) {
 | |
|   const sgn = x < 0 ? -1 : 1;
 | |
|   let B = x * sgn;
 | |
|   let P_2 = 0;
 | |
|   let P_1 = 1;
 | |
|   let P = 0;
 | |
|   let Q_2 = 1;
 | |
|   let Q_1 = 0;
 | |
|   let Q = 0;
 | |
|   let A = Math.floor(B);
 | |
|   while (Q_1 < D) {
 | |
|     A = Math.floor(B);
 | |
|     P = A * P_1 + P_2;
 | |
|     Q = A * Q_1 + Q_2;
 | |
|     if (B - A < 0.00000005) break;
 | |
|     B = 1 / (B - A);
 | |
|     P_2 = P_1;
 | |
|     P_1 = P;
 | |
|     Q_2 = Q_1;
 | |
|     Q_1 = Q;
 | |
|   }
 | |
|   if (Q > D) {
 | |
|     if (Q_1 > D) {
 | |
|       Q = Q_2;
 | |
|       P = P_2;
 | |
|     } else {
 | |
|       Q = Q_1;
 | |
|       P = P_1;
 | |
|     }
 | |
|   }
 | |
|   if (!mixed) return [0, sgn * P, Q];
 | |
|   const q = Math.floor((sgn * P) / Q);
 | |
|   return [q, sgn * P - q * Q, Q];
 | |
| }
 | |
| 
 | |
| export const useFraction = function () {
 | |
|   return {
 | |
|     frac,
 | |
|     cont,
 | |
|   };
 | |
| };
 |