Best JavaScript code snippet using ladle
dynamic-size-list.ts
Source:dynamic-size-list.ts
1import throwError from '@element-plus/utils/error'2import createList from '../builders/buildList'3import { isHorizontal } from '../utils'4import {5 AUTO_ALIGNMENT,6 CENTERED_ALIGNMENT,7 DEFAULT_DYNAMIC_LIST_ITEM_SIZE,8 DefaultListProps,9 END_ALIGNMENT,10 SMART_ALIGNMENT,11 START_ALIGNMENT,12} from '../defaults'13import type { ListCache, ListItem, ItemSize } from '../types'14import type { ExtractPropTypes } from 'vue'15type Props = ExtractPropTypes<typeof DefaultListProps>16const SCOPE = 'ElDynamicSizeList'17const getItemFromCache = (18 props: Props,19 index: number,20 listCache: ListCache,21): ListItem => {22 const { itemSize } = props23 const { items, lastVisitedIndex } = listCache24 if (index > lastVisitedIndex) {25 let offset = 026 if (lastVisitedIndex >= 0) {27 const item = items[lastVisitedIndex]28 offset = item.offset + item.size29 }30 for (let i = lastVisitedIndex + 1; i <= index; i++) {31 const size = (itemSize as ItemSize)(i)32 items[i] = {33 offset,34 size,35 }36 offset += size37 }38 listCache.lastVisitedIndex = index39 }40 return items[index]41}42const findItem = (43 props: Props,44 listCache: ListCache,45 offset: number,46) => {47 const { items, lastVisitedIndex } = listCache48 const lastVisitedOffset =49 lastVisitedIndex > 0 ? items[lastVisitedIndex].offset : 050 if (lastVisitedOffset >= offset) {51 return bs(52 props,53 listCache,54 0,55 lastVisitedIndex,56 offset,57 )58 }59 return es(60 props,61 listCache,62 Math.max(0, lastVisitedIndex),63 offset,64 )65}66// bs stands for binary search which has approximately time complexity of O(Log n)67// space complexity of O(1)68// in this case we use it for search the offset of each item, since69// the cached items' offset is monotonically increasing70const bs = (71 props: Props,72 listCache: ListCache,73 low: number,74 high: number,75 offset: number,76) => {77 while (low <= high) {78 const mid = low + Math.floor((high - low) / 2)79 const currentOffset = getItemFromCache(props, mid, listCache).offset80 if (currentOffset === offset) {81 return mid82 } else if (currentOffset < offset) {83 low = mid + 184 } else if (currentOffset > offset) {85 high = mid - 186 }87 }88 return Math.max(0, low - 1)89}90// es stands for exponential search which has time complexity of O(Log n) and91// space complexity of O(1) in the case of finding the boundary element.92// the exponential indicator in this case is 2.93// for more detail about exponential search click this link94// https://www.freecodecamp.org/news/search-algorithms-exponential-search-explained/95const es = (96 props: Props,97 listCache: ListCache,98 index: number,99 offset: number,100) => {101 const { total } = props102 let exponent = 1103 while (104 index < total &&105 getItemFromCache(props, index, listCache).offset < offset106 ) {107 index += exponent108 exponent *= 2109 }110 return bs(111 props,112 listCache,113 Math.floor(index / 2),114 Math.min(index, total - 1),115 offset,116 )117}118const getEstimatedTotalSize = (119 { total }: Props,120 { items, estimatedItemSize, lastVisitedIndex }: ListCache,121) => {122 let totalSizeOfMeasuredItems = 0123 if (lastVisitedIndex >= total) {124 lastVisitedIndex = total - 1125 }126 if (lastVisitedIndex >= 0) {127 const item = items[lastVisitedIndex]128 totalSizeOfMeasuredItems = item.offset + item.size129 }130 const numUnmeasuredItems = total - lastVisitedIndex - 1131 const totalSizeOfUnmeasuredItems = numUnmeasuredItems * estimatedItemSize132 return totalSizeOfMeasuredItems + totalSizeOfUnmeasuredItems133}134const DynamicSizeList = createList({135 name: 'ElDynamicSizeList',136 getItemOffset: (137 props,138 index,139 listCache,140 ) => getItemFromCache(props, index, listCache).offset,141 getItemSize: (142 _,143 index,144 { items },145 )=> items[index].size,146 getEstimatedTotalSize,147 getOffset: (148 props,149 index,150 alignment,151 scrollOffset,152 listCache,153 ) => {154 const { height, layout, width } = props155 const size = (isHorizontal(layout) ? width : height) as number156 const item = getItemFromCache(props, index, listCache)157 const estimatedTotalSize = getEstimatedTotalSize(props, listCache)158 const maxOffset = Math.max(159 0,160 Math.min(estimatedTotalSize - size, item.offset),161 )162 const minOffset = Math.max(163 0,164 item.offset - size + item.size,165 )166 if (alignment === SMART_ALIGNMENT) {167 if (168 scrollOffset >= minOffset - size &&169 scrollOffset <= maxOffset + size170 ) {171 alignment = AUTO_ALIGNMENT172 } else {173 alignment = CENTERED_ALIGNMENT174 }175 }176 switch (alignment) {177 case START_ALIGNMENT: {178 return maxOffset179 }180 case END_ALIGNMENT: {181 return minOffset182 }183 case CENTERED_ALIGNMENT: {184 return Math.round(minOffset + (maxOffset - minOffset) / 2)185 }186 case AUTO_ALIGNMENT:187 default: {188 if (scrollOffset >= minOffset && scrollOffset <= maxOffset) {189 return scrollOffset190 } else if (scrollOffset < minOffset) {191 return minOffset192 } else {193 return maxOffset194 }195 }196 }197 },198 getStartIndexForOffset: (199 props,200 offset,201 listCache,202 ) => findItem(props, listCache, offset),203 getStopIndexForStartIndex: (204 props,205 startIndex,206 scrollOffset,207 listCache,208 ) => {209 const { height, total, layout, width } = props210 const size = (isHorizontal(layout) ? width : height) as number211 const item = getItemFromCache(props, startIndex, listCache)212 const maxOffset = scrollOffset + size213 let offset = item.offset + item.size214 let stopIndex = startIndex215 while (stopIndex < total - 1 && offset < maxOffset) {216 stopIndex++217 offset += getItemFromCache(props, stopIndex, listCache).size218 }219 return stopIndex220 },221 initCache({ estimatedItemSize = DEFAULT_DYNAMIC_LIST_ITEM_SIZE }, instance) {222 const cache = {223 items: {},224 estimatedItemSize,225 lastVisitedIndex: -1,226 } as ListCache227 cache.clearCacheAfterIndex = (index: number,228 forceUpdate = true) => {229 cache.lastVisitedIndex = Math.min(230 cache.lastVisitedIndex,231 index - 1,232 )233 instance.exposed.getItemStyleCache(-1)234 if (forceUpdate) {235 instance.proxy.$forceUpdate()236 }237 }238 return cache239 },240 clearCache: false,241 validateProps: ({ itemSize }) => {242 if (process.env.NODE_ENV !== 'production') {243 if (typeof itemSize !== 'function') {244 throwError(SCOPE, `245 itemSize is required as function, but the given value was ${typeof itemSize}246 `)247 }248 }249 },250})...
_ListCache.js
Source:_ListCache.js
...9 * @private10 * @constructor11 * @param {Array} [entries] The key-value pairs to cache.12 */13function ListCache(entries) {14 var index = -1,15 length = entries ? entries.length : 0;16 this.clear();17 while (++index < length) {18 var entry = entries[index];19 this.set(entry[0], entry[1]);20 }21}22// Add methods to `ListCache`.23ListCache.prototype.clear = listCacheClear;24ListCache.prototype['delete'] = listCacheDelete;25ListCache.prototype.get = listCacheGet;26ListCache.prototype.has = listCacheHas;27ListCache.prototype.set = listCacheSet;...
Using AI Code Generation
1var ladle = require('ladle');2var ListCache = ladle.ListCache;3var cache = new ListCache();4cache.put('foo', 'bar');5cache.put('baz', 'quux');6console.log(cache.get('foo'));7console.log(cache.get('baz'));8put(key, value)9get(key)10var ladle = require('ladle');11var ListCache = ladle.ListCache;12var cache = new ListCache();13cache.put('foo', 'bar');14cache.put('baz', 'quux');15console.log(cache.get('foo'));16console.log(cache.get('baz'));17put(key, value)18get(key)
Using AI Code Generation
1var ladle = require('ladle');2var ListCache = ladle.ListCache;3var list = new ListCache();4list.set('foo', 'bar');5console.log(list.get('foo'));6var ladle = require('ladle');7var MapCache = ladle.MapCache;8var map = new MapCache();9map.set('foo', 'bar');10console.log(map.get('foo'));11var ladle = require('ladle');12var SetCache = ladle.SetCache;13var set = new SetCache();14set.set('foo');15console.log(set.has('foo'));16var ladle = require('ladle');17var Stack = ladle.Stack;18var stack = new Stack();19stack.push('foo');20console.log(stack.pop());21var ladle = require('ladle');22var baseIndexOf = ladle.baseIndexOf;23var array = [1, 2, 3];24console.log(baseIndexOf(array, 2));25var ladle = require('ladle');26var baseIsEqual = ladle.baseIsEqual;27var object = { 'a': 1 };28var other = { 'a': 1 };29console.log(baseIsEqual(object, other));30var ladle = require('ladle');31var baseIsEqualDeep = ladle.baseIsEqualDeep;32var object = { 'a': 1 };33var other = { 'a': 1 };34console.log(baseIsEqualDeep(object, other));35var ladle = require('ladle');36var baseIsMatch = ladle.baseIsMatch;37var object = { 'a': 1 };38var source = { 'a': 1 };39console.log(baseIsMatch(object, source));40var ladle = require('ladle');41var baseKeys = ladle.baseKeys;
Using AI Code Generation
1var ladle = require('ladle');2var listCache = new ladle.ListCache();3listCache.add('item1');4listCache.add('item2');5listCache.add('item3');6var items = listCache.getAll();7var count = listCache.getCount();8var item = listCache.get(1);9listCache.remove(1);10listCache.clear();11var isEmpty = listCache.isEmpty();12var contains = listCache.contains('item1');13var contains = listCache.contains('item1', function(item1, item2) {14 return item1 === item2;15});16var index = listCache.indexOf('item1');17var index = listCache.indexOf('item1', function(item1, item2) {18 return item1 === item2;19});20var firstItem = listCache.first();21var lastItem = listCache.last();22var nextItem = listCache.next();23var previousItem = listCache.previous();24var currentItem = listCache.current();25var currentIndex = listCache.currentIndex();26var firstItem = listCache.first();27var lastItem = listCache.last();28var nextItem = listCache.next();29var previousItem = listCache.previous();30var currentItem = listCache.current();31var currentIndex = listCache.currentIndex();32listCache.reset();
Using AI Code Generation
1var ListCache = require('ListCache');2var ListCache = require('ListCache');3var ListCache = require('ListCache');4var ListCache = require('ListCache');5var ListCache = require('ListCache');6var ListCache = require('ListCache');7var ListCache = require('ListCache');8var ListCache = require('ListCache');
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!