Best JavaScript code snippet using playwright-internal
app.js
Source:app.js  
1var types = [				//è£å種é¡é¸é 
2	{val:'wp01' ,name:'å'},3	{val:'wp02' ,name:'æ§'},4	{val:'wp03' ,name:'æ§'},5	{val:'wp04' ,name:'å¼'},6	{val:'wp05' ,name:'æ'},7	{val:'wp06' ,name:'å°å'},8	{val:'wp07' ,name:'ååé¢'},9	{val:'wp08' ,name:'ç¸å½'},10	{val:'sh01' ,name:'é ç'},11	{val:'sh02' ,name:'帽å'},12	{val:'sh03' ,name:'é§ç²'},13	{val:'sh04' ,name:'è¡£æ'},14	{val:'sh05' ,name:'è¢'},15	{val:'sh06' ,name:'é´'},16	{val:'sh07' ,name:'éå'},17	{val:'sh08' ,name:'ç¾'},18	{val:'md01' ,name:'è¥æ°´'},19	{val:'fd01' ,name:'æç'},20	{val:'sp01' ,name:'飾å'},21	{val:'pa01' ,name:'å¯µç©æè£'},22	{val:'pa02' ,name:'寵ç©è£ç²'},23	{val:'pa03' ,name:'寵ç©é 
å'},24	{val:'pa04' ,name:'å¯µç©æ¶ç³'},25	{val:'pa05' ,name:'寵ç©é£¾å'}26];27var product;28var useMts = [];29var readyToSave = false,30	orderItem;31$(function(){32	$('#prd_match').addOption('all', 'ææè£å');33	for(var i=0;i<types.length;i++){		//ç¢çè£å種é¡é¸é 
æ¸
å®34		$('#type,#prd_match').addOption(types[i].val, types[i].name);35	}36	$('#prd_match').val('all');37	var mt_match = $('#mt_match');38	var option;39	for(var i=0;i<materials.length;i++){40		mt_match.addOption(materials[i].code, materials[i].name);41		option = mt_match.find('option:last');42		if(/w[0-9]/.test(materials[i].code))43			option.addClass('wood');44		if(/m[0-9]/.test(materials[i].code))45			option.addClass('mineral');46		if(/c[0-9]/.test(materials[i].code))47			option.addClass('cloth');48		if(/f[0-9]/.test(materials[i].code))49			option.addClass('flower');50		if(/g[0-9]/.test(materials[i].code))51			option.addClass('food');52		if(/s[0-9]/.test(materials[i].code))53			option.addClass('special');54	}55	mt_match.val('m101');56	57	$('#mt_match').val('m101');58	$('.plus_list').data('mt_list', []);59	$('.minus_list').data('mt_list', []);60	$('#type')61		.val('wp01')62		.find('option')63			.slice(0,8)64				.css('background-color', '#708090')65			.end()66			.slice(8,16)67				.css('background-color', '#80A0C0')68			.end()69			.slice(16,19)70				.css('background-color', '#90C0F0');71	genEqpList($('#type').val());		//ç¢çè£åé 
ç®æ¸
å®72	noticeBoard.init();					//030873	74	$('#type').change(function(){		//ç±è£å種é¡é¸é 
ç¢çè£åé 
ç®æ¸
å®75		//var index = $(this)[0].selectedIndex;76		var index = $(this).selectedOptions().first().index();77		var tc;78		clearTable();79		useMts = [];80		81		tc = (function(){82			if(index >= 8)83				return (index >= 16)? '#90C0F0' : '80A0C0';84			else85				return '#708090';86		}());87		88		$(this).add('#product').css('background-color', tc);89		genEqpList($(this).val());90	});91	92	$('#product').change(function(){	//ç±ä½¿ç¨è
鏿çè£åé¡¯ç¤ºåºæéææ93		clearTable();94		setProduct();95	});96	97	$('#slots').keydown(function(event){ //輸å
¥å®æ¸éå¾ï¼æä¸Enterè¦çºæä¸è¨ç®æé98		if(event.which == 13)			//Enter99			$('#calc').click();100	});101	$('.sbtn').click(function(){102		if(readyToSave)103			noticeBoard.save(orderItem);104	});105	$('.plus_btn').click(function(){		// æ£å表åå å
¥æ¸
å®106		var mt = findMaterial($('#mt_match').val());107		var mt_plist = $('.plus_list').data('mt_list');108		var mt_mlist = $('.minus_list').data('mt_list');109		var dunplicate = false;110		for(var i=0;i<mt_plist.length;i++){111			if(mt_plist[i].code == mt.code)112				dunplicate = true;113		}114		for(var i=0;i<mt_mlist.length;i++){115			if(mt_mlist[i].code == mt.code)116				dunplicate = true;117		}118		if(!dunplicate && (mt_plist.length < 5)){119			mt_plist.push(mt);120			$('.plus_list').data('mt_list', mt_plist);121			$('.plus_list').append('<span class="p_list_item">' + mt.name + '</sapn>');122		}123	});124	$('.minus_btn').click(function(){		// è² å表åå å
¥æ¸
å®125		var mt = findMaterial($('#mt_match').val());126		var mt_plist = $('.plus_list').data('mt_list');127		var mt_mlist = $('.minus_list').data('mt_list');128		var dunplicate = false;129		for(var i=0;i<mt_plist.length;i++){130			if(mt_plist[i].code == mt.code)131				dunplicate = true;132		}133		for(var i=0;i<mt_mlist.length;i++){134			if(mt_mlist[i].code == mt.code)135				dunplicate = true;136		}137		if(!dunplicate && (mt_mlist.length < 5)){138			mt_mlist.push(mt);139			$('.minus_list').data('mt_list', mt_mlist);140			$('.minus_list').append('<span class="m_list_item">' + mt.name + '</sapn>');141		}142	});143	$('.plus_list').on('click', 'span', function(){144		var mt_plist = $('.plus_list').data('mt_list');145		var selected_mt = $(this).text();146		var new_list = [];147		for(var i=0;i<mt_plist.length;i++){148			if(mt_plist[i].name != selected_mt)149				new_list.push(mt_plist[i]);150		}151		$('.plus_list').data('mt_list', new_list);152		$(this).remove();153	});154	$('.minus_list').on('click', 'span', function(){155		var mt_mlist = $('.minus_list').data('mt_list');156		var selected_mt = $(this).text();157		var new_list = [];158		for(var i=0;i<mt_mlist.length;i++){159			if(mt_mlist[i].name != selected_mt)160				new_list.push(mt_mlist[i]);161		}162		$('.minus_list').data('mt_list', new_list);163		$(this).remove();164	});165	$('.mbtn').click(function(){166		// 167		var type = $('#prd_match').val();168		var mt = $('#mt_match').val();169		var mt_plist = $('.plus_list').data('mt_list');170		var mt_mlist = $('.minus_list').data('mt_list');171		var count = 0;172		var first_val = '';173		var plus_compare = true;174		var minus_compare = false;175		var prd, _type, compare_result;176		$('.match, .nomatch').hide();177		$('#match_list').removeOption(/./);	//æ¸
é¤è£åé 
ç®æ¸
å®178		if(type == 'all'){179			for(var i=0;i<types.length;i++){180				_type = types[i].val;181				for(var j=0;j<recipe[_type].length;j++){182					prd = recipe[_type][j];183					plus_compare = true;184					minus_compare = false;185					for(var pl=0; pl<mt_plist.length; pl++){186						plus_compare &= containsMaterial(prd, mt_plist[pl].code);187					}188					for(var ml=0;ml<mt_mlist.length;ml++){189						minus_compare |= containsMaterial(prd, mt_mlist[ml].code);190					}191					compare_result = (!minus_compare) && plus_compare;192					if(compare_result){193						$('#match_list').addOption((_type+'_'+j), ('Lv.' + prd.level + ' ' + prd.name));194						if(first_val == '')195								first_val = (_type+'_'+j);196						count++;197					}198				}199			}200		}201		else{202			for(var j=0;j<recipe[type].length;j++){203				prd = recipe[type][j];204				plus_compare = true;205				minus_compare = false;206				for(var pl=0; pl<mt_plist.length; pl++){207					plus_compare &= containsMaterial(prd, mt_plist[pl].code);208				}209				for(var ml=0;ml<mt_mlist.length;ml++){210					minus_compare |= containsMaterial(prd, mt_mlist[ml].code);211				}212				compare_result = (!minus_compare) && plus_compare;213				if(compare_result){214					$('#match_list').addOption((type+'_'+j), ('Lv.' + prd.level + ' ' + prd.name));215					if(first_val == '')216							first_val = (type+'_'+j);217					count++;218				}219			}220		}221		if(count > 0){222			$('.match .count').html('總å
±æ¾å° ' + count + ' 種è£åã')223			$('.match').show();224			$('#match_list').val(first_val).change();225		}226		else227			$('.nomatch').html('æ¾ä¸å°åé©çè£åï¼ï¼').show();228	});229	$('#match_list').change(function(){230		var type = $(this).val().split('_')[0];231		var index = $(this).val().split('_')[1];232		$('#type').val(type);233		genEqpList(type);234		$('#product').val(index).change();235	});236	$('#match_list').click(function(){237		$(this).change();238	});239	$('.close').on('click', function(){240		var noticeId = parseInt($(this).data('nid'), 10)241			div = $(this).closest('div');242		noticeBoard.delete(noticeId, div);243	});244	$('#noticeBoard').on('click', '.mt-item', function(){245		noticeBoard.mark(this);246	});247	248	$('#calc').click(function(){249		var useSlots = 0;	//總å
±æé空格æ¸é250		var result = '';251		var j;252		var str, idstr;253		var dt = new Date();254		var items;	//å®ä¸æææ¸é255		var type = $('#type').val();256		var method = $('input[name=method]:checked').val();		//è®å使ç¨è
æéä¹è¨ç®æ¹å¼257		// method1 : ä¾ä½¿ç¨è
å¡«å
¥ä¹ç©ºæ ¼æ¸éè¨ç®åºå¯çç¢ä¹ç©åæ¸é258		// method2 : ä¾ä½¿ç¨è
å¡«å
¥ä¹çç¢ç©åæ¸éè¨ç®åºæéä¹ç©ºæ ¼æ¸é259		orderItem = {260			id: noticeBoard.orderItems.idSeed++,261			qty: 0,262			product: product.name,				//0308 è¨éç¢åå稱263			mts: [],264			code: product.code,					//0825 è¨éç¢å代碼265			type: type							//0825 è¨éç¢å種é¡266		};267		readyToSave = false;268		$('.sbtn').hide();269		270		if(method == 'method1'){271			var count = 0;	//å¯çç¢ç©åæ¸é272			var slots = parseInt($('#slots').val());	//空格æ¸é273			if(useMts.length <= slots){274				while(useSlots <= slots){275					count++;276					useSlots = 0;277					for(var i=0;i<useMts.length;i++){278						useSlots += Math.ceil((product['qty'+(i+1)]*count) / useMts[i].set);279					}280				}281				count--;282				useSlots = 0;283				284				for(var i=0;i<5;i++){285					j = i + 1;286					if(i < useMts.length){287						items = product['qty'+j] * count;288						str = new String(Math.floor(items / useMts[i].set)).fontcolor('blue') + ' ' + useMts[i].unit;289						if((items % useMts[i].set) != 0){290							str += 'å ' + new String(items % useMts[i].set).fontcolor('blue') + ' å';291						}292						useSlots += Math.ceil(items / useMts[i].set);293						294						$('#slt'+j).html(str);	//0828 顯示æ¬ä½ç°å295						orderItem.mts.push({296							code: useMts[i].code,297							text: useMts[i].name + ' ' + str298						});	//0825 è¨éä½¿ç¨ææèçµæ¸299					}300					else{301						$('#slt'+j).html(' ');	//0828 顯示æ¬ä½ç°å302						orderItem.mts.push({303							code: '',304							text: ' '305						});	//0825 è¨éempty306					}307				}308				if(type == 'wp08'){		// ç¸å½309					str = new String(count).fontcolor('red') + ' 次 / å
± ';310					str += new String(count * product.pcs).fontcolor('blue') + ' å ';311					orderItem.qty = (count * product.pcs);	//0308 è¨éçç¢æ¸é(ç¸å½)312				}313				else{314					str = new String(count).fontcolor('red') + ' å ';315					orderItem.qty = count;					//0308  è¨éçç¢æ¸é316				}317				318				$('#pqty').html('å¯çç¢ ' + product.name.fontcolor('blue') + ' ' + new String(count).fontcolor('red') + ' å');319				//0828 顯示æ¬ä½ç°å320				$('#uslt').html('å
±éç©åæ¬ ' + new String(useSlots).fontcolor('red') + ' æ ¼');	//0828 顯示æ¬ä½ç°å321				readyToSave = true;322				$('.sbtn').show();323				$('#errMessage').hide();324			}325			else{326				$('#errMessage').html('å¯ä½¿ç¨æ ¼æ¸ä¸è¶³ï¼ï¼').show();327				$('#pqty,#uslt').html(' ');328			}329		}330		else{331			var qty = parseInt($('#slots').val());332			if(type == 'wp08'){333				qty = Math.ceil(qty / product.pcs);334			}335			orderItem.qty = qty;				//0308  è¨éçç¢æ¸é336			for(var i=0;i<5;i++){337				j = i+1;338				if(i < useMts.length){339					items = product['qty'+j] * qty;340					useSlots += Math.ceil(items / useMts[i].set);341					342					str = new String(Math.floor(items / useMts[i].set)).fontcolor('blue') + ' ' + useMts[i].unit;343					if((items % useMts[i].set) != 0)344						str += 'å ' + new String(items % useMts[i].set).fontcolor('blue') + ' å';345					346					$('#slt'+j).html(str);	//0828 顯示æ¬ä½ç°å347					orderItem.mts.push({348						code: useMts[i].code,349						text: useMts[i].name + ' ' + str350					});	//0825 è¨éä½¿ç¨ææèçµæ¸351				}352				else{353					$('#slt'+j).html(' ');	//0828 顯示æ¬ä½ç°å354					orderItem.mts.push({355						code: '',356						text: ' '357					});	//0825 è¨éempty358				}359			}360			361			readyToSave = (qty != 0);362			if(readyToSave){363				$('#pqty').html('å¯çç¢ ' + product.name.fontcolor('blue') + ' ' + new String(qty).fontcolor('red') + ' å');364				//0828 顯示æ¬ä½ç°å365				$('#uslt').html('å
±éç©åæ¬ ' + new String(useSlots).fontcolor('red') + ' æ ¼');	//0828 顯示æ¬ä½ç°å366				$('.sbtn').show();367				$('#errMessage').hide();368			}369			else{370				$('#errMessage').html('çç¢æ¸éçº 0ï¼ï¼').show();371				$('#pqty,#uslt').html(' ');372			}373		}374	});375	376});377function findMaterial(code){	//ç±ææç·¨èæ¥è©¢ææå
§å®¹378	var m;379	for(var i=0;i<materials.length;i++)380		if(materials[i].code == code){381			m = materials[i];382			break;383		}384	return m;385}386function clearTable(){		//æ¸
é¤æé¡¯ç¤ºä¹ææè¡¨387	for(var i=1;i<=5;i++){388		$('#slt'+i).html(' ');389	}390	$('#pqty,#uslt,#errMessage').html(' ');391}392function fillMaterial(product){		//顯示è£åç©å乿æè¡¨ï¼ä¸¦è¨éæé乿æ393	var mt, tpl;394	395	for(var i=1;i<=5;i++){396		mt = findMaterial(product['mt'+i]);	//ç±ææç·¨èæ¥è©¢å°æçææ397		tpl = $('#n_mt'+i);398		if(mt){399			tpl.find('img')400				.attr('src','images/pic/' + mt.code + '.gif')401				.data('code', mt.code)402				.mousedown(function(e){403					$('#mt_match').val($(this).data('code'));404					if(e.which == 1)405						$('.plus_btn').click();406					if(e.which == 3)407						$('.minus_btn').click();408				})409				.contextmenu(function(){return false;});410			tpl.find('.qty').html(product['qty'+i]);411			tpl.find('.name').html('(' + mt.set + ')<br>' + mt.name);412			useMts.push(mt);413		}414		else{415			tpl.find('img').attr('src','images/pic/blank.gif');416			tpl.find('.qty').html(' ');417			tpl.find('.name').html(' ');418		}419	}420}421function containsMaterial(product, mt_code){422	for(var i=1;i<=5;i++){423		if(product['mt'+i] == mt_code)424			return true;425	}426	return false;427}428function setProduct(){429	var type = $('#type').val();430	useMts = [];431	product = recipe[type][$('#product').val()];432	var src ='images/pic/' + type + '/' + product.code + '.gif';433	$('#n_prd').find('img').attr('src', src);434	$('#n_prd').find('.name').html(product.name);435	if(type == 'wp08')436		$('#n_prd').find('.qty').html(product.pcs);437	fillMaterial(product);438}439function genEqpList(type){440	var products = recipe[type];441	442	$('#product').removeOption(/./);	//æ¸
é¤è£åé 
ç®æ¸
å®443	for(var i=0;i<products.length;i++){	//ç¢çè£åé 
ç®æ¸
å®444		$('#product').addOption(i, ('Lv.' + products[i].level + ' ' + products[i].name));445	}446	$('#n_prd').find('.qty').html(' ');447	$('#product')448		.val(0)449		.find('option')450		.each(function(){451			var lv = 0;452			var txt = $.trim($(this).text().substring(3, 5));453			lv = parseInt(txt);454			if((lv % 2) != 0){455				$(this).css({456					'background-color':'#333',457					'color':'#FFFF33'458				});459			}460		})461		.css('border', 'dashed 1px #808080');462	setProduct();...notice1.mm.full.js
Source:notice1.mm.full.js  
1    var types = [               //è£å種é¡é¸é 
2        {val:'wp01' ,name:'å'},3        {val:'wp02' ,name:'æ§'},4        {val:'wp03' ,name:'æ§'},5        {val:'wp04' ,name:'å¼'},6        {val:'wp05' ,name:'æ'},7        {val:'wp06' ,name:'å°å'},8        {val:'wp07' ,name:'ååé¢'},9        {val:'wp08' ,name:'ç¸å½'},10        {val:'sh01' ,name:'é ç'},11        {val:'sh02' ,name:'帽å'},12        {val:'sh03' ,name:'é§ç²'},13        {val:'sh04' ,name:'è¡£æ'},14        {val:'sh05' ,name:'è¢'},15        {val:'sh06' ,name:'é´'},16        {val:'sh07' ,name:'éå'},17        {val:'sh08' ,name:'ç¾'},18        {val:'md01' ,name:'è¥æ°´'},19        {val:'fd01' ,name:'æç'}20    ];21    var product;22    var useMts = [];23    var readyToSave = false,24        orderItem;25    26    $(function(){27        for(var i=0;i<types.length;i++)     //ç¢çè£å種é¡é¸é 
æ¸
å®28            $('#type').addOption(types[i].val, types[i].name);29        30        $('#resultTable1')31            .add('#resultTable2')32            .find('div')33            .css('font-family', 'Verdana');34        35        $('#type')36            .val('wp01')37            .find('option')38                .slice(0,8)39                    .css('background-color', '#708090')40                .end()41                .slice(8,16)42                    .css('background-color', '#80A0C0')43                .end()44                .slice(16,18)45                    .css('background-color', '#90C0F0');46        genEqpList($('#type').val());       //ç¢çè£åé 
ç®æ¸
å®47        noticeBoard.init();                 //030848        49        $('#type').change(function(){       //ç±è£å種é¡é¸é 
ç¢çè£åé 
ç®æ¸
å®50            //var index = $(this)[0].selectedIndex;51            var index = $(this).selectedOptions().first().index();52            var tc;53            clearTable();54            useMts = [];55            56            tc = (function(){57                if(index >= 8)58                    return (index >= 16)? '#90C0F0' : '80A0C0';59                else60                    return '#708090';61            }());62            63            $(this).add('#product').css('background-color', tc);64            $('#result').html('');65            genEqpList($(this).val());66        });67        68        $('#product').change(function(){    //ç±ä½¿ç¨è
鏿çè£åé¡¯ç¤ºåºæéææ69            clearTable();70            setProduct();71            $('#resultTable1')              //æ¸
é¤å次æé¡¯ç¤ºçè¨ç®çµæ72                .add('#resultTable2')73                .add('#errMessage')74                .hide();75        });76        77        $('#slots').keydown(function(event){ //輸å
¥å®æ¸éå¾ï¼æä¸Enterè¦çºæä¸è¨ç®æé78            if(event.which == 13)           //Enter79                $('#calc').click();80        });81        $('.sbtn').click(function(){82            if(readyToSave){83                noticeBoard.save(orderItem);84            }85            else86                console.log('Not Ready To Save...');87        })88        $('.close').on('click', function(){89            var noticeId = parseInt($(this).data('nid'), 10)90                div = $(this).closest('div');91            noticeBoard.delete(noticeId, div);92        });93        $('#noticeBoard').on('click', '.mt-item', function(){94            noticeBoard.mark(this);95        });96        97        $('#calc').click(function(){98            var useSlots = 0;   //總å
±æé空格æ¸é99            var result = '';100            var j;101            var str, idstr;102            var dt = new Date();103            var items;  //å®ä¸æææ¸é104            var type = $('#type').val();105            var method = $('input[name=method]:checked').val();     //è®å使ç¨è
æéä¹è¨ç®æ¹å¼106            // method1 : ä¾ä½¿ç¨è
å¡«å
¥ä¹ç©ºæ ¼æ¸éè¨ç®åºå¯çç¢ä¹ç©åæ¸é107            // method2 : ä¾ä½¿ç¨è
å¡«å
¥ä¹çç¢ç©åæ¸éè¨ç®åºæéä¹ç©ºæ ¼æ¸é108            $('#resultTable1, #resultTable2, #errMessage').hide();  //æ¸
é¤å次æé¡¯ç¤ºçè¨ç®çµæ109            orderItem = {110                id: noticeBoard.orderItems.idSeed++,111                qty: 0,112                product: product.name,              //0308 è¨éç¢åå稱113                mts:[]114            };115            readyToSave = false;116            117            if(method == 'method1'){118                var count = 0;  //å¯çç¢ç©åæ¸é119                var slots = parseInt($('#slots').val());    //空格æ¸é120                if(useMts.length <= slots){121                    while(useSlots <= slots){122                        count++;123                        useSlots = 0;124                        for(var i=0;i<useMts.length;i++){125                            useSlots += Math.ceil((product['qty'+(i+1)]*count) / useMts[i].set);126                        }127                    }128                    count--;129                    130                    $('#pname1').html(product.name);131                    132                    for(var i=0;i<5;i++){133                        j = i + 1;134                        if(i < useMts.length){135                            items = product['qty'+j] * count;136                            str = new String(Math.floor(items / useMts[i].set)).fontcolor('blue') + ' çµ';137                            if((items % useMts[i].set) != 0)138                                str += 'å ' + new String(items % useMts[i].set).fontcolor('blue') + ' å';139                            140                            $('#p1mt'+j).html(useMts[i].name);141                            $('#p1slt'+j).html(str);142                            orderItem.mts.push(useMts[i].name + ' ' + str); //0308 è¨éä½¿ç¨ææèçµæ¸143                        }144                        else{145                            $('#p1mt'+j).html(' ');146                            $('#p1slt'+j).html(' ');147                            orderItem.mts.push(' ');   //0308 empty148                        }149                    }150                    if(type == 'wp08'){     // ç¸å½151                        str = new String(count).fontcolor('red') + ' 次 / å
± ';152                        str += new String(count * product.pcs).fontcolor('blue') + ' å ';153                        orderItem.qty = (count * product.pcs);  //0308 è¨éçç¢æ¸é(ç¸å½)154                    }155                    else{156                        str = new String(count).fontcolor('red') + ' å ';157                        orderItem.qty = count;                  //0308  è¨éçç¢æ¸é158                    }159                    160                    $('#pqty1').html(str);161                    $('#resultTable1').show();162                    readyToSave = true;163                }164                else{165                    $('#errMessage').html('å¯ä½¿ç¨æ ¼æ¸ä¸è¶³ï¼ï¼').show();166                }167            }168            else{169                var qty = parseInt($('#slots').val());170                if(type == 'wp08'){171                    qty = Math.floor(qty / product.pcs);172                }173                orderItem.qty = qty;                //0308  è¨éçç¢æ¸é174                $('#pname2').html(product.name);175                $('#pqty2').html(new String(qty).fontcolor('red'));176                177                for(var i=0;i<5;i++){178                    j = i+1;179                    if(i < useMts.length){180                        items = product['qty'+j] * qty;181                        useSlots += Math.ceil(items / useMts[i].set);182                        183                        $('#p2mt'+j).html(useMts[i].name);184                        185                        str = new String(Math.floor(items / useMts[i].set)).fontcolor('blue') + ' çµ';186                        if((items % useMts[i].set) != 0)187                            str += 'å ' + new String(items % useMts[i].set).fontcolor('blue') + ' å';188                        189                        $('#p2slt'+j).html(str);190                        orderItem.mts.push(useMts[i].name + ' ' + str); //0308 è¨éä½¿ç¨ææèçµæ¸191                    }192                    else{193                        $('#p2mt'+j).html(' ');194                        $('#p2slt'+j).html(' ');195                        orderItem.mts.push(' ');           //0308 empty196                    }197                }198                $('#p2uslt').html(new String(useSlots).fontcolor('red') + ' æ ¼');199                $('#resultTable2').show();200                readyToSave = (qty != 0);201            }202        });203        204    });205    206    function findMaterial(code){    //ç±ææç·¨èæ¥è©¢ææå
§å®¹207        var m;208        for(var i=0;i<materials.length;i++)209            if(materials[i].code == code){210                m = materials[i];211                break;212            }213        return m;214    }215    216    function clearTable(){      //æ¸
é¤æé¡¯ç¤ºä¹ææè¡¨217        for(var i=1;i<=5;i++){218            $('#mt'+i).html(' ');219            $('#set'+i).html(' ');220        }221    }222    function fillMaterial(product){     //顯示è£åç©å乿æè¡¨ï¼ä¸¦è¨éæé乿æ223        var mt;224        225        for(var i=1;i<=5;i++){226            mt = findMaterial(product['mt'+i]);227            if(mt){228                $('#mt'+i).html(mt.name + ' x ' + product['qty'+i]);229                $('#set'+i).html(mt.set + ' pcs/çµ');230                useMts.push(mt);231            }232        }233    }234    235    function setProduct(){236        useMts = [];237        product = recipe[$('#type').val()][$('#product').val()];238        fillMaterial(product);239    }240    241    function genEqpList(type){242        var products = recipe[type];243        244        $('#product').removeOption(/./);    //æ¸
é¤è£åé 
ç®æ¸
å®245        for(var i=0;i<products.length;i++)  //ç¢çè£åé 
ç®æ¸
å®246            $('#product').addOption(i, ('Lv.' + products[i].level + ' ' + products[i].name));247        $('#product')248            .val(0)249            .find('option')250            .each(function(){251                var lv = 0;252                var txt = $.trim($(this).text().substring(3, 5));253                lv = parseInt(txt);254                if((lv % 2) != 0){255                    $(this).css({256                        'background-color':'#333',257                        'color':'#FFFF33'258                    });259                }260            })261            .css('border', 'dashed 1px #808080');262        setProduct();263    }264    var noticeBoard = {265        orderItems : {},266        init : function(){267            var result = localStorage.getItem('orderItems');268            if(result !== null){269                noticeBoard.orderItems = JSON.parse(result);270                noticeBoard.show();271            }272            else{273                noticeBoard.orderItems.idSeed = 0;274                noticeBoard.orderItems.items = [];275            }       276        },277        save : function(item){278            var ois = noticeBoard.orderItems,279                marked = ['u','u','u','u','u'];280            281            item.m = marked;282            ois.items.push(item);283            noticeBoard.update(ois);284            noticeBoard.showNotice(item, 0);285        },286        delete : function(id, div){287            var orderItems = noticeBoard.orderItems,288                items = orderItems.items,289                index = noticeBoard.getIndex(id);290            if(index != -1){291                items.splice(index,1);292                div.fadeOut(1000, function() {293                    this.remove();294                });295                noticeBoard.update(orderItems);296            }297        },298        update : function(ois){299            localStorage.setItem('orderItems', JSON.stringify(ois));300        },301        mark : function(div){302            var panel = $(div),303                m_index = panel.data('m'),304                notice = panel.closest('.notice'),305                noticeId = parseInt(notice.find('.close').data('nid'), 10),306                orderItems = noticeBoard.orderItems,307                items = orderItems.items,308                item_index = noticeBoard.getIndex(noticeId),309                marked;310            if(item_index != -1){311                marked = items[item_index].m[m_index];312                if(marked==='m'){313                    marked = 'u';314                    panel.css('text-decoration', 'none');315                }316                else{317                    marked = 'm';318                    panel.css('text-decoration', 'line-through');319                }320                items[item_index].m[m_index] = marked;321                noticeBoard.update(orderItems);322                // localStorage.setItem('orderItems', JSON.stringify(orderItems));323            };324        },325        getIndex : function(id){326            var orderItems = noticeBoard.orderItems,327                items = orderItems.items,328                index = -1;329            for(var i=0;i<items.length;i++){330                if(id == items[i].id)331                    index = i;332            }333            return index;334        },335        showNotice : function(item, i){336            var notice = $('#noticeTemplate').clone(true),337                delay = 600,338                panels = [];339            notice340                .removeClass('template')341                .removeAttr('id')342                .find('.close')343                    .data('nid', item.id)344                .end()345                .find('h3')346                    .html(item.product + (' X ' + item.qty).fontcolor('#822'))347                .end()348                .hide()349                .appendTo('#noticeBoard')350                .delay(delay*i)351                .fadeIn(delay);352            panels = notice.find('.mt-item');353            $.each(panels, function(index,panel){354                $(panel)355                    .html(item.mts[index])356                    .data('m', index);357                if(item.m[index] == 'm')358                    $(panel).addClass('marked');359            });360        },361        show : function(){362            var result = localStorage.getItem('orderItems'),363                orderItems = JSON.parse(result),364                items = orderItems.items;365            $('#noticeBoard').html('');366            for(var i=0;i<items.length;i++){367                noticeBoard.showNotice(items[i], i);368            }369        }...notice.mm.full.js
Source:notice.mm.full.js  
1	var types = [				//è£å種é¡é¸é 
2		{val:'wp01' ,name:'å'},3		{val:'wp02' ,name:'æ§'},4		{val:'wp03' ,name:'æ§'},5		{val:'wp04' ,name:'å¼'},6		{val:'wp05' ,name:'æ'},7		{val:'wp06' ,name:'å°å'},8		{val:'wp07' ,name:'ååé¢'},9		{val:'wp08' ,name:'ç¸å½'},10		{val:'sh01' ,name:'é ç'},11		{val:'sh02' ,name:'帽å'},12		{val:'sh03' ,name:'é§ç²'},13		{val:'sh04' ,name:'è¡£æ'},14		{val:'sh05' ,name:'è¢'},15		{val:'sh06' ,name:'é´'},16		{val:'sh07' ,name:'éå'},17		{val:'sh08' ,name:'ç¾'},18		{val:'md01' ,name:'è¥æ°´'},19		{val:'fd01' ,name:'æç'}20	];21	var product;22	var useMts = [];23	var readyToSave = false,24		orderItem;25	26	$(function(){27		for(var i=0;i<types.length;i++)		//ç¢çè£å種é¡é¸é 
æ¸
å®28			$('#type').addOption(types[i].val, types[i].name);29		30		$('#resultTable1')31			.add('#resultTable2')32			.find('div')33			.css('font-family', 'Verdana');34		35		$('#type')36			.val('wp01')37			.find('option')38				.slice(0,8)39					.css('background-color', '#708090')40				.end()41				.slice(8,16)42					.css('background-color', '#80A0C0')43				.end()44				.slice(16,18)45					.css('background-color', '#90C0F0');46		genEqpList($('#type').val());		//ç¢çè£åé 
ç®æ¸
å®47		noticeBoard.init();					//030848		49		$('#type').change(function(){		//ç±è£å種é¡é¸é 
ç¢çè£åé 
ç®æ¸
å®50			//var index = $(this)[0].selectedIndex;51			var index = $(this).selectedOptions().first().index();52			var tc;53			clearTable();54			useMts = [];55			56			tc = (function(){57				if(index >= 8)58					return (index >= 16)? '#90C0F0' : '80A0C0';59				else60					return '#708090';61			}());62			63			$(this).add('#product').css('background-color', tc);64			$('#result').html('');65			genEqpList($(this).val());66		});67		68		$('#product').change(function(){	//ç±ä½¿ç¨è
鏿çè£åé¡¯ç¤ºåºæéææ69			clearTable();70			setProduct();71			$('#resultTable1')				//æ¸
é¤å次æé¡¯ç¤ºçè¨ç®çµæ72				.add('#resultTable2')73				.add('#errMessage')74				.hide();75		});76		77		$('#slots').keydown(function(event){ //輸å
¥å®æ¸éå¾ï¼æä¸Enterè¦çºæä¸è¨ç®æé78			if(event.which == 13)			//Enter79				$('#calc').click();80		});81		$('.sbtn').click(function(){82			if(readyToSave){83				noticeBoard.save(orderItem);84			}85			else86				console.log('Not Ready To Save...');87		})88		$('.close').on('click', function(){89			var noticeId = parseInt($(this).data('nid'), 10);90			$(this).closest('div').remove();91			noticeBoard.delete(noticeId);92		});93		$('#noticeBoard').on('click', '.mt-item', function(){94			// $(this).toggleClass('marked', 'unmark');95			noticeBoard.mark(this);96		});97		98		$('#calc').click(function(){99			var useSlots = 0;	//總å
±æé空格æ¸é100			var result = '';101			var j;102			var str, idstr;103			var dt = new Date();104			var items;	//å®ä¸æææ¸é105			var type = $('#type').val();106			var method = $('input[name=method]:checked').val();		//è®å使ç¨è
æéä¹è¨ç®æ¹å¼107			// method1 : ä¾ä½¿ç¨è
å¡«å
¥ä¹ç©ºæ ¼æ¸éè¨ç®åºå¯çç¢ä¹ç©åæ¸é108			// method2 : ä¾ä½¿ç¨è
å¡«å
¥ä¹çç¢ç©åæ¸éè¨ç®åºæéä¹ç©ºæ ¼æ¸é109			$('#resultTable1, #resultTable2, #errMessage').hide();	//æ¸
é¤å次æé¡¯ç¤ºçè¨ç®çµæ110			orderItem = {111				id: noticeBoard.orderItems.idSeed++,112				qty: 0,113				product: product.name,				//0308 è¨éç¢åå稱114				mts:[]115			};116			readyToSave = false;117			118			if(method == 'method1'){119				var count = 0;	//å¯çç¢ç©åæ¸é120				var slots = parseInt($('#slots').val());	//空格æ¸é121				if(useMts.length <= slots){122					while(useSlots <= slots){123						count++;124						useSlots = 0;125						for(var i=0;i<useMts.length;i++){126							useSlots += Math.ceil((product['qty'+(i+1)]*count) / useMts[i].set);127						}128					}129					count--;130					131					$('#pname1').html(product.name);132					133					for(var i=0;i<5;i++){134						j = i + 1;135						if(i < useMts.length){136							items = product['qty'+j] * count;137							str = new String(Math.floor(items / useMts[i].set)).fontcolor('blue') + ' çµ';138							if((items % useMts[i].set) != 0)139								str += 'å ' + new String(items % useMts[i].set).fontcolor('blue') + ' å';140							141							$('#p1mt'+j).html(useMts[i].name);142							$('#p1slt'+j).html(str);143							orderItem.mts.push(useMts[i].name + ' ' + str);	//0308 è¨éä½¿ç¨ææèçµæ¸144						}145						else{146							$('#p1mt'+j).html(' ');147							$('#p1slt'+j).html(' ');148							orderItem.mts.push(' ');	//0308 empty149						}150					}151					if(type == 'wp08'){		// ç¸å½152						str = new String(count).fontcolor('red') + ' 次 / å
± ';153						str += new String(count * product.pcs).fontcolor('blue') + ' å ';154						orderItem.qty = (count * product.pcs);	//0308 è¨éçç¢æ¸é(ç¸å½)155					}156					else{157						str = new String(count).fontcolor('red') + ' å ';158						orderItem.qty = count;					//0308  è¨éçç¢æ¸é159					}160					161					$('#pqty1').html(str);162					$('#resultTable1').show();163					readyToSave = true;164				}165				else{166					$('#errMessage').html('å¯ä½¿ç¨æ ¼æ¸ä¸è¶³ï¼ï¼').show();167				}168			}169			else{170				var qty = parseInt($('#slots').val());171				if(type == 'wp08'){172					qty = Math.floor(qty / product.pcs);173				}174				orderItem.qty = qty;				//0308  è¨éçç¢æ¸é175				$('#pname2').html(product.name);176				$('#pqty2').html(new String(qty).fontcolor('red'));177				178				for(var i=0;i<5;i++){179					j = i+1;180					if(i < useMts.length){181						items = product['qty'+j] * qty;182						useSlots += Math.ceil(items / useMts[i].set);183						184						$('#p2mt'+j).html(useMts[i].name);185						186						str = new String(Math.floor(items / useMts[i].set)).fontcolor('blue') + ' çµ';187						if((items % useMts[i].set) != 0)188							str += 'å ' + new String(items % useMts[i].set).fontcolor('blue') + ' å';189						190						$('#p2slt'+j).html(str);191						orderItem.mts.push(useMts[i].name + ' ' + str);	//0308 è¨éä½¿ç¨ææèçµæ¸192					}193					else{194						$('#p2mt'+j).html(' ');195						$('#p2slt'+j).html(' ');196						orderItem.mts.push(' ');			//0308 empty197					}198				}199				$('#p2uslt').html(new String(useSlots).fontcolor('red') + ' æ ¼');200				$('#resultTable2').show();201				readyToSave = (qty != 0);202			}203		});204		205	});206	207	function findMaterial(code){	//ç±ææç·¨èæ¥è©¢ææå
§å®¹208		var m;209		for(var i=0;i<materials.length;i++)210			if(materials[i].code == code){211				m = materials[i];212				break;213			}214		return m;215	}216	217	function clearTable(){		//æ¸
é¤æé¡¯ç¤ºä¹ææè¡¨218		for(var i=1;i<=5;i++){219			$('#mt'+i).html(' ');220			$('#set'+i).html(' ');221		}222	}223	function fillMaterial(product){		//顯示è£åç©å乿æè¡¨ï¼ä¸¦è¨éæé乿æ224		var mt;225		226		for(var i=1;i<=5;i++){227			mt = findMaterial(product['mt'+i]);228			if(mt){229				$('#mt'+i).html(mt.name + ' x ' + product['qty'+i]);230				$('#set'+i).html(mt.set + ' pcs/çµ');231				useMts.push(mt);232			}233		}234	}235	236	function setProduct(){237		useMts = [];238		product = recipe[$('#type').val()][$('#product').val()];239		fillMaterial(product);240	}241	242	function genEqpList(type){243		var products = recipe[type];244		245		$('#product').removeOption(/./);	//æ¸
é¤è£åé 
ç®æ¸
å®246		for(var i=0;i<products.length;i++)	//ç¢çè£åé 
ç®æ¸
å®247			$('#product').addOption(i, ('Lv.' + products[i].level + ' ' + products[i].name));248		$('#product')249			.val(0)250			.find('option')251			.each(function(){252				var lv = 0;253				var txt = $.trim($(this).text().substring(3, 5));254				lv = parseInt(txt);255				if((lv % 2) != 0){256					$(this).css({257						'background-color':'#333',258						'color':'#FFFF33'259					});260				}261			})262			.css('border', 'dashed 1px #808080');263		setProduct();264	}265	var noticeBoard = {266		orderItems : {},267		init : function(){268			var result = localStorage.getItem('orderItems');269			if(result !== null){270				noticeBoard.orderItems = JSON.parse(result);271				noticeBoard.show();272			}273			else{274				noticeBoard.orderItems.idSeed = 0;275				noticeBoard.orderItems.items = [];276			}		277		},278		save : function(item){279			var ois = noticeBoard.orderItems,280				marked = ['u','u','u','u','u'];281			item.m = marked;282			ois.items.push(item);283			noticeBoard.update(ois);284			noticeBoard.show();285		},286		delete : function(id){287			var orderItems = noticeBoard.orderItems,288				items = orderItems.items,289				index = noticeBoard.getIndex(id);290			if(index != -1){291				items.splice(index,1);292				noticeBoard.update(orderItems);293			}294			noticeBoard.show();295		},296		update : function(ois){297			localStorage.setItem('orderItems', JSON.stringify(ois));298		},299		mark : function(div){300			var panel = $(div),301				m_index = panel.data('m'),302				notice = panel.closest('.notice'),303				noticeId = parseInt(notice.find('.close').data('nid'), 10),304				orderItems = noticeBoard.orderItems,305				items = orderItems.items,306				item_index = noticeBoard.getIndex(noticeId),307				marked;308			if(item_index != -1){309				marked = items[item_index].m[m_index];310				if(marked==='m'){311					marked = 'u';312					panel.css('text-decoration', 'none');313				}314				else{315					marked = 'm';316					panel.css('text-decoration', 'line-through');317				}318				items[item_index].m[m_index] = marked;319				noticeBoard.update(orderItems);320			};321		},322		getIndex : function(id){323			var orderItems = noticeBoard.orderItems,324				items = orderItems.items,325				index = -1;326			for(var i=0;i<items.length;i++){327				if(id == items[i].id)328					index = i;329			}330			return index;331		},332		show : function(){333			var result = localStorage.getItem('orderItems'),334				orderItems = JSON.parse(result),335				items = orderItems.items,336				item, i, panels,337				notice;338			$('#noticeBoard').html('');339			for(var i=0;i<items.length;i++){340				item = items[i];341				notice = $('#noticeTemplate').clone(true);342				notice343					.removeClass('template')344					.removeAttr('id')345					.find('.close')346						.data('nid', item.id)347					.end()348					.find('h3')349						.html(item.product + (' X ' + item.qty).fontcolor('#822'))350					.end()351					.appendTo('#noticeBoard');352				panels = notice.find('.mt-item');353				$.each(panels, function(index,panel){354					$(panel)355						.html(item.mts[index])356						.data('m', index);357					if(item.m[index] == 'm')358						$(panel).addClass('marked');359				});360			}361		}...index.js
Source:index.js  
1import baseComponent from '../helpers/baseComponent'2import classNames from '../helpers/classNames'3import { getTouchPoints, getPointsNumber, getSwipeDirection } from '../helpers/gestures'4baseComponent({5    relations: {6        '../swipe-action-group/index': {7            type: 'ancestor',8        },9    },10    properties: {11        prefixCls: {12            type: String,13            value: 'wux-swipe',14        },15        autoClose: {16            type: Boolean,17            value: false,18        },19        disabled: {20            type: Boolean,21            value: false,22        },23        left: {24            type: Array,25            value: [],26            observer: 'updateBtns',27        },28        right: {29            type: Array,30            value: [],31            observer: 'updateBtns',32        },33        useSlots: {34            type: Boolean,35            value: false,36        },37        data: {38            type: null,39            value: null,40        },41    },42    data: {43        index: 0,44        swiping: false,45        showCover: false,46        offsetStyle: '',47    },48    computed: {49        classes: ['prefixCls, swiping', function(prefixCls, swiping) {50            const wrap = classNames(prefixCls, {51                [`${prefixCls}--swiping`]: swiping,52            })53            const cover = `${prefixCls}__cover`54            const left = classNames(`${prefixCls}__actions`, {55                [`${prefixCls}__actions--left`]: true,56            })57            const right = classNames(`${prefixCls}__actions`, {58                [`${prefixCls}__actions--right`]: true,59            })60            const action = `${prefixCls}__action`61            const text = `${prefixCls}__text`62            const content = `${prefixCls}__content`63            return {64                wrap,65                cover,66                left,67                right,68                action,69                text,70                content,71            }72        }],73    },74    methods: {75        updated(index) {76            if (this.data.index !== index) {77                this.setData({ index })78            }79        },80        onCloseSwipe() {81            const parent = this.getRelationNodes('../swipe-action-group/index')[0]82            if (parent) {83                parent.onCloseSwipe(this.data.index)84            }85        },86        getContentEasing(value, limit) {87            // limit content style left when value > actions width88            const delta = Math.abs(value) - Math.abs(limit)89            const isOverflow = delta > 090            const factor = limit > 0 ? 1 : -191            if (isOverflow) {92                value = limit + Math.pow(delta, 0.85) * factor93                return Math.abs(value) > Math.abs(limit) ? limit : value94            }95            return value96        },97        setStyle(value) {98            const limit = value > 0 ? this.btnsLeftWidth : -this.btnsRightWidth99            const left = this.getContentEasing(value, limit)100            const offsetStyle = `left: ${left}px`101            const showCover = Math.abs(value) > 0102            if (this.data.offsetStyle !== offsetStyle || this.data.showCover !== showCover) {103                this.setData({ offsetStyle, showCover })104            }105        },106        updateBtns() {107            const { prefixCls } = this.data108            const query = wx.createSelectorQuery().in(this)109            query.select(`.${prefixCls}__actions--left`).boundingClientRect()110            query.select(`.${prefixCls}__actions--right`).boundingClientRect()111            query.exec((rects) => {112                const [left, right] = rects113                this.btnsLeftWidth = left ? left.width : 0114                this.btnsRightWidth = right ? right.width : 0115            })116        },117        onTap(e) {118            const { type } = e.currentTarget.dataset119            const params = {120                ...e.currentTarget.dataset,121                buttons: this.data[type],122                data: this.data.data,123            }124            if (this.data.autoClose) {125                this.onClose()126            }127            this.triggerEvent('click', params)128        },129        onAcitons() {130            if (this.data.autoClose) {131                this.onClose()132            }133        },134        onOpen(value, openedLeft, openedRight) {135            if (!this.openedLeft && !this.openedRight) {136                this.triggerEvent('open')137            }138            this.openedLeft = openedLeft139            this.openedRight = openedRight140            this.setStyle(value)141        },142        onClose() {143            if (this.openedLeft || this.openedRight) {144                this.triggerEvent('close')145            }146            this.openedLeft = false147            this.openedRight = false148            this.setStyle(0)149        },150        onOpenLeft() {151            this.onOpen(this.btnsLeftWidth, true, false)152        },153        onOpenRight() {154            this.onOpen(-this.btnsRightWidth, true, false)155        },156        onTouchStart(e) {157            if (this.data.disabled || getPointsNumber(e) > 1) return158            this.start = getTouchPoints(e)159            this.onCloseSwipe()160        },161        onTouchMove(e) {162            if (this.data.disabled || getPointsNumber(e) > 1) return163            this.move = getTouchPoints(e)164            const deltaX = this.move.x - this.start.x165            const direction = getSwipeDirection(this.start.x, this.move.x, this.start.y, this.move.y)166            const isLeft = direction === 'Left'167            const isRight = direction === 'Right'168            if (!isLeft && !isRight) return169            const { left, right, useSlots } = this.data170            this.needShowRight = isLeft && (useSlots || right.length > 0)171            this.needShowLeft = isRight && (useSlots || left.length > 0)172            if (this.needShowLeft || this.needShowRight) {173                this.swiping = true174                this.setData({ swiping: true })175                this.setStyle(deltaX)176            }177        },178        onTouchEnd(e) {179            if (this.data.disabled || getPointsNumber(e) > 1 || !this.swiping) return180            this.end = getTouchPoints(e)181            const deltaX = this.end.x - this.start.x182            const needOpenRight = this.needShowRight && Math.abs(deltaX) > this.btnsRightWidth / 2183            const needOpenLeft = this.needShowLeft && Math.abs(deltaX) > this.btnsLeftWidth / 2184            if (needOpenRight) {185                this.onOpenRight()186            } else if (needOpenLeft) {187                this.onOpenLeft()188            } else {189                this.onClose()190            }191            this.swiping = false192            this.setData({ swiping: false })193            this.needShowLeft = false194            this.needShowRight = false195        },196        noop() {},197    },198    created() {199        this.btnsLeftWidth = 0200        this.btnsRightWidth = 0201        this.openedLeft = false202        this.openedRight = false203        this.needShowLeft = false204        this.needShowRight = false205    },206    ready() {207        this.updateBtns()208    },...3-Swipe.stories.js
Source:3-Swipe.stories.js  
1import React, { useState } from "react";2import { defineSlots, useLayout, useSlots } from "./src";3import { layoutGrid, leftBox, rightBox } from "./Mirrored.module.scss";4const First = () => {5  const { Left, Right } = useSlots("Left", "Right");6  return (7    <div className={layoutGrid}>8      <div className={rightBox}>{Right}</div>9      <div className={leftBox}>{Left}</div>10    </div>11  );12};13const Second = () => {14  const { Left, Right } = useSlots("Left", "Right");15  return (16    <div className={layoutGrid}>17      <div className={leftBox}>{Left}</div>18      <div className={rightBox}>{Right}</div>19    </div>20  );21};22export const SwipeStory = () => {23  const [isSwipped, setSwipped] = useState(false);24  const Layout = useLayout(isSwipped ? First : Second);25  const { Left, Right } = defineSlots("Left", "Right");26  return (27    <>28      <Layout>...2-Nested.stories.js
Source:2-Nested.stories.js  
1import React from "react";2import { defineSlots, useLayout, useSlots } from "./src";3import { innerBox, outerBox } from "./Nested.module.scss";4const Inner = () => {5  const { Content } = useSlots("Content");6  return (7    <div className={innerBox}>8      Inner box9      <br />10      {Content}11    </div>12  );13};14const Outer = () => {15  const { Content } = useSlots("Content");16  return (17    <div className={outerBox}>18      Outer box19      <br />20      {Content}21    </div>22  );23};24export const NestedStory = () => {25  const OuterLayout = useLayout(Outer);26  const InnerLayout = useLayout(Inner);27  const { Content } = defineSlots("Content");28  return (29    <OuterLayout>...code-sample.js
Source:code-sample.js  
2import React from "react"3import { Code } from "@elements"4import { useSlots } from "@hooks"5export const CodeSample = ({ children, className, ...props }) => {6  const Slots = useSlots(children, ["jsx", "code"])7  console.log(Slots)8  return (9    <div className="relative overflow-hidden mb-8">10      <div11        className={`bg-white rounded-t-lg overflow-hidden border-t border-l border-r border-gray-400 p-4 ${className}`}12        {...props}13      >14        {Slots.jsx}15      </div>16      <Code className="rounded-b-lg bg-gray-800">{Slots.code}</Code>17    </div>18  )19}20CodeSample.propTypes = {...use-slots.test.js
Source:use-slots.test.js  
1import React from "react";2import { render } from "@testing-library/react";3import { useSlots } from "./env-src";4test("useSlots should return an object", () => {5  expect(useSlots()).toEqual({});6});7test("useSlots should accept string argument and return object with same key", () => {8  expect(useSlots("A")).toHaveProperty("A");9});10test("useSlots should accept array of strings argument and return object with same keys", () => {11  expect(useSlots(["A"])).toHaveProperty("A");...Using AI Code Generation
1const { useSlots } = require('playwright');2const { chromium } = require('playwright-chromium');3const browser = await chromium.launch();4const context = await browser.newContext();5const page = await context.newPage();6await useSlots(page, async (page) => {7});8await browser.close();9const { chromium } = require('playwright-chromium');10const browser = await chromium.launch();11const context = await browser.newContext();12const page = await context.newPage();13await page.useSlots(async (page) => {14});15await browser.close();Using AI Code Generation
1const { useSlots } = require('playwright');2const { chromium } = require('playwright');3(async () => {4  const browser = await chromium.launch();5  const context = await browser.newContext();6  const [slot1, slot2] = await useSlots(context, 2);7  const page1 = await slot1.newPage();8  const page2 = await slot2.newPage();9})();10const { useSlots } = require('playwright');11const { chromium } = require('playwright');12(async () => {13  const browser = await chromium.launch();14  const context = await browser.newContext();15  const [slot1, slot2] = await useSlots(context, 2);16  const page1 = await slot1.newPage();17  const page2 = await slot2.newPage();18})();Using AI Code Generation
1const { useSlots } = require('playwright');2const { chromium } = require('playwright-chromium');3const browser = await chromium.launch();4const context = await browser.newContext();5const page = await context.newPage();6await useSlots(page, async (page) => {7});8await browser.close();9const { chromium } = require('playwright-chromium');10const browser = await chromium.launch();11const context = await browser.newContext();12const page = await context.newPage();13await page.useSlots(async (page) => {14});15await browser.close();Using AI Code Generation
1const { useSlots } = require('playwright/lib/server/supplements/recorder/recorderSupplement');2const { Page } = require('playwright/lib/server/page');3const { Frame } = require('playwright/lib/server/frames');4const page = await browser.newPage();5const frame = await page.addFrame();6useSlots(page, { page: page });7useSlots(frame, { page: page, frame: frame });8await page.selectOption('select#state', 'CA');9await frame.selectOption('select#state', 'CA');10const { test, expect } = require('@playwright/test');11test('test', async ({ page }) => {12  await page.selectOption('select#state', 'CA');13});14const { test, expect } = require('@playwright/test');15test.describe('test', () => {16  test('test1', async ({ page }) => {17    await page.selectOption('select#state', 'CA');18  });19  test('test2', async ({ page }) => {20    await page.selectOption('select#state', 'CA');21  });22});23const { test, expect } = require('@playwright/test');24test.describe('test', () => {25  test.describe('test1', () => {26    test('test1', async ({ page }) => {27      await page.selectOption('select#state', 'CA');28    });29    test('test2', async ({ page }) => {30      await page.selectOption('select#state', 'CA');31    });32  });33  test.describe('test2', () => {34    test('test1', async ({ page }) => {35      await page.selectOption('select#state', 'CA');36    });37    test('test2', async ({ page }) => {38      await page.selectOption('select#state', 'CA');39    });Using AI Code Generation
1const { useSlots } = require('playwright/lib/server/supplements/recorder/recorderSupplement');2const { Page } = require('playwright/lib/server/page');3const { Frame } = require('playwright/lib/server/frames');4const page = await browser.newPage();5const frame = await page.addFrame();6useSlots(page, { page: page });7useSlots(frame, { page: page, frame: frame });8await page.selectOption('select#state', 'CA');9await frame.selectOption('select#state', 'CA');10const { test, expect } = require('@playwright/test');11test('test', async ({ page }) => {12  await page.selectOption('select#state', 'CA');13});14const { test, expect } = require('@playwright/test');15test.describe('test', () => {16  test('test1', async ({ page }) => {17    await page.selectOption('select#state', 'CA');18  });19  test('test2', async ({ page }) => {20    await page.selectOption('select#state', 'CA');21  });22});23const { test, expect } = require('@playwright/test');24test.describe('test', () => {25  test.describe('test1', () => {26    test('test1', async ({ page }) => {27      await page.selectOption('select#state', 'CA');28    });29    test('test2', async ({ page }) => {30      await page.selectOption('select#state', 'CA');31    });32  });33  test.describe('test2', () => {34    test('test1', async ({ page }) => {35      await page.selectOption('select#state', 'CA');36    });37    test('test2', async ({ page }) => {38      await page.selectOption('select#state', 'CA');39    });Using AI Code Generation
1const { useSlots } = require('@playwright/test/lib/internal/api');2const { test, expect } = require('@playwright/test');3test.use(useSlots(2));4test('test 1', async ({ page }) => {5  expect(await page.title()).toBe('Playwright');6});7test('test 2', async ({ page }) => {8  expect(await page.title()).toBe('Playwright');9});10test('test 3', async ({ page }) => {11  expect(await page.title()).toBe('Playwright');Using AI Code Generation
1})code to use useSlots method of Playwright Internal API2const { useSlots } = require('playwright/lib/server/slotPool');3useSlots(new BigUint;4test('test 4', async ({ page }) => {5  expect(await page.title()).toBe('Playwright');6});7test('test 5', async ({ page }) => {8  expect(await page.title()).toBe('Playwright');9});10test('test 6', async ({ page }) => {11  expect(await page.title()).toBe('Playwright');12});Using AI Code Generation
1const { useSlots } = require('@playwright/test/lib/api/test');2const { test } = useSlots();3test('test', async ({ page }) => {4});5test('test 7', async ({ page }) => {6  expect(await page.title()).toBe('Playwright');7});Using AI Code Generation
1const playwright = require('playwright');2const browser = await playwright['chromium'].launch();3const context = await browser.newContext();4const page = await context.newPage();5await page._useSlots([{6}]);7await browser.close();8test('test 8', async ({ page }) => {9  expect(await page.title()).toBe('Playwright');10});11test('test 9', async ({ page }) => {12  expect(await page.title()).toBe('Playwright');13});14test('test 10', async ({ page }) => {15  expect(await page.title()).toBe('Playwright');16});17test('test 11', async ({ page }) => {18  expect(await page.title()).toBe('Playwright');19});20test('test 12', async ({ page }) => {21  expect(await page.title()).toBe('Playwright');22});23test('test 13', async ({ page }) => {24  expect(await page.title()).toBe('Playwright');25});26test('test 14', asyncUsing AI Code Generation
1const { useSlots } = require('playwright/lib/server/chromium/crPage');2useSlots(page, true);3test('test', async ({ page }) => {4  const { useSlots } = require('playwright/lib/server/chromium/crPage');5  useSlots(page, true);6});7const { useSlots } = require('playwright/lib/server/chromium/crPage');8module.exports = async ({ page }) => {9  useSlots(page, true);10};Using AI Code Generation
1const playwright = require('playwright');2const browser = await playwright['chromium'].launch();3const context = await browser.newContext();4const page = await context.newPage();5await page._useSlots([{6}]);7await browser.close();LambdaTest’s Playwright tutorial will give you a broader idea about the Playwright automation framework, its unique features, and use cases with examples to exceed your understanding of Playwright testing. This tutorial will give A to Z guidance, from installing the Playwright framework to some best practices and advanced concepts.
Get 100 minutes of automation test minutes FREE!!
