Best JavaScript code snippet using playwright-internal
WebRenderGenerator.js
Source:WebRenderGenerator.js
...67 * override68 */69 genTemplate(ast) {70 if (ast.parent === undefined) {71 return this.genElement(ast.children[0])72 } else {73 ast.tag = WEB.emptyComponent.component74 return this.genElement(ast)75 }76 }77 /**78 * override79 */80 genTransition(ast) {81 ast.originTag = ast.tag82 ast.tag = WEB.transition.component83 ast.attrs = ast.attrs || []84 const obj = {85 name: WEB.transition.collection,86 value: '',87 }88 const arr = []89 let i = 090 ast.children.forEach(v1 => {91 if (v1.if) {92 const conditionsArr = []93 v1.ifProcessed = true94 v1.ifConditions.forEach(v2 => {95 conditionsArr.push(`{96 index: ${i++},97 exp: ${v2.block.else ? true : v2.exp},98 element: ${this.genElement(v2.block)}99 }`)100 })101 arr.push(`{102 type: 'if',103 conditions: [${conditionsArr.join(',')}]104 }`)105 } else if (106 Array.isArray(v1.directives) &&107 v1.directives.filter(v => v.name === 'show').length108 ) {109 v1.directives.forEach(v => {110 if (v.name === 'show') {111 arr.push(`{112 index: ${i++},113 type: 'show',114 exp: ${v.value},115 element: ${this.genElement(v1)}116 }`)117 }118 })119 } else if (v1.key) {120 arr.push(`{121 index: ${i++},122 type: 'key',123 exp: ${v1.key},124 element: ${this.genElement(v1)}125 }`)126 } else if (v1.component !== undefined) {127 arr.push(`{128 index: ${i++},129 type: 'component',130 exp: ${v1.component},131 element: ${this.genElement(v1)}132 }`)133 } else {134 arr.push(`{135 index: ${i++},136 exp: ${v1.component},137 element: ${this.genElement(v1)}138 }`)139 }140 })141 obj.value = `[${arr.join(',')}]`142 ast.attrs.push(obj)143 ast.children = []144 return this.genElement(ast)145 }146 /**147 * override unfinished148 */149 genTransitionGroup(ast) {150 const node = {151 tag: 'span',152 children: ast.children,153 parent: ast.parent,154 }155 return this.genElement(node)156 }157 _genTransitionGroup(ast) {158 ast.tag = WEB.transitionGroup.component159 ast.attrs = ast.attrs || []160 const obj = {161 name: WEB.transitionGroup.collection,162 value: '',163 }164 const arr = []165 ast.children.forEach(v1 => {166 if (v1.if) {167 const conditionsArr = []168 v1.ifProcessed = true169 v1.ifConditions.forEach(v2 => {170 conditionsArr.push(`{171 exp: ${v2.block.else ? true : v2.exp},172 element: ${this.genElement(v2.block)}173 }`)174 })175 arr.push(`{176 type: 'if',177 conditions: [${conditionsArr.join(',')}]178 }`)179 } else if (180 Array.isArray(v1.directives) &&181 v1.directives.filter(v => v.name === 'show').length182 ) {183 v1.directives.forEach(v => {184 if (v.name === 'show') {185 arr.push(`{186 type: 'show',187 exp: ${v.value},188 element: ${this.genElement(v1)}189 }`)190 }191 })192 } else {193 arr.push(`{194 exp: true,195 element: ${this.genElement(v1)}196 }`)197 }198 })199 obj.value = `[${arr.join(',')}]`200 ast.attrs.push(obj)201 ast.children = []202 return this.genElement(ast)203 }204 /**205 * gen class props206 * @param {Object} ast207 */208 genClassProps(ast) {209 let code = ''210 const topParent = this.isAstTopParent(ast)211 const classAttrsValue = ast.attrs212 .filter(v => v.name === 'class')213 .map(v => v.value)214 if (classAttrsValue.length === 0 && !topParent) {215 return code216 }217 let staticClass, dynamicClass218 classAttrsValue.forEach(v => {219 if (/^".*"$/.test(v) || /^'.*'$/.test(v)) {220 staticClass = v.trim() // .replace(/^"(.*)"$/, '$1')221 } else {222 dynamicClass = v223 }224 })225 if (staticClass) {226 code += ` ${staticClass}`227 }228 if (dynamicClass) {229 code = code.replace(/"$/, ' "')230 code += ` + ${WEB.bindClass.name}(${dynamicClass})`231 }232 if (topParent) {233 code += `+ ' ' + (this.props.className || '')`234 }235 code = `className: (${code.trim().replace(/^[\s]*\+[\s]*/, '')}).trim()`236 return code237 }238 /**239 * gen style props240 * @param {Object} ast241 */242 genStyleProps(ast) {243 const styleAttrsValue = ast.attrs244 .filter(v => v.name === 'style')245 .map(v => v.value)246 const show =247 ast.directives && ast.directives.filter(v => v.name === 'show')[0]248 const topParent = this.isAstTopParent(ast)249 if (styleAttrsValue.length === 0 && !show && !topParent) {250 return251 }252 let staticStyle, dynamicStyle, showStyle253 styleAttrsValue.forEach(v => {254 if (/^".*"$/.test(v)) {255 staticStyle = v.trim().replace(/;*"$/, ';"')256 } else {257 dynamicStyle = v258 }259 })260 let code = ''261 if (staticStyle) {262 try {263 staticStyle = JSON.stringify(parseStyleText(staticStyle))264 } catch (e) {}265 }266 if (show) {267 showStyle = `{display: ${show.value} ? '' : 'none'}`268 }269 if (topParent) {270 showStyle = `Object.assign({}, ${showStyle}, this.props.style)`271 }272 code = `${WEB.bindStyle.name}(${dynamicStyle}, ${staticStyle}, ${showStyle})`273 code = `style: ${code.trim().replace(/^[\s]*\+[\s]*/, '')}`274 return code275 }276 /**277 * override278 * @param {Object} ast279 */280 genIMEResolve(ast) {281 ast.attrs = ast.attrs || []282 ast.attrs.push({283 name: WEB.inputComponent.tag,284 value: `'${ast.tag}'`,285 })286 ast.tag = WEB.inputComponent.component287 return this.genElement(ast)288 }289 genDirectives(ast) {290 const code = super.genDirectives(ast)291 ast.directives.forEach(v => {292 if (v.name === 'model') {293 this.genModelDirectives(ast, v)294 } else if (v.name === 'html') {295 this.genHtmlDirectives(ast)296 } else if (v.name === 'text') {297 this.genTextDirectives(ast)298 }299 })300 return code301 }...
SalesPreview.js
Source:SalesPreview.js
...196 frame.window.focus();197 frame.window.print();198 }, 500);199}200function genElement(label, className, ...children) {201 let elem;202 if (label.toLowerCase() === "text") {203 elem = document.createTextNode(className);204 } else {205 elem = document.createElement(label);206 elem.setAttribute("class", className);207 if (children !== null && children !== undefined) {208 for (var item of children) {209 elem.appendChild(item);210 }211 }212 }213 return elem;214}215function setupPreview(sales, receiptNum, username, date) {216 let frame = window.frames["print_preview"];217 let titles = [218 genElement(219 "h4",220 "text-center",221 genElement("text", constants.company.name.toUpperCase())222 ),223 genElement(224 "h6",225 "text-center",226 genElement("text", constants.company.location.toUpperCase())227 ),228 genElement(229 "h6",230 "text-center",231 genElement("text", constants.company.phone)232 ),233 genElement(234 "h6",235 "text-center",236 genElement("text", constants.company.email)237 ),238 ];239 for (var item of titles) {240 item.style.textAlign = "center";241 item.style.margin = "5px";242 frame.document.body.appendChild(item);243 }244 let receiptName = genElement(245 "h4",246 "",247 genElement("text", "Cash Sales Receipt")248 );249 receiptName.style.textAlign = "center";250 receiptName.style.textDecoration = "underline";251 frame.document.body.appendChild(receiptName);252 frame.document.body.appendChild(genElement("hr", ""));253 let currDate = date.toUTCString().split(" ").slice(0, 5).join(" ");254 let subelems = [255 genElement("h6", "", genElement("text", "Receipt No : " + receiptNum)),256 genElement("h6", "", genElement("text", "Sales Person : " + username)),257 genElement("h6", "", genElement("text", "Date : " + currDate)),258 ];259 for (let item of subelems) {260 item.style.margin = "3px";261 frame.document.body.appendChild(item);262 }263 frame.document.body.appendChild(genElement("br", ""));264 let salesDom = sales.products.map((prod) => {265 return genElement(266 "tr",267 "",268 genElement("td", "", genElement("text", prod.name)),269 genElement("td", "", genElement("text", prod.saleTypeName.split(" ")[0])),270 genElement(271 "td",272 "",273 genElement(274 "text",275 "GHC " +276 (prod.saleTypeId === constants.salesTypeConstants.Bulk277 ? prod.bulkPrice278 : prod.unitPrice)279 )280 ),281 genElement("td", "", genElement("text", prod.quantity)),282 genElement("td", "", genElement("text", "GHC " + prod.total))283 );284 });285 let table = genElement(286 "table",287 "",288 genElement(289 "thead",290 "",291 genElement(292 "tr",293 "",294 genElement("td", "", genElement("text", "Name")),295 genElement("td", "", genElement("text", "Type")),296 genElement("td", "", genElement("text", "Price")),297 genElement("td", "", genElement("text", "Qty")),298 genElement("td", "", genElement("text", "Amt"))299 )300 ),301 genElement("tbody", "products-section")302 );303 table.style.width = "100%";304 table.style.fontSize = "10px";305 Array.from(table.querySelectorAll("thead")).forEach((el) => {306 el.style.fontWeight = "bold";307 });308 salesDom.forEach((el) =>309 table.querySelector(".products-section").appendChild(el)310 );311 frame.document.body.appendChild(table);312}313export default connect(mapStateToProps, {314 setError: utils.setError,315 setMessage: utils.setMessage,...
game.js
Source:game.js
...38function restart() {39 document.location.reload();40}41// Function to generate all HTML elements.42function genElement(type, className, id) {43 const el = $(type).addClass(className);44 if (id !== null) {45 el.attr("id", id);46 }47 return el;48}49// Function that generates the fighter and enemy's stats.50function genStats(fighter) {51 const statCont = genElement("<div>", "player-states", null);52 const statUl = genElement("<ul>", "stat-list list-group", null);53 const pwrLi = genElement("<li>", "stat-list-item list-group-item", null).text(`Power: ${fighterObj[fighter].power}`);54 const cntrLi = genElement("<li>", "stat-list-item list-group-item", null).text(`Counter: ${fighterObj[fighter].counter}`);55 statUl.append(pwrLi, cntrLi);56 return statCont.append(statUl);57}58// Function that generates the fighter and enemies Bootstrap 4 Card elements.59function genCard(fighter, num) {60 const card = genElement("<div>", "card d-flex flex-row pt-2 px-1", `card-${fighter}`);61 const row = genElement("<div>", `${fighter === "lukeSkywalker" ? "row no-gutters" : "row no-gutters w-96"}`, null);62 const colAuto = genElement("<div>", "col-auto", null);63 const ftrImg = genElement("<img>", "img-fluid mx-2 mb-2", null).attr("src", `assets/images/${fighter}.png`);64 const col = genElement("<div>", "col", null);65 const crdBlk = genElement("<div>", "card-block px-2", null);66 const crdTle = genElement("<h2>", "card-title mt-3 ml-2", null).text(fighter)67 const crdTxt = genElement("<div>", "card-block px-2", null).html(genStats(fighter));68 const prgTle = genElement("<h4>", "mt-3 ml-2", null).text("Health");69 const hlth = genElement("<div>", "progress", null);70 const prgsBR = genElement("<div>", "progress-bar bg-success", `hlthBr-${num}`).attr("aria-valuenow", fighterObj[fighter].health).attr("role", "progressbar").attr("style", ` width: ${fighterObj[fighter].health}%;`).text(`${fighterObj[fighter].health}%`);71 colAuto.append(ftrImg);72 hlth.append(prgsBR);73 col.append(crdBlk, crdTle, crdTxt, prgTle, hlth);74 return card.append(row.append(colAuto).append(col));75}76// The images get generated from the Fighter Object into the players section. 77function genFighters() {78 const imgCont = genElement("<div>", `images py-4 d-flex flex-sm-row flex-column px-3 py-2 mt-4`, null);79 for (let el in fighterObj) {80 const imgDiv = genElement("<div>", `${el} col-sm-3 fightImages text-center mt-2`, null);81 const fImg = genElement("<img>", ` fighter img-fluid reg_border px-2 py-1 mt-1`, el).attr("src", fighterObj[el].img);82 const span = genElement("<div>", `fightStats text-center text-white d-block py-2`, null).html(`<b>Power:</b> ${fighterObj[el].power}`);83 imgDiv.append(fImg, span);84 imgCont.append(imgDiv);85 }86 return imgCont;87}88// Function to generate all the Modals.89function genModal(state, title, body, style, btnText) {90 $("#modalS").modal(state)91 $("#m-title").text(title)92 $("#m-body").text(body)93 const btn = $('#btnS');94 btnText !== null ? btn.addClass(style).text(btnText) : btn.remove();95}96// Initial state of game. 97function startScreen() {98 fightCont = $("#fighters");99 const h3 = genElement("<h3>", 'remove-title text-center', null).text("Choose a Fighter");100 const fighterImages = genFighters(fighterObj, "fighter");101 fightCont.append(h3, fighterImages);102 $(".fighter").click(choosePlayer);103}104// Game logic for choosing fighters and enemies. 105function choosePlayer() {106 const atkBtn = $("#attack");107 const ftrId = $(this).attr("id");108 const actvFtr = $("#fighterActive");109 const actvEnmy = $("#enemyActive");110 const btn = genElement("<button>", 'btn btn-danger', 'attack-btn').text("ATTACK!!");111 if ((jQuery.isEmptyObject(activeObj)) || (jQuery.isEmptyObject(enemyObj))) {112 $("." + ftrId).remove();113 if (jQuery.isEmptyObject(activeObj)) {114 $("#active-area").removeClass("d-none");115 activeObj[ftrId] = fighterObj[ftrId];116 $(".remove-title").text("Choose an Enemy");117 actvFtr.html(genCard(ftrId, 0)).prepend("<strong>Your Fighter:</strong>").addClass("text-center");118 delete fighterObj[ftrId];119 } else {120 currentEnemy = $(this).attr("id");121 enemyObj[ftrId] = fighterObj[ftrId];122 $(".remove-title").text("Remaining Enemy Queue").addClass("mt-5");123 actvEnmy.html(genCard(ftrId, 1)).prepend("<strong>Your Enemy:</strong>").addClass("text-center");124 delete fighterObj[ftrId];125 atkBtn.html(btn);126 $("#attack-btn").click(attack);127 }128 }129 if (jQuery.isEmptyObject(fighterObj)) {130 $("#fightCol").empty();131 $("#deadCol").removeClass("col-6").addClass("col-12");132 }133}134// Function every-time the attack button is triggered. 135function attack() {136 // Active Fighter and Enemy Data.137 const aObj = activeObj[Object.keys(activeObj)[0]];138 const eObj = enemyObj[Object.keys(enemyObj)[0]];139 const fighterPower = aObj.power;140 let fighterHealth = aObj.health;141 const enemyPower = eObj.power;142 let enemyHealth = eObj.health;143 // Random numbers are generated for each player. 144 const fighterNumb = Math.floor(Math.random() * fighterPower);145 const enemyNumb = Math.floor(Math.random() * enemyPower);146 // Once the numbers are generated this logic is executing the attack and decreasing health. 147 // If both players health is above 0;148 if ((aObj.health > 0) && (eObj.health > 0)) {149 if (fighterNumb >= enemyNumb) {150 aObj.health = aObj.health - 10;151 $("#hlthBr-0").attr("style", `width: ${aObj.health}%`).attr("aria-valuenow", aObj.health).text(`${aObj.health}%`);152 } else {153 eObj.health = eObj.health - 10;154 $("#hlthBr-1").attr("style", `width: ${eObj.health}%`).attr("aria-valuenow", eObj.health).text(`${eObj.health}%`);155 }156 } else {157 // If the original fighter object is empty and the active enemy's health is 0 then player won the game. Winning logic is below.158 if ((jQuery.isEmptyObject(fighterObj)) && (enemyHealth === 0)) {159 genModal("show", "You Won The Game YOO HOO!", "Thank you for playing... Your game will restart in a moment.", "start-over btn-primary", null);160 setTimeout(() => {161 return restart();162 }, 2000);163 } else {164 // If there are still fighters then go to the next round.165 (!jQuery.isEmptyObject(fighterObj)) && (fighterHealth > enemyHealth) ?166 genModal("show", "You Won!", "Ready for the next round?", "next-round btn-success", "Next Round"):167 genModal("show", "You Lost!", "Would You like to play again?", "start-over btn-danger", "Start Over");168 }169 }170}171// After the player won that round the enemy this function is triggered for the next round.172function nextRound() {173 // Hide attack button when user is choosing another opponent.174 $("#attack-btn").hide();175 const aObj = activeObj[Object.keys(activeObj)[0]];176 // Regenerating players health.177 aObj.health = 100;178 $("#hlthBr-0").attr("style", `width: ${aObj.health}%`).attr("aria-valuenow", aObj.health).text(`${aObj.health}%`);179 // Clear Enemy Card.180 $("#enemyActive").empty();181 // Reveal the dead area. 182 $("#fightCol").removeClass("col-12").addClass("col-6");183 $("#deadCol").removeClass("d-none").addClass("d-block");184 $(".remove-title").text("Select Another Victim");185 // Move the defeated players to the dead area.186 const imgCont = $(".defeated");187 const imgDiv = genElement("<div>", `${currentEnemy} col-sm-3 fightImages text-center mt-2`, null);188 const fImg = genElement("<img>", `img-fluid reg_border px-2 py-1 mt-1`, currentEnemy).attr("src", enemyObj[currentEnemy].img);189 imgDiv.append(fImg);190 imgCont.append(imgDiv);191 // Delete active enemy. 192 delete enemyObj[currentEnemy];...
browser.domUtility.test.js
Source:browser.domUtility.test.js
...16 }[t];17 }18 };19}20function genElement(tag, id, classes, type, name) {21 var elem = {22 tagName: tag,23 getAttribute: function(t) {24 return {25 type: type,26 name: name,27 other: 'otherAttr'28 }[t];29 }30 };31 if (id) {32 elem.id = id;33 }34 if (classes) {35 elem.className = classes;36 }37 return elem;38}39describe('isDescribedElement', function() {40 it('should match the type without subtypes', function() {41 var e = genElement('div', null, null, 'text');42 expect(d.isDescribedElement(e, 'div')).to.be.ok();43 expect(d.isDescribedElement(e, 'DIV')).to.be.ok();44 expect(d.isDescribedElement(e, 'span')).to.not.be.ok();45 });46 it('should work with subtypes', function() {47 var e = genElement('div', null, null, 'text');48 expect(d.isDescribedElement(e, 'div', ['input', 'text'])).to.be.ok();49 expect(d.isDescribedElement(e, 'div', ['input', 'nottext'])).to.not.be.ok();50 expect(d.isDescribedElement(e, 'div', [])).to.not.be.ok();51 });52 it('should work if element has no type', function() {53 var e = genElement('div');54 expect(d.isDescribedElement(e, 'div', ['input', 'text'])).to.not.be.ok();55 expect(d.isDescribedElement(e, 'div')).to.be.ok();56 });57});58describe('describeElement', function() {59 it('should include the id', function() {60 var elem = fullElement();61 var description = d.describeElement(elem);62 expect(description.id).to.eql('myId');63 });64 it('should have the right tag name', function() {65 var elem = fullElement();66 var description = d.describeElement(elem);67 expect(description.tagName).to.eql('div');68 });69});70describe('descriptionToString', function() {71 it('should be right', function() {72 var elem = fullElement();73 var desc = d.describeElement(elem);74 var str = d.descriptionToString(desc);75 expect(str).to.eql('div#myId.a.b.c[type="theType"][name="someName"]');76 });77});78describe('treeToArray', function() {79 it('should follow parent pointers', function() {80 var base = genElement('span', 'cool');81 base.parentNode = genElement('div', 'parent');82 var arr = d.treeToArray(base);83 expect(arr.length).to.eql(2);84 });85 it('should not stop before html tag', function() {86 var e1 = genElement('div', 'cool');87 var e2 = genElement('div', null, 'a b');88 var h = genElement('html');89 e1.parentNode = e2;90 e2.parentNode = h;91 var arr = d.treeToArray(e1);92 expect(arr.length).to.eql(2);93 });94 it('should cap out at 5 elements', function() {95 var e1 = genElement('div', 'cool');96 var e2 = genElement('div', null, 'a b');97 var e3 = genElement('div', null, 'a b');98 var e4 = genElement('div', null, 'a b');99 var e5 = genElement('div', null, 'a b');100 var e6 = genElement('div', null, 'a b');101 e1.parentNode = e2;102 e2.parentNode = e3;103 e3.parentNode = e4;104 e4.parentNode = e5;105 e5.parentNode = e6;106 var arr = d.treeToArray(e1);107 expect(arr.length).to.eql(5);108 });109 it('should put the innermost element last', function() {110 var e1 = genElement('div', 'id1');111 var e2 = genElement('div', 'id2', 'a b');112 var e3 = genElement('div', 'id3', 'a b');113 var e4 = genElement('div', 'id4', 'a b');114 var e5 = genElement('div', 'id5', 'a b');115 var e6 = genElement('div', 'id6', 'a b');116 e1.parentNode = e2;117 e2.parentNode = e3;118 e3.parentNode = e4;119 e4.parentNode = e5;120 e5.parentNode = e6;121 var arr = d.treeToArray(e1);122 expect(arr[4].id).to.eql('id1');123 expect(arr[0].id).to.eql('id5');124 });125});126describe('elementArrayToString', function() {127 it('should work with one element', function() {128 var e1 = {tagName: 'div', id: 'id1', classes: ['a', 'b'], attributes: []};129 var arr = [e1];130 var res = d.elementArrayToString(arr);131 expect(res).to.eql('div#id1.a.b');132 });133 it('should work with two elements', function() {134 var e1 = {tagName: 'div', id: 'id1', classes: ['a', 'b'], attributes: []};135 var e2 = {tagName: 'div', id: 'id2', classes: ['a', 'b', 'c'], attributes: [{key: 'name', value: 'thing'}]};136 var arr = [e1, e2];137 var res = d.elementArrayToString(arr);138 expect(res).to.eql('div#id1.a.b > div#id2.a.b.c[name="thing"]');139 });140 it('should truncate at 80 characters max without breaking within a element', function() {141 var e1 = {tagName: 'div', id: 'id1', classes: ['a', 'b'], attributes: []};142 var e2 = {tagName: 'div', id: 'id2', classes: ['a', 'b', 'c'], attributes: [{key: 'name', value: 'thing2'}]};143 var e3 = {tagName: 'div', id: 'id3', classes: ['a', 'b'], attributes: []};144 var e4 = {tagName: 'div', id: 'id4', classes: ['a', 'b', 'c'], attributes: [{key: 'name', value: 'thing4'}]};145 var arr = [e1, e2, e3, e4];146 var res = d.elementArrayToString(arr);147 expect(res).to.eql('... > div#id2.a.b.c[name="thing2"] > div#id3.a.b > div#id4.a.b.c[name="thing4"]');148 });149});150describe('everything', function() {151 it('should work with one element', function() {152 var e = genElement('div', 'id1');153 var description = d.descriptionToString(d.describeElement(e));154 var result = d.elementArrayToString(d.treeToArray(e));155 expect(description).to.eql(result);156 });157 it('should work with many elements', function() {158 var e1 = genElement('div', 'id1');159 var e2 = genElement('div', 'id2', 'a b', 'input');160 var e3 = genElement('div', 'id3', 'a b', null, 'thing');161 var e4 = genElement('div', 'id4', 'a b');162 var e5 = genElement('div', 'id5', 'a b');163 var e6 = genElement('div', 'id6', 'a b');164 e1.parentNode = e2;165 e2.parentNode = e3;166 e3.parentNode = e4;167 e4.parentNode = e5;168 e5.parentNode = e6;169 var d1 = d.descriptionToString(d.describeElement(e1));170 var d2 = d.descriptionToString(d.describeElement(e2));171 var d3 = d.descriptionToString(d.describeElement(e3));172 var d4 = d.descriptionToString(d.describeElement(e4));173 var d5 = d.descriptionToString(d.describeElement(e5));174 var d6 = d.descriptionToString(d.describeElement(e6));175 var description = ['...', d4, d3, d2, d1].join(' > ');176 var result = d.elementArrayToString(d.treeToArray(e1));177 expect(description).to.eql(result);...
trivia.js
Source:trivia.js
1const h1 = document.querySelector('h1');2// MAIN OUTOUT DIV3const output = document.querySelector('.output');4// OUTPUT SETTINGS SELECTOR DIV5const settingsText = genElement(output, 'div', 'Please choose your game options:');6settingsText.classList.add('settingsText');7// SETTINGS BUTTONS IN OUTPUT8const settingsSelectDiv = genElement(output, 'div', '# Questions :');9settingsSelectDiv.classList.add('settingsSelectDiv');10// QUESTION # INPUT, APPEND TO ABOVE DIV11const inputVal = document.querySelector('.questionVal');12inputVal.setAttribute('type', 'number');13inputVal.setAttribute('max', 50);14inputVal.setAttribute('min', 1);15inputVal.value = 10;16settingsSelectDiv.append(inputVal);17// QUESTION FILTERS18const selectCat = genElement(settingsSelectDiv, 'select', '');19const selectDif = genElement(settingsSelectDiv, 'select', '');20// START BUTTON21const startBtn = document.querySelector('.startBtn');22startBtn.classList.add('startBtn');23settingsSelectDiv.append(startBtn);24// Elements in settings div in order are: text, input, select, select, start button25const baseURL = 'https://opentdb.com/api.php?';26const game = {27 que: [],28 question: 0,29 eles: [],30 score: 031};32const categories = [33{34 "title" : "General", 35 "num" : 936},37{38 "title" : "Entertainment: Music", 39 "num" : 1240},41{42 "title" : "Science & Nature", 43 "num" : 1744},45{46 "title" : "Mythology", 47 "num" : 2048},49{50 "title" : "Geography", 51 "num" : 2252},53{54 "title" : "Animals", 55 "num" : 2756}];57// CASE SENSITIVE, PART OF URL58const difficulty = ['easy', 'medium', 'hard'];59window.addEventListener('DOMContentLoaded', (e) => {60 // console.log('DOM Ready');61 genSelections();62})63// FOR EASE OF GENERATING AND APPENDING NEW DOM ELEMENTS64function genElement(parent, eleType, html){65 const temp = document.createElement(eleType);66 temp.innerHTML = html;67 parent.append(temp);68 return temp;69}70function genSelections() {71 categories.forEach((cat) => {72 const optEle = genElement(selectCat, 'option', cat.title);73 optEle.value = cat.num;74 })75 difficulty.forEach((d) => {76 const optEle = genElement(selectDif, 'option', d);77 optEle.value = d;78 })79}80startBtn.addEventListener('click', (e) => {81 let tempURL = `${baseURL}amount=${inputVal.value}&difficulty=${selectDif.value}&category=${selectCat.value}`;82 popPage(tempURL);83 initGameStyle();84})85function initGameStyle(){86 output.classList.add('active');87 settingsSelectDiv.classList.add('hidden');88 settingsText.classList.add('hidden');89}90function popPage(url){91 fetch(url)92 .then((res) => res.json())93 .then((data) => {94 game.que = data.results;95 outputPage();96 })97 .catch((err) => {98 console.log(err);99 })100}101function outputPage(){102 h1.innerHTML = `Question ${game.question} of ${game.que.length} <br>Score: ${game.score}`;103 if(game.question >= game.que.length){104 output.innerHTML = `<div class="finalMessage">Your final score was ${game.score} out of ${game.que.length}!</div>`;105 const replayBtn = genElement(output, 'button', 'Play Again?');106 replayBtn.classList.add('replayBtn');107 replayBtn.addEventListener('click', (e) => {108 window.location.reload();109 })110 settingsSelectDiv.classList.remove('hidden');111 game.score = 0;112 game.question = 0;113 } else {114 output.innerHTML = '';115 let question = (game.que[game.question]);116 game.question++;117 // MAIN QUIZ DIV, APPENDED TO OUTPUT118 const mainDiv = genElement(output, 'div', '');119 // QUESTION DIV120 const que1 = genElement(mainDiv, 'div', question.question);121 que1.classList.add('question');122 game.eles.length = 0;123 const optsDiv = genElement(output, 'div', '');124 optsDiv.classList.add('optsDiv');125 126 // WILL SHOW CORRECT/INCORRECT MESSAGE DIV127 resultsDiv = genElement(output, 'div', '');128 resultsDiv.classList.add('hidden');129 // NEXT BUTTON DIV130 nextDiv = genElement(output, 'div', '');131 nextDiv.classList.add('hidden');132 nextDiv.classList.add('nextDiv');133 let answers = genAnswers(question); //returns randomized answers134 answers.forEach(opt => {135 const opt1 = genElement(optsDiv, 'button', opt);136 opt1.classList.add('optionButtons');137 game.eles.push(opt1);138 if(opt == question.correct_answer){139 opt1.bgC = 'rgb(75, 128, 75)';140 } else {141 opt1.bgC = 'rgb(233, 109, 109)'142 }143 opt1.addEventListener('click', (e) => {144 game.eles.forEach((btnv) => {145 btnv.disabled = true;146 btnv.style.backgroundColor = btnv.bgC;147 })148 resultsDiv.classList.remove('hidden');149 const message = genElement(resultsDiv, 'div', '');150 message.classList.add('message');151 if(opt == question.correct_answer){152 game.score++;153 message.textContent = `Correct!`154 } else {155 message.textContent = `Wrong! The answer was ${question.correct_answer}.`156 }157 nextDiv.classList.remove('hidden');158 nextQue(nextDiv);159 });160 });161 }162}163function genAnswers(question){164 let answers = question.incorrect_answers;165 let randomIndex = Math.floor(Math.random() * (answers.length + 1));166 answers.splice(randomIndex, 0, question.correct_answer);167 return answers;168}169function nextQue(parent){170 const nextBtn = genElement(parent, 'button', 'Next Question');171 nextBtn.classList.add('nextBtn');172 nextBtn.addEventListener('click', outputPage);...
MinionShop.js
Source:MinionShop.js
...59 }60 });61}62function createEmptyMinionItem(parent, items) {63 let item = genElement(parent, "div", "", "minion-item");64 if (items.owned == 0) {65 var infos = genElement(item, "div", "", "data-info");66 } else {67 var infos = genElement(item, "div", "", "data-info-buy");68 }69 return [item, infos];70}71function updateMinionInfo(infosParent, minion, gameState) {72 let title = genElement(infosParent, "h3", `${minion.name}(${(minion.gps * minion.owned).toFixed(2)}/s)(${getMinionPower(minion).toFixed(2)}W)(${minion.temp}C)`);73 if (minion.owned == 0) {74 let buy = genElement(infosParent, "button", "Buy");75 let price = genElement(infosParent, "h4", `Cost : ${minion.cost}`);76 buy.addEventListener("click", (evt) => {77 buyMinion(gameState, minion.id)78 });79 } else {80 if (minion.hasPercent) {81 let mem = genElement(infosParent, "p", `${minion.maxMemory * minion.owned}${minion.type}`);82 }83 }84}85function getNextValue(source, cap) {86 let structure = cap.structure.split(".")87 if (cap.value_type == "one") {88 return Number.parseInt(source[structure[1]]) + cap.incr;89 } else {90 let values = source[structure[1]]91 return cap.current_value == values.length - 1 ? "x" : values[cap.current_value + 1]92 }93}94function updateMinionCapacities(capParent, capacities, minion, gameState) {95 capacities.forEach((cap) => {96 let capItem = genElement(capParent, "div", "", "data-item");97 let structure = cap.structure.split(".");98 let source = structure[0] == "$parent" ? minion : cap99 let finalValue = cap.value_type == "one" ? source[structure[1]] : source[structure[1]][cap.current_value];100 let next = getNextValue(source, cap)101 cap["value"] = finalValue;102 let name = genElement(capItem, "p", cap.name);103 let value = genElement(capItem, "p", cap.value);104 let price = genElement(capItem, "p", `${cap.price.toFixed(2)}$`);105 if (next != "x") {106 let upgrade = genElement(capItem, "button", "Upgrade");107 upgrade.addEventListener("click", () => {108 upgradeCapacity(gameState, minion, cap.id)109 });110 upgrade.addEventListener("mouseover", () => {111 genElement(value, "label", `->${next}`);112 })113 upgrade.addEventListener("mouseleave", () => {114 value.children[0].remove()115 })116 }117 });...
dash.sql.js
Source:dash.sql.js
...33 }34}35function parseTable_v2(data, selector){36 $.each($(selector)[0].children, function(index, obj){$(selector)[0].removeChild(obj)})37 var table = genElement("table");38 var thead = genElement("thead");39 var tbody = genElement("tbody");40 var tr = genElement("tr");41 var th = genElement("th");42 var td = genElement("td");43 tr.appendChild(th);44 var columns = [];45 $.each(data, function(key, value){46 var th = genElement("th");47 var tmp = strFormat(th_template, "  " + key + "  ");48 th.innerHTML = tmp;49 tr.appendChild(th);50 columns.push(key);51 })52 thead.appendChild(tr);53 var indexes = [];54 $.each(data[columns[0]], function(index, value){55 indexes.push(index);56 })57 for (var row = 0; row < indexes.length; row++) {58 var tr = genElement("tr");59 var th = genElement("th");60 th.innerText = indexes[row];61 tr.appendChild(th);62 $.each(columns, function(no_user, col){63 var td = genElement("td");64 td.innerText = data[col][indexes[row]];65 tr.appendChild(td);66 })67 tbody.appendChild(tr);68 };69 table.setAttribute("id", "table_value");70 table.setAttribute("border", "1px");71 table.className = "table-condensed table-hover";72 table.style.fontSize = "small";73 table.style.fontWeight = "400";74 var tableDOM = $(selector)[0]75 // add table76 table.appendChild(thead);77 table.appendChild(tbody);...
PowerManager.js
Source:PowerManager.js
...23}24export function createPowerSection(gameState) {25 let div = document.getElementById('power-panel');26 div.innerHTML = '';27 let list = genElement(div, "div", "", "data-list")28 let info = genElement(list, "div", "", "data-info")29 let title = genElement(info, "h3", `Alimentation`)30 gameState.powers.forEach((power) => {31 let item = genElement(list, "div", "", "data-item")32 let name = genElement(item, "h4", `${power.name}(${power.powering}W)`)33 let quantity = genElement(item, "p", power.owned)34 let price = genElement(item, "p", `${power.cost.toFixed(2)}$`)35 let up = genElement(item, "button", "Upgrade")36 up.addEventListener("click",()=>{37 upgradeAlimentation(gameState,power)38 })39 });...
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const context = await browser.newContext();5 const page = await context.newPage();6 const elementHandle = await page.$('body');7 const element = await elementHandle._client.send('DOM.describeNode', { objectId: elementHandle._remoteObject.objectId });8 console.log(element);9 await browser.close();10})();11{12 node: {13 attributes: [ 'style', 'margin: 0px;' ]14 },15 children: [ { node: [Object], children: [Array] } ],16}17 <body style="margin: 0px;">18const { chromium } = require('playwright');19(async () => {20 const browser = await chromium.launch();21 const context = await browser.newContext();22 const page = await context.newPage();23 const elementHandle = await page.$('body');24 const element = await elementHandle._client.send('DOM.describeNode', { objectId: elementHandle._remoteObject.objectId });25 const node = await page._client.send('DOM.requestNode', { objectId: elementHandle._remoteObject.objectId });26 console.log(node);27 await browser.close();28})();29{30}
Using AI Code Generation
1const { chromium } = require('playwright');2const path = require('path');3(async () => {4 const browser = await chromium.launch({ headless: false });5 const context = await browser.newContext();6 const page = await context.newPage();7 const element = await page.$('text=Get started');8 const elementHandle = await element.asElement();9 const elementProperties = await elementHandle._client.send('DOM.describeNode', {10 });11 const tagName = elementProperties.node.nodeName;12 const attributes = elementProperties.node.attributes;13 const genElement = await page._delegate.genElement(tagName, attributes);14 console.log(genElement);15 await browser.close();16})();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const element = await page._delegate.genElement('input[name="q"]');6 await element.fill('Playwright');7 await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11 const browser = await chromium.launch();12 const page = await browser.newPage();13 const element = await page._delegate.genElement('input[name="q"]');14 await browser.close();15})();16const { chromium }
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const element = await page._delegate.genElement({ selector: 'input[name="q"]' });6 await element.type('hello');7 await browser.close();8})();9const { chromium } = require('playwright');10(async () => {11 const browser = await chromium.launch();12 const page = await browser.newPage();13 const element = await page._delegate.genElement({ selector: 'input[name="q"]' });14 await element.type('hello');15 await browser.close();16})();17const { chromium } = require('playwright');18(async () => {19 const browser = await chromium.launch();20 const page = await browser.newPage();21 const element = await page._delegate.genElement({ selector: 'input[name="q"]' });22 await element.type('hello');23 await browser.close();24})();25 at CDPSession.send (C:\Users\user\Desktop\test\node_modules\playwright\lib\client\cdpSession.js:166:23)26 at CDPSession.send (C:\Users\user\Desktop\test\node_modules\playwright\lib\client\cdpSession.js:166:23)27 at CDPSession.send (C:\Users\user\Desktop\test\node_modules\playwright\lib\client\cdpSession.js:166:23)28 at CDPSession.send (C:\Users\user\Desktop\test\node_modules\playwright\lib\client\cdpSession.js:166:23)
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const element = await page._client.send('DOM.createElement', {6 attributes: { class: 'foo' },7 });8 console.log(element);9 await browser.close();10})();11{12 importDocument: null,13}
Using AI Code Generation
1const { chromium } = require('playwright');2const { genElement } = require('playwright/internal');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const element = await genElement(page, 'a[href="/docs/intro"]', { timeout: 10000 });8 await element.click();9 await browser.close();10})();11I’m using playwright version 1.12.3. I tried the same with version 1.12.2 as well but got the same error. I also tried this with the latest version (1.13.0) but got the following error:12Thanks for the response. I’m trying to use it because I want to use the timeout option with elementHandle.waitForElementState() method. I’m using this method in my project to wait for an element to be visible. But sometimes, the element doesn’t become visible in the given timeout. So, I want to use the
Using AI Code Generation
1const { Playwright } = require('playwright');2const playwright = new Playwright();3const { chromium } = playwright;4const browser = await chromium.launch();5const context = await browser.newContext();6const page = await context.newPage();7const element = await page.genElement('button', { text: 'Click me' });8await element.click();9await browser.close();10await playwright.stop();
Using AI Code Generation
1const {chromium} = require("playwright");2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 const element = await page._client.send("DOM.querySelector", {6 });7 const genElement = await page._client.send("DOM.generateSelector", {8 });9 console.log(genElement);10 await browser.close();11})();12{ selector: 'input[type="text"]', shadowRootSelector: undefined }
Using AI Code Generation
1const playwright = require('playwright');2const { chromium } = playwright;3const { genElement } = require('playwright/lib/client/elementHandler');4(async () => {5 const browser = await chromium.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 const element = await genElement(page, 'text=Get started');9 await element.click();10 await browser.close();11})();12const { ElementHandle } = require('./dom');13const { assert } = require('../utils/utils');14const { createJSHandle } = require('./jsHandle');15const { helper } = require('../helper');16const { serializeAsCallArgument } = require('../protocol/serializers');17const { Page } = require('./page');18const { ElementHandleChannel } = require('../channels');19const { Frame } = require('./frame');20const { Selectors } = require('./selectors');21const { CDPSession } = require('./cdpSession');22const { CDPSessionEmittedEvents } = require('../protocol/channels');23const { JSHandle } = require('./jsHandle');24const { ExecutionContext } = require('./executionContext');25const { JSHandleChannel } = require('../channels');26const { ElementHandleInitializer } = require('../server/channels');27function genElement(page, selector) {28 return page.$eval(selector, element => element);29}30module.exports = { genElement };31async click(options = {}) {32 return this._page._delegate._delegate.mouse.click(this._remoteObject.objectId, options);33}
Using AI Code Generation
1const {genElement} = require('playwright-internal');2const {genElement} = require('playwright-internal');3const {genElement} = require('playwright-internal');4const {genElement} = require('playwright-internal');5const {genElement} = require('playwright-internal');6const {genElement} = require('playwright-internal');7const {genElement} = require('playwright-internal');8const {genElement} = require('playwright-internal');9const {genElement} = require('playwright-internal');10const {genElement} = require('playwright-internal');11const {genElement} = require('playwright-internal');12const {genElement} = require('playwright-internal');13const {genElement} = require('playwright-internal');14const {genElement} = require('playwright-internal');15const {genElement} = require('playwright-internal');16const {genElement} = require('playwright-internal');17const {genElement} = require('playwright-internal');18const {genElement} = require
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!!