Best JavaScript code snippet using playwright-internal
vue.js
Source:vue.js
...203 }204}205// __UNSAFE__206// functions. The user is responsible for using them with only trusted content.207function patchDOMProp(el, key, value, 208// the following args are passed only due to potential innerHTML/textContent209// overriding existing VNodes, in which case the old tree must be properly210// unmounted.211prevChildren, parentComponent, parentSuspense, unmountChildren) {212 if (key === 'innerHTML' || key === 'textContent') {213 if (prevChildren) {214 unmountChildren(prevChildren, parentComponent, parentSuspense);215 }216 el[key] = value == null ? '' : value;217 return;218 }219 if (key === 'value' && el.tagName !== 'PROGRESS') {220 // store value as _value as well since221 // non-string values will be stringified.222 el._value = value;223 const newValue = value == null ? '' : value;224 if (el.value !== newValue) {225 el.value = newValue;226 }227 if (value == null) {228 el.removeAttribute(key);229 }230 return;231 }232 if (value === '' || value == null) {233 const type = typeof el[key];234 if (type === 'boolean') {235 // e.g. <select multiple> compiles to { multiple: '' }236 el[key] = includeBooleanAttr(value);237 return;238 }239 else if (value == null && type === 'string') {240 // e.g. <div :id="null">241 el[key] = '';242 el.removeAttribute(key);243 return;244 }245 else if (type === 'number') {246 // e.g. <img :width="null">247 // the value of some IDL attr must be greater than 0, e.g. input.size = 0 -> error248 try {249 el[key] = 0;250 }251 catch (_a) { }252 el.removeAttribute(key);253 return;254 }255 }256 // some properties perform value validation and throw257 try {258 el[key] = value;259 }260 catch (e) {261 }262}263// Async edge case fix requires storing an event listener's attach timestamp.264let _getNow = Date.now;265let skipTimestampCheck = false;266if (typeof window !== 'undefined') {267 // Determine what event timestamp the browser is using. Annoyingly, the268 // timestamp can either be hi-res (relative to page load) or low-res269 // (relative to UNIX epoch), so in order to compare time we have to use the270 // same timestamp type when saving the flush timestamp.271 if (_getNow() > document.createEvent('Event').timeStamp) {272 // if the low-res timestamp which is bigger than the event timestamp273 // (which is evaluated AFTER) it means the event is using a hi-res timestamp,274 // and we need to use the hi-res version for event listeners as well.275 _getNow = () => performance.now();276 }277 // #3485: Firefox <= 53 has incorrect Event.timeStamp implementation278 // and does not fire microtasks in between event propagation, so safe to exclude.279 const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i);280 skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);281}282// To avoid the overhead of repeatedly calling performance.now(), we cache283// and use the same timestamp for all event listeners attached in the same tick.284let cachedNow = 0;285const p = Promise.resolve();286const reset = () => {287 cachedNow = 0;288};289const getNow = () => cachedNow || (p.then(reset), (cachedNow = _getNow()));290function addEventListener(el, event, handler, options) {291 el.addEventListener(event, handler, options);292}293function removeEventListener(el, event, handler, options) {294 el.removeEventListener(event, handler, options);295}296function patchEvent(el, rawName, prevValue, nextValue, instance = null) {297 // vei = vue event invokers298 const invokers = el._vei || (el._vei = {});299 const existingInvoker = invokers[rawName];300 if (nextValue && existingInvoker) {301 // patch302 existingInvoker.value = nextValue;303 }304 else {305 const [name, options] = parseName(rawName);306 if (nextValue) {307 // add308 const invoker = (invokers[rawName] = createInvoker(nextValue, instance));309 addEventListener(el, name, invoker, options);310 }311 else if (existingInvoker) {312 // remove313 removeEventListener(el, name, existingInvoker, options);314 invokers[rawName] = undefined;315 }316 }317}318const optionsModifierRE = /(?:Once|Passive|Capture)$/;319function parseName(name) {320 let options;321 if (optionsModifierRE.test(name)) {322 options = {};323 let m;324 while ((m = name.match(optionsModifierRE))) {325 name = name.slice(0, name.length - m[0].length);326 options[m[0].toLowerCase()] = true;327 }328 }329 return [hyphenate(name.slice(2)), options];330}331function createInvoker(initialValue, instance) {332 const invoker = (e) => {333 // async edge case #6566: inner click event triggers patch, event handler334 // attached to outer element during patch, and triggered again. This335 // happens because browsers fire microtask ticks between event propagation.336 // the solution is simple: we save the timestamp when a handler is attached,337 // and the handler would only fire if the event passed to it was fired338 // AFTER it was attached.339 const timeStamp = e.timeStamp || _getNow();340 if (skipTimestampCheck || timeStamp >= invoker.attached - 1) {341 callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5 /* NATIVE_EVENT_HANDLER */, [e]);342 }343 };344 invoker.value = initialValue;345 invoker.attached = getNow();346 return invoker;347}348function patchStopImmediatePropagation(e, value) {349 if (isArray(value)) {350 const originalStop = e.stopImmediatePropagation;351 e.stopImmediatePropagation = () => {352 originalStop.call(e);353 e._stopped = true;354 };355 return value.map(fn => (e) => !e._stopped && fn(e));356 }357 else {358 return value;359 }360}361const nativeOnRE = /^on[a-z]/;362const patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {363 if (key === 'class') {364 patchClass(el, nextValue, isSVG);365 }366 else if (key === 'style') {367 patchStyle(el, prevValue, nextValue);368 }369 else if (isOn(key)) {370 // ignore v-model listeners371 if (!isModelListener(key)) {372 patchEvent(el, key, prevValue, nextValue, parentComponent);373 }374 }375 else if (key[0] === '.'376 ? ((key = key.slice(1)), true)377 : key[0] === '^'378 ? ((key = key.slice(1)), false)379 : shouldSetAsProp(el, key, nextValue, isSVG)) {380 patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);381 }382 else {383 // special case for <input v-model type="checkbox"> with384 // :true-value & :false-value385 // store value as dom properties since non-string values will be386 // stringified.387 if (key === 'true-value') {388 el._trueValue = nextValue;389 }390 else if (key === 'false-value') {391 el._falseValue = nextValue;392 }393 patchAttr(el, key, nextValue, isSVG);394 }...
runtime-dom.cjs.js
Source:runtime-dom.cjs.js
...96 el.setAttribute(key, value);97 }98 }99}100function patchDOMProp(el, key, value, 101// the following args are passed only due to potential innerHTML/textContent102// overriding existing VNodes, in which case the old tree must be properly103// unmounted.104prevChildren, parentComponent, parentSuspense, unmountChildren) {105 if ((key === 'innerHTML' || key === 'textContent') && prevChildren != null) {106 unmountChildren(prevChildren, parentComponent, parentSuspense);107 }108 el[key] = value == null ? '' : value;109}110// Async edge case fix requires storing an event listener's attach timestamp.111let _getNow = Date.now;112// Determine what event timestamp the browser is using. Annoyingly, the113// timestamp can either be hi-res ( relative to page load) or low-res114// (relative to UNIX epoch), so in order to compare time we have to use the115// same timestamp type when saving the flush timestamp.116if (typeof document !== 'undefined' &&117 _getNow() > document.createEvent('Event').timeStamp) {118 // if the low-res timestamp which is bigger than the event timestamp119 // (which is evaluated AFTER) it means the event is using a hi-res timestamp,120 // and we need to use the hi-res version for event listeners as well.121 _getNow = () => performance.now();122}123// To avoid the overhead of repeatedly calling performance.now(), we cache124// and use the same timestamp for all event listeners attached in the same tick.125let cachedNow = 0;126const p = Promise.resolve();127const reset = () => {128 cachedNow = 0;129};130const getNow = () => cachedNow || (p.then(reset), (cachedNow = _getNow()));131function patchEvent(el, name, prevValue, nextValue, instance = null) {132 const invoker = prevValue && prevValue.invoker;133 if (nextValue) {134 if (invoker) {135 prevValue.invoker = null;136 invoker.value = nextValue;137 nextValue.invoker = invoker;138 invoker.lastUpdated = getNow();139 }140 else {141 el.addEventListener(name, createInvoker(nextValue, instance));142 }143 }144 else if (invoker) {145 el.removeEventListener(name, invoker);146 }147}148function createInvoker(initialValue, instance) {149 const invoker = ((e) => {150 // async edge case #6566: inner click event triggers patch, event handler151 // attached to outer element during patch, and triggered again. This152 // happens because browsers fire microtask ticks between event propagation.153 // the solution is simple: we save the timestamp when a handler is attached,154 // and the handler would only fire if the event passed to it was fired155 // AFTER it was attached.156 if (e.timeStamp >= invoker.lastUpdated) {157 const args = [e];158 const value = invoker.value;159 if (isArray(value)) {160 for (let i = 0; i < value.length; i++) {161 runtimeCore.callWithAsyncErrorHandling(value[i], instance, 5 /* NATIVE_EVENT_HANDLER */, args);162 }163 }164 else {165 runtimeCore.callWithAsyncErrorHandling(value, instance, 5 /* NATIVE_EVENT_HANDLER */, args);166 }167 }168 });169 invoker.value = initialValue;170 initialValue.invoker = invoker;171 invoker.lastUpdated = getNow();172 return invoker;173}174function patchProp(el, key, nextValue, prevValue, isSVG, prevChildren, parentComponent, parentSuspense, unmountChildren) {175 switch (key) {176 // special177 case 'class':178 patchClass(el, nextValue, isSVG);179 break;180 case 'style':181 patchStyle(el, prevValue, nextValue);182 break;183 default:184 if (isOn(key)) {185 patchEvent(el, key.slice(2).toLowerCase(), prevValue, nextValue, parentComponent);186 }187 else if (!isSVG && key in el) {188 patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);189 }190 else {191 patchAttr(el, key, nextValue, isSVG);192 }193 break;194 }195}196const { render, createApp } = runtimeCore.createRenderer({197 patchProp,198 ...nodeOps199});200Object.keys(runtimeCore).forEach(function (k) {201 if (k !== 'default') Object.defineProperty(exports, k, {202 enumerable: true,...
runtime-dom.cjs.prod.js
Source:runtime-dom.cjs.prod.js
...94 el.setAttribute(key, value);95 }96 }97}98function patchDOMProp(el, key, value, 99// the following args are passed only due to potential innerHTML/textContent100// overriding existing VNodes, in which case the old tree must be properly101// unmounted.102prevChildren, parentComponent, parentSuspense, unmountChildren) {103 if ((key === 'innerHTML' || key === 'textContent') && prevChildren != null) {104 unmountChildren(prevChildren, parentComponent, parentSuspense);105 }106 el[key] = value == null ? '' : value;107}108// Async edge case fix requires storing an event listener's attach timestamp.109let _getNow = Date.now;110// Determine what event timestamp the browser is using. Annoyingly, the111// timestamp can either be hi-res ( relative to page load) or low-res112// (relative to UNIX epoch), so in order to compare time we have to use the113// same timestamp type when saving the flush timestamp.114if (typeof document !== 'undefined' &&115 _getNow() > document.createEvent('Event').timeStamp) {116 // if the low-res timestamp which is bigger than the event timestamp117 // (which is evaluated AFTER) it means the event is using a hi-res timestamp,118 // and we need to use the hi-res version for event listeners as well.119 _getNow = () => performance.now();120}121// To avoid the overhead of repeatedly calling performance.now(), we cache122// and use the same timestamp for all event listeners attached in the same tick.123let cachedNow = 0;124const p = Promise.resolve();125const reset = () => {126 cachedNow = 0;127};128const getNow = () => cachedNow || (p.then(reset), (cachedNow = _getNow()));129function patchEvent(el, name, prevValue, nextValue, instance = null) {130 const invoker = prevValue && prevValue.invoker;131 if (nextValue) {132 if (invoker) {133 prevValue.invoker = null;134 invoker.value = nextValue;135 nextValue.invoker = invoker;136 invoker.lastUpdated = getNow();137 }138 else {139 el.addEventListener(name, createInvoker(nextValue, instance));140 }141 }142 else if (invoker) {143 el.removeEventListener(name, invoker);144 }145}146function createInvoker(initialValue, instance) {147 const invoker = ((e) => {148 // async edge case #6566: inner click event triggers patch, event handler149 // attached to outer element during patch, and triggered again. This150 // happens because browsers fire microtask ticks between event propagation.151 // the solution is simple: we save the timestamp when a handler is attached,152 // and the handler would only fire if the event passed to it was fired153 // AFTER it was attached.154 if (e.timeStamp >= invoker.lastUpdated) {155 const args = [e];156 const value = invoker.value;157 if (isArray(value)) {158 for (let i = 0; i < value.length; i++) {159 runtimeCore.callWithAsyncErrorHandling(value[i], instance, 5 /* NATIVE_EVENT_HANDLER */, args);160 }161 }162 else {163 runtimeCore.callWithAsyncErrorHandling(value, instance, 5 /* NATIVE_EVENT_HANDLER */, args);164 }165 }166 });167 invoker.value = initialValue;168 initialValue.invoker = invoker;169 invoker.lastUpdated = getNow();170 return invoker;171}172function patchProp(el, key, nextValue, prevValue, isSVG, prevChildren, parentComponent, parentSuspense, unmountChildren) {173 switch (key) {174 // special175 case 'class':176 patchClass(el, nextValue, isSVG);177 break;178 case 'style':179 patchStyle(el, prevValue, nextValue);180 break;181 default:182 if (isOn(key)) {183 patchEvent(el, key.slice(2).toLowerCase(), prevValue, nextValue, parentComponent);184 }185 else if (!isSVG && key in el) {186 patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);187 }188 else {189 patchAttr(el, key, nextValue, isSVG);190 }191 break;192 }193}194const { render, createApp } = runtimeCore.createRenderer({195 patchProp,196 ...nodeOps197});198Object.keys(runtimeCore).forEach(function (k) {199 if (k !== 'default') Object.defineProperty(exports, k, {200 enumerable: true,...
render.js
Source:render.js
1import { ShapeFlag, Fragment } from './vnode';2export function render (vnode, container) {3 const preVnode = container._vnode;4 if (!vnode) {5 if (preVnode) {6 unmount(preVnode)7 }8 } else {9 patch(preVnode, vnode, container)10 }11 container._vnode = vnode;12}13function unmount (vnode) {14 const { shapeFlag, el } = vnode;15 if (shapeFlag & ShapeFlag.COMPONENT) {16 unmountComponent(vnode)17 } else if (shapeFlag & ShapeFlag.FRAGMENT) {18 unmountFragment(vnode)19 } else {20 el.parentNode.removeChild(el)21 }22}23function patch (preVnode, vnode, container) {24 // å¦ææ§èç¹åå¨ï¼å¹¶ä¸æ§èç¹åæ°èç¹çtypeä¸å25 if (preVnode && !isSameNode(preVnode, vnode)) {26 unmount(preVnode);27 preVnode = null28 }29 const { shapeFlag } = vnode;30 if (shapeFlag & ShapeFlag.COMPONENT) {31 processComponent(preVnode, vnode, container);32 } else if (shapeFlag & ShapeFlag.FRAGMENT) {33 processFragment(preVnode, vnode, container)34 } else if (shapeFlag & ShapeFlag.TEXT) {35 // æ¯textç±»å36 processText(preVnode, vnode, container)37 } else {38 processElement(preVnode, vnode, container)39 }40}41function isSameNode (preVnode, vnode) {42 return preVnode.type === vnode.type43}44function processComponent (preVnode, vnode, container) {45}46function processFragment (preVnode, vnode, container) {47}48function processText (preVnode, vnode, container) {49 //æ§èç¹åå¨çè¯ï¼å°±æ´æ°æ§èç¹çåå
ç´ 50 if (preVnode) {51 vnode.el = preVnode.el;52 preVnode.el.textContent = vnode.children53 } else {54 //æ§èç¹ä¸åå¨çè¯ï¼å°±æè½½55 mountText(vnode, container)56 }57}58function mountText (vnode, container) {59 const textNode = document.createTextNode(vnode.children)60 container.appendChild(textNode)61 vnode.el = textNode;62}63function processElement (preVnode, vnode, container) {64 // è¿æ¯å
å¤ææ§èç¹åå¨ä¸å¦65 if (preVnode) {66 patchElement(preVnode, vnode)67 } else {68 mountElement(vnode, container)69 }70}71function mountElement (vnode, container) {72 const { type, props, children, shapeFlag } = vnode;73 const elementNode = document.createElement(type);74 // mountProps(props, elementNode);75 patchProps(null, props, container)76 // mountChildren(vnode, elementNode)77 if (shapeFlag & shapeFlag == ShapeFlag.TEXT_CHILDREN) {78 mountText(vnode, container)79 } else if (shapeFlag & shapeFlag === ShapeFlag.ARRAY_CHILDREN) {80 mountChildren(vnode, container)81 }82 container.appendChild(elementNode)83 vnode.el = elementNode84}85// function mountProps (props, el) {86// for (let propKey in props) {87// const value = props[propKey];88// switch (propKey) {89// case 'class':90// el.className = value;91// break;92// case 'style':93// for (let key in value) {94// el.style[key] = value[key]95// }96// break;97// default:98// if (/^on[^a-z]/.test(propKey)) {99// const eventName = propKey.slice(2).toLocaleLowerCase();100// el.addEventListener(eventName, value)101// } else if (domPropsRegex.test(propKey)) {102// if (value === null & isBoolean(el[propKey])) {103// value = true104// }105// el[propKey] = value106// } else {107// if (value === '' | value === false) {108// el.removeAttribute(propKey)109// } else {110// el.setAttribute(propKey, value)111// }112// }113// }114// }115// }116function mountChildren (vnode, container) {117 children.forEach((child) => {118 patch(null, child, container)119 })120}121function patchElement (preVnode, vnode) {122 vnode.el = preVnode.el;123 patchProps(preVnode.props, vnode.props);124 patchChildren(preVnode, vnode, vnode.el)125}126//åèç¹æ3ç§ç±»åï¼textç±»åï¼arrayç±»åånullç±»å,ä¸å
±9ç§ç±»å127function patchChildren (preVnode, vnode, container) {128 const { shapeFlag: preShapeFlag, children: c1 } = preVnode;129 const { shapeFlag, children: c2 } = vnode;130 if (shapeFlag & ShapeFlag.TEXT_CHILDREN) {131 // if (preShapeFlag & ShapeFlag.TEXT_CHILDREN) {132 // container.textContent = vnode.textContent;133 // } else if (preShapeFlag & ShapeFlag.ARRAY_CHILDREN) {134 // unmountChildren(c1);135 // container.textContent = vnode.textContent;136 // } else {137 // container.textContent = vnode.textContent138 // }139 if (preShapeFlag & ShapeFlag.ARRAY_CHILDREN) {140 unmountChildren(c1);141 }142 if (vnode !== preVnode) {143 container.textContent = vnode.textContent;144 }145 } else if (shapeFlag & ShapeFlag.ARRAY_CHILDREN) {146 if (preShapeFlag & ShapeFlag.TEXT_CHILDREN) {147 container.textContent = '';148 mountChildren(c2, container)149 } else if (preShapeFlag & ShapeFlag.ARRAY_CHILDREN) {150 // patchArrayChildren()151 } else {152 mountChildren(c2, container)153 }154 } else {155 if (preShapeFlag & ShapeFlag.TEXT_CHILDREN) {156 container.textContent = ''157 } else if (preShapeFlag & ShapeFlag.ARRAY_CHILDREN) {158 unmountChildren(c1)159 }160 }161}162function patchProps (newProps, oldProps, el) {163 if (newProps === oldProps) return;164 //å
¼å®¹å¤çï¼é²æ¢ä¸è¾¹éåçæ¶åå±æ§æ¯undefinedæ¥é165 newProps = newProps || {};166 // 为ä»ä¹è¦ç¨è¿ç§èå¼çåæ³èä¸ç¨æ°çes6çåæ³ï¼æ¯å 为es6çé»è®¤èµå¼åªå¯¹undefinedèµ·ä½ç¨ï¼å¦ææ¯nullæ¯ä¸èµ·ä½ç¨ç167 oldProps = oldProps || {};168 for (const key in newProps) {169 let next = newProps[key];170 let prev = oldProps[key];171 if (next !== prev) {172 patchDomprop(prev, next, key, el)173 }174 }175 //è¿æä¸æ¥å°±æ¯è¦éåèå±æ§ï¼å¦æå¨æ°å±æ§ä¸ä¸åå¨çè¯ï¼å°±å é¤176 for (const key in oldProps) {177 if (newProps[key] === null) {178 patchDomprop(prev, null, key, el)179 }180 }181}182function patchDomprop (prev, next, propKey, el) {183 switch (propKey) {184 case 'class':185 el.className = next || '';186 break;187 case 'style':188 for (let key in next) {189 el.style[key] = next[key]190 }191 if (prev) {192 for (const styleName in prev) {193 if (next[styleName] === null) {194 el.style.styleName = ''195 }196 }197 }198 break;199 default:200 if (/^on[^a-z]/.test(propKey)) {201 const eventName = propKey.slice(2).toLocaleLowerCase();202 //è¦å¤æï¼å¦æprevåå¨è¦ç§»é¤äºä»¶ï¼å¦ænextåå¨å°±ææ·»å äºä»¶203 if (prev) {204 el.removeEventListener(eventName, prev)205 }206 if (next) {207 el.addEventListener(eventName, next)208 }209 } else if (domPropsRegex.test(propKey)) {210 if (next === null & isBoolean(el[propKey])) {211 next = true212 }213 el[propKey] = next214 } else {215 if (next === '' | next === false) {216 el.removeAttribute(propKey)217 } else {218 el.setAttribute(propKey, next)219 }220 }221 }...
runtime-dom.esm-bundler.js
Source:runtime-dom.esm-bundler.js
...95 el.setAttribute(key, value);96 }97 }98}99function patchDOMProp(el, key, value, 100// the following args are passed only due to potential innerHTML/textContent101// overriding existing VNodes, in which case the old tree must be properly102// unmounted.103prevChildren, parentComponent, parentSuspense, unmountChildren) {104 if ((key === 'innerHTML' || key === 'textContent') && prevChildren != null) {105 unmountChildren(prevChildren, parentComponent, parentSuspense);106 }107 el[key] = value == null ? '' : value;108}109// Async edge case fix requires storing an event listener's attach timestamp.110let _getNow = Date.now;111// Determine what event timestamp the browser is using. Annoyingly, the112// timestamp can either be hi-res ( relative to page load) or low-res113// (relative to UNIX epoch), so in order to compare time we have to use the114// same timestamp type when saving the flush timestamp.115if (typeof document !== 'undefined' &&116 _getNow() > document.createEvent('Event').timeStamp) {117 // if the low-res timestamp which is bigger than the event timestamp118 // (which is evaluated AFTER) it means the event is using a hi-res timestamp,119 // and we need to use the hi-res version for event listeners as well.120 _getNow = () => performance.now();121}122// To avoid the overhead of repeatedly calling performance.now(), we cache123// and use the same timestamp for all event listeners attached in the same tick.124let cachedNow = 0;125const p = Promise.resolve();126const reset = () => {127 cachedNow = 0;128};129const getNow = () => cachedNow || (p.then(reset), (cachedNow = _getNow()));130function patchEvent(el, name, prevValue, nextValue, instance = null) {131 const invoker = prevValue && prevValue.invoker;132 if (nextValue) {133 if (invoker) {134 prevValue.invoker = null;135 invoker.value = nextValue;136 nextValue.invoker = invoker;137 invoker.lastUpdated = getNow();138 }139 else {140 el.addEventListener(name, createInvoker(nextValue, instance));141 }142 }143 else if (invoker) {144 el.removeEventListener(name, invoker);145 }146}147function createInvoker(initialValue, instance) {148 const invoker = ((e) => {149 // async edge case #6566: inner click event triggers patch, event handler150 // attached to outer element during patch, and triggered again. This151 // happens because browsers fire microtask ticks between event propagation.152 // the solution is simple: we save the timestamp when a handler is attached,153 // and the handler would only fire if the event passed to it was fired154 // AFTER it was attached.155 if (e.timeStamp >= invoker.lastUpdated) {156 const args = [e];157 const value = invoker.value;158 if (isArray(value)) {159 for (let i = 0; i < value.length; i++) {160 callWithAsyncErrorHandling(value[i], instance, 5 /* NATIVE_EVENT_HANDLER */, args);161 }162 }163 else {164 callWithAsyncErrorHandling(value, instance, 5 /* NATIVE_EVENT_HANDLER */, args);165 }166 }167 });168 invoker.value = initialValue;169 initialValue.invoker = invoker;170 invoker.lastUpdated = getNow();171 return invoker;172}173function patchProp(el, key, nextValue, prevValue, isSVG, prevChildren, parentComponent, parentSuspense, unmountChildren) {174 switch (key) {175 // special176 case 'class':177 patchClass(el, nextValue, isSVG);178 break;179 case 'style':180 patchStyle(el, prevValue, nextValue);181 break;182 default:183 if (isOn(key)) {184 patchEvent(el, key.slice(2).toLowerCase(), prevValue, nextValue, parentComponent);185 }186 else if (!isSVG && key in el) {187 patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);188 }189 else {190 patchAttr(el, key, nextValue, isSVG);191 }192 break;193 }194}195const { render, createApp } = createRenderer({196 patchProp,197 ...nodeOps198});...
patchProps.js
Source:patchProps.js
1import { isBoolean } from '../utils';2const domPropsRE = /[A-Z]|^(value|checked|selected|muted|disabled)$/;3export function patchProps(oldProps, newProps, el) {4 if (oldProps === newProps) {5 return;6 }7 newProps = newProps || {};8 oldProps = oldProps || {};9 for (const key in newProps) {10 if (key === 'key') {11 continue;12 }13 const next = newProps[key];14 const prev = oldProps[key];15 if (next !== prev) {16 patchDomProp(el, key, prev, next);17 }18 }19 for (const key in oldProps) {20 if (key !== 'key' && newProps[key] == null) {21 patchDomProp(el, key, oldProps[key], null);22 }23 }24}25function patchDomProp(el, key, prev, next) {26 switch (key) {27 case 'class':28 // nextå¯è½ä¸ºnullï¼ä¼åæ'null'ï¼å æ¤è¦è®¾æ''29 el.className = next || '';30 break;31 case 'style':32 if (!next) {33 el.removeAttribute('style');34 } else {35 for (const styleName in next) {36 el.style[styleName] = next[styleName];37 }38 if (prev) {39 for (const styleName in prev) {40 if (next[styleName] == null) {41 el.style[styleName] = '';42 }43 }44 }45 }46 break;47 default:48 if (/^on[^a-z]/.test(key)) {49 const eventName = key.slice(2).toLowerCase();50 if (prev) {51 el.removeEventListener(eventName, prev);52 }53 if (next) {54 el.addEventListener(eventName, next);55 }56 } else if (domPropsRE.test(key)) {57 // {'checked': ''}58 if (next === '' && isBoolean(el[key])) {59 next = true;60 }61 el[key] = next;62 } else {63 // attr64 if (next == null || next === false) {65 el.removeAttribute(key);66 } else {67 el.setAttribute(key, next);68 }69 }70 break;71 }...
patchProp.js
Source:patchProp.js
...27 : key[0] === '^'28 ? ((key = key.slice(1)), false)29 : shouldSetAsProp(el, key, nextValue, isSVG)30 ) {31 patchDOMProp(32 el,33 key,34 nextValue,35 prevChildren,36 parentComponent,37 parentSuspense,38 unmountChildren39 )40 } else {41 // special case for <input v-model type="checkbox"> with42 // :true-value & :false-value43 // store value as dom properties since non-string values will be44 // stringified.45 if (key === 'true-value') {...
props.js
Source:props.js
1import { includeBooleanAttr } from '../../shared/index.js'2export function patchDOMProp (3 el,4 key,5 value,6 prevChildren,7 parentComponent,8 parentSuspense,9 unmountChildren10) {11 if (key === 'innerHTML' || key === 'textContent') {12 if (prevChildren) {13 unmountChildren(prevChildren, parentComponent, parentSuspense)14 }15 el[key] = value == null ? '' : value16 return17 }18 if (19 key === 'value' &&20 el.tagName !== 'PROGRESS' &&21 !el.tagName.includes('-')22 ) {23 el._value = value24 const newValue = value == null ? '' : value25 if (el.value !== newValue || el.tagName === 'OPTION') {26 el.value = newValue27 }28 if (value == null) {29 el.removeAttribute(key)30 }31 return32 }33 if (value === '' || value == null) {34 const type = typeof el[key]35 if (type === 'boolean') {36 el[key] = includeBooleanAttr(value)37 return38 } else if (value == null && type === 'string') {39 el[key] = ''40 el.removeAttribute(key)41 return42 } else if (type === 'number') {43 try {44 el[key] = 045 } catch (_a) {}46 el.removeAttribute(key)47 return48 }49 }50 try {51 el[key] = value52 } catch (e) {}...
Using AI Code Generation
1const playwright = require('playwright');2(async () => {3 for (const browserType of BROWSER) {4 const browser = await playwright[browserType].launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.patchDOMProp('navigator.webdriver', 'undefined');8 await page.evaluate(() => {9 console.log(window.navigator.webdriver);10 });11 await browser.close();12 }13})();14const playwright = require('playwright');15(async () => {16 for (const browserType of BROWSER) {17 const browser = await playwright[browserType].launch();18 const context = await browser.newContext();19 const page = await context.newPage();20 await page.patchDOMProp('navigator.webdriver', 'undefined');21 await page.evaluate(() => {22 console.log(window.navigator.webdriver);23 });24 await browser.close();25 }26})();27const playwright = require('playwright');28(async () => {29 for (const browserType of BROWSER) {30 const browser = await playwright[browserType].launch();31 const context = await browser.newContext();32 const page = await context.newPage();33 await page.patchDOMProp('navigator.webdriver', 'undefined');34 await page.evaluate(() => {35 console.log(window.navigator.webdriver);36 });37 await browser.close();38 }39})();
Using AI Code Generation
1const { chromium } = require('playwright');2(async () => {3 const browser = await chromium.launch();4 const page = await browser.newPage();5 await page.patchDOMProp('innerHTML', (innerHTML, ...args) => {6 return innerHTML.replace(/Playwright/g, 'Puppeteer');7 });8 const title = await page.$eval('h1', (el) => el.innerHTML);9 console.log(title);10 await browser.close();11})();12const { chromium } = require('playwright');13(async () => {14 const browser = await chromium.launch();15 const page = await browser.newPage();16 await page.patchEvent('click', (event, ...args) => {17 console.log('click intercepted');18 });19 await page.click('text=Get started');20 await browser.close();21})();22const { chromium } = require('playwright');23(async () => {24 const browser = await chromium.launch();25 const context = await browser.newContext();26 await context.patchContext(async (delegate, method, ...args) => {27 if (method === 'newPage') {28 const page = await delegate.newPage();29 await page.patchEvent('click', (event, ...args) => {30 console.log('click intercepted');31 });32 return page;33 }34 return delegate[method](...args);35 });36 const page = await context.newPage();37 await page.click('text=Get started');38 await browser.close();39})();40const { chromium } = require('playwright');41(async () => {42 const browser = await chromium.launch();43 await browser.patchBrowser(async (delegate, method, ...args)
Using AI Code Generation
1const { chromium } = require('playwright');2const { patchDOMProp } = require('playwright/lib/server/domPatchers');3(async () => {4 const browser = await chromium.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 await page.evaluate(() => {8 patchDOMProp('innerHTML', (element, value) => {9 element.innerHTML = value.replace(/wikipedia/gi, 'wikipediall');10 });11 });12 await page.screenshot({ path: 'wikipedia.png' });13 await browser.close();14})();
Using AI Code Generation
1const { patchDOMProp } = require('playwright/lib/server/domPatchers.js');2patchDOMProp('innerHTML', (element, value) => {3 element.innerHTML = value;4});5const { patchDOMMethod } = require('playwright/lib/server/domPatchers.js');6patchDOMMethod('setAttribute', (element, name, value) => {7 element.setAttribute(name, value);8});9const { webkit M}ethod } = require('playwright/lib/server/domPatchers.js');10patchDOMMethod('removeAttribute', (element, name) => {11 element.removeAttribute(name);12});13c nst { ratchDOMMethodequire('playwright');server/domPatchers.js');14patchDOMMethod('dispatchEvent', (element, event) => {15 element.dispatchEvent(event);16});17const { patchDOMMehod } = require('playwrght/ib/erverdomPatchers.js');18hDOMMetod('focus', (elemnt) => {19 element.focus();20});21cont { patchDOMMethod } = require(playwright/lib/server/domPatchers.js'22patchDOMMethod('blur', (element) => {const path = require('path');23 element.blur();24});25c nst { ratchDOMMethod } = requireeqplaywright/lub/server/domPatchers.js');26patchDOMMethod('click', (element) => {27 element.click();28});29const { patchDOMMethod } = require('playwright/lib/server/domPatchers.js');30patchDOMMethod('scrollIitoViewIfNeeded', (elemert) => {31 element.sc(ollIntoViewIfNeeded();32});33const { patchDOMMethod } = require('playwright/lib/server/domPatchers.js');34patchDOMMethod('scrollIntoView', (element, center) => {35 element.scrollIntoView(center);36});37const { patchDOMMethod } = require('playwright/lib/server/domPatchers.js');38patchDOMMethod('getBoundingClientRect', (element) => {39 return element.getBoundingClientRect();40});
Using AI Code Generation
1const { webkit } = require('playwright');2const path = require('path');3const fs = require('fs');4(async () => {5 const browser = await webkit.launch();6 const context = await browser.newContext();7 const page = await context.newPage();8 const elementHandle = await page.$('input[name="q"]');9 await element'andle.evaluate((element) => {10 window.patchDOMProp(element, 'value', 'test');11 });12 await page.screenshot({ path: 'example.png' });13 await browser.close();14})();
Using AI Code Generation
1const { patchDOMProp } = require('playwright/lib/utils/patchers');2patchDOMProp('innerHfs');3(async () => {4 const browser = await webkit.launch();5 const context = await browser.newContext();6 const page = await context.newPage();7 const elementHandle = await page.$('input[name="q"]');8 await elementHandle.evaluate((element) => {9 window.patchDOMProp(element, 'value', 'test');10 });11 await page.screenshot({ path: 'example.png' });12 await browser.close();13})();
Using AI Code Generation
1const { patchDOMProp } = require('playwright/lib/utils/patchers');2patchDOMProp('innerHTML', (orig, el) => {3 const value = orig.call(el);4 return value.replace(/<script>.*<\/script>/, '');5});6const { patchMethod } = require('playwright/lib/utils/patchers');7patchMethod(window.HTMLIFrameElement.prototype, 'contentWindow', (orig, iframe) => {8 const value = orig.call(iframe);9 patchMethod(value, 'eval', (orig, window) => {10 return function (expression) {11 if (expression === 'window')12 return this;13 return orig.call(this, expression);14 };15 });16 return value;17});18#### newContext([options])
Using AI Code Generation
1const { patchDOMProp } = require('playwright/lib/server/domPatchers');2patchDOMProp('value', (element, value) => {3 if (element.tagName === 'INPUT' && element.type === 'file') {4 element.files = value;5 } else {6 element.value = value;7 }8});9const { patchAttribute } = require('playwright/lib/server/domPatchers');10patchAttribute('value', (element, value) => {11 if (element.tagName === 'INPUT' && element.type === 'file') {12 element.files = value;13 } else {14 element.value = value;15 }16});17const { patchProperty } = require('playwright/lib/server/domPatchers');18patchProperty('value', (element, value) => {19 if (element.tagName === 'INPUT' && element.type === 'file') {20 element.files = value;21 } else {22 element.value = value;23 }24});25const { patchEvent } = require('playwright/lib/server/domPatchers');26patchEvent('click', (element, event) => {27 element.dispatchEvent(new MouseEvent('click', event));28});29const { patchEventListener } = require('playwright/lib/server/domPatchers');30patchEventListener('click', (element, listener, useCapture) => {31 element.addEventListener('click', listener, useCapture);32});33const { patchOnBeforeInput } = require('playwright/lib/server/domPatchers');34patchOnBeforeInput((element, value) => {35 element.value = value;36});37const { patchOnBeforeInputMethod } = require('playwright/lib/server/domPatchers');38patchOnBeforeInputMethod((element, value) =>
Using AI Code Generation
1const { patchDOMProp } = require('playwright-core/lib/server/domPatchers');2patchDOMProp('click', (element, method, args, originalMethod) => {3 console.log('click intercepted');4 return originalMethod.apply(element, args);5});6const { patchDOMMethod } = require('playwright-core/lib/server/domPatchers');7patchDOMMethod('click', (element, method, args, originalMethod) => {8 console.log('click intercepted');9 return originalMethod.apply(element, args);10});11const { patchDOMAttribute } = require('playwright-core/lib/server/domPatchers');12patchDOMAttribute('click', (element, method, args, originalMethod) => {13 console.log('click intercepted');14 return originalMethod.apply(element, args);15});16const { patchDOMEvent } = require('playwright-core/lib/server/domPatchers');17patchDOMEvent('click', (element, method, args, originalMethod) => {18 console.log('click intercepted');19 return originalMethod.apply(element, args);20});', (element, method, args, originalMethod) => {
Using AI Code Generation
1const { patchDOMProp } = require('playwright/lib/server/domPatchers');2patchDOMProp('innerHTML value) => {3 element.innerHTML = value;4});5const { patchDOMMethod } = require('playwright/lib/server/domPatchers');6patchDOMMethod('setAttribute', (element, name, value) => {7 element.setAttribute(name, value);8});9const { patchDOMMethod } = require('playwright/lib/server/domPatchers');10patchDOMMethod('setAttribute', (element, name, value) => {11 element.setAttribute(name, value);12});13const { patchDOMMethod} = require('playwright/lib/server/domPatchers');14patchDOMMethod('setAttribute', (element, name, value) => {15 element.setAttribute(name value);16});17const { patchDOMMethod } = require('playwright/lib/server/domPatcher');18patchDOMMethod('setAttribute', (element, name value) => {19 element.setAttribute(name, value);20});21const { patchDOMMethod } = requre('playwright/lib/server/domPatchers');22patchDOMMethod('setAttribute', (elemet, nme, vaue) => {23 element.setAttribute(name, value);24});25const { patchDOMMethod } = require('playwright/lib/server/domPatchers');26patchDOM('setAttribute', (element, name, value27 element.setAttribute(name, value);28});29const { patchDOMMethod } = require('playwright/lib/server/domPatchers');30const { patchWindow } = require('playwright-core/lib/server/domPatchers');31patchWindow('click', (element, method, args, originalMethod) => {32 console.log('click intercepted');33 return originalMethod.apply(element, args);34});35const { patchBrowserContext } = require('playwright-core/lib/server/domPatchers');36patchBrowserContext('click', (element, method, args, originalMethod) => {37 console.log('click intercepted');38 return originalMethod.apply(element, args);39});40const { patchPage } = require('playwright-core/lib/server/domPatchers');41patchPage('click', (element, method, args, originalMethod) => {42 console.log('click intercepted');43 return originalMethod.apply(element, args);44});45const { patchFrame } = require('playwright-core/lib/server/domPatchers');46patchFrame('click', (element, method, args, originalMethod) => {
Using AI Code Generation
1const { patchDOMProp } = require('playwright/lib/server/domPatchers');2patchDOMProp('innerHTML', (element, value) => {3 element.innerHTML = value;4});5const { patchDOMMethod } = require('playwright/lib/server/domPatchers');6patchDOMMethod('setAttribute', (element, name, value) => {7 element.setAttribute(name, value);8});9const { patchDOMMethod } = require('playwright/lib/server/domPatchers');10patchDOMMethod('setAttribute', (element, name, value) => {11 element.setAttribute(name, value);12});13const { patchDOMMethod } = require('playwright/lib/server/domPatchers');14patchDOMMethod('setAttribute', (element, name, value) => {15 element.setAttribute(name, value);16});17const { patchDOMMethod } = require('playwright/lib/server/domPatchers');18patchDOMMethod('setAttribute', (element, name, value) => {19 element.setAttribute(name, value);20});21const { patchDOMMethod } = require('playwright/lib/server/domPatchers');22patchDOMMethod('setAttribute', (element, name, value) => {23 element.setAttribute(name, value);24});25const { patchDOMMethod } = require('playwright/lib/server/domPatchers');26patchDOMMethod('setAttribute', (element, name, value) => {27 element.setAttribute(name, value);28});29const { patchDOMMethod } = require('playwright/lib/server/domPatchers');
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!!