Best Python code snippet using playwright-python
CollisionHelper.js
Source:CollisionHelper.js  
...33			gravityFactor: 0,34		};3536		return function(oldPos, newPos, gravityFactor, ellipsoid, triangleIterator, stopOnFirstHit, horizontalOnly) {37			p.ellipsoidSpace.copy(ellipsoid);38			p.worldPosition.copy(oldPos);39			p.worldVelocity.subVectors(newPos, oldPos);4041			p.foundCollision = false;42			p.nearestDistance = 0;43			p.collisionRecursionDepth = 0;44			p.stopOnFirstHit = stopOnFirstHit;45			p.gravityFactor = gravityFactor;4647			var result = this.collisionSlide(p, triangleIterator);48			newPos.copy(result.pos);4950			return result;51		}52	}(),5354	collisionSlide: function(p, triangleIterator) {55		p.lspVelocity.copy(p.worldVelocity).divide(p.ellipsoidSpace);56		p.lspPosition.copy(p.worldPosition).divide(p.ellipsoidSpace);57		var oldY = p.lspPosition.y;5859		p.collisionRecursionDepth = 0;60		var finalPosition = this.collideWithWorld(p, triangleIterator);61		var climbing = (oldY < finalPosition.y);6263		if (p.gravityFactor !== 0 && !climbing && !p.horizontalOnly) {64			p.lspVelocity.copy(this.gravity);65			p.lspVelocity.y *= p.gravityFactor;66			p.lspVelocity.divide(p.ellipsoidSpace);67			p.lspPosition.copy(finalPosition);68			p.collisionRecursionDepth = 0;69			finalPosition = this.collideWithWorld(p, triangleIterator);70		}7172		finalPosition.multiply(p.ellipsoidSpace);7374		if (p.horizontalOnly) {75			finalPosition.y = p.originalHeight;76		}7778		var result = { 79			pos: finalPosition,80			climbing: climbing,81			foundCollision: p.foundCollision,82			gridObject: p.gridObject,83			normal: p.normal,84		};8586		return result;87	},8889	collideWithWorld: function() {90		var normal = new THREE.Vector3();91		var aux = new THREE.Vector3();92		var result = new THREE.Vector3();93		var destinationPoint = new THREE.Vector3();94		var newPosition = new THREE.Vector3();95		var slidePlaneOrigin = new THREE.Vector3();96		var slidePlaneNormal = new THREE.Vector3();97		var newDestinationPoint = new THREE.Vector3();98		var newVelocityVector = new THREE.Vector3();99		var v0 = new THREE.Vector3();100		var v1 = new THREE.Vector3();101		var v2 = new THREE.Vector3();102103		return function(p, triangleIterator) {104			var that = this;105106			var unitScale = this.unitsPerMeter / 100;107			var veryCloseDistance = 0.005 * unitScale;108109			if (p.collisionRecursionDepth > 5) {110				return p.lspPosition;111			}112113			p.lspNormalizedVelocity.copy(p.lspVelocity).normalize();114115			p.foundCollision = false;116			p.nearestDistance = 0;117118			triangleIterator(function(gridObject, t0, t1, t2, triangleOffset) {119				GAME.grid.totalSphereTriangleChecks++;120				121				v0.copy(t0).divide(p.ellipsoidSpace);122				v1.copy(t1).divide(p.ellipsoidSpace);123				v2.copy(t2).divide(p.ellipsoidSpace);124125				aux.subVectors(v2, v0);126				normal.copy(v1).sub(v0).cross(aux).normalize();127128				that.sphereCollidingWithTriangle(gridObject, p, v0, v1, v2, normal);129			});130131			if (!p.foundCollision) {132				result.copy(p.lspPosition).add(p.lspVelocity);133				return result;134			}135136			destinationPoint.copy(p.lspPosition).add(p.lspVelocity);137			newPosition.copy(p.lspPosition);138139			if (p.nearestDistance >= veryCloseDistance) {140				aux.copy(p.lspVelocity).normalize();141				aux.multiplyScalar(p.nearestDistance - veryCloseDistance);142				newPosition.copy(p.lspPosition).add(aux);143144				aux.normalize().multiplyScalar(veryCloseDistance);145				p.intersectionPoint.sub(aux);146			}147148			if (!p.stopOnFirstHit) {149				slidePlaneOrigin.copy(p.intersectionPoint);150				slidePlaneNormal.copy(newPosition).sub(p.intersectionPoint).normalize();151152				var x = slidePlaneOrigin.x;153				var y = slidePlaneOrigin.y;154				var z = slidePlaneOrigin.z;155156				var A = slidePlaneNormal.x;157				var B = slidePlaneNormal.y;158				var C = slidePlaneNormal.z;159				var D = -((A * x) + (B * y) + (C * z));160161				var planeConstant = D;162163				var signedDistFromDestPointToSlidingPlane = slidePlaneNormal.dot(destinationPoint) + planeConstant;164165				aux.copy(slidePlaneNormal).multiplyScalar(signedDistFromDestPointToSlidingPlane);166				newDestinationPoint.copy(destinationPoint).sub(aux);167				newVelocityVector.copy(newDestinationPoint).sub(p.intersectionPoint);168169				if (newVelocityVector.length() < veryCloseDistance) {170					return newPosition;171				}172173				p.collisionRecursionDepth++;174				p.lspPosition.copy(newPosition);175				p.lspVelocity.copy(newVelocityVector);176177				return this.collideWithWorld(p, triangleIterator);178			} else {179				p.lspPosition.copy(newPosition);180				return p.lspPosition;181			}182		}183	}(),184185	sphereCollidingWithTriangle: function() {186		var velocity = new THREE.Vector3();187		var position = new THREE.Vector3();188		var aux = new THREE.Vector3();189		var planeIntersectionPoint = new THREE.Vector3();190		var collisionPoint = new THREE.Vector3();191		var edge = new THREE.Vector3();192		var spherePositionToVertex = new THREE.Vector3();193194		return function(gridObject, p, v0, v1, v2, normal) {195			var facing = normal.dot(p.lspNormalizedVelocity);			196			if (facing <= 0) {197				velocity.copy(p.lspVelocity);198				position.copy(p.lspPosition);199200				var t0, t1;201				var sphereInPlane = false;202203				var A = normal.x;204				var B = normal.y;205				var C = normal.z;206				var D = -((A * v0.x) + (B * v0.y) + (C * v0.z));207208				var planeConstant = D;209210				var signedDistFromPositionToTriPlane = position.dot(normal) + planeConstant;211				var planeNormalDotVelocity = normal.dot(velocity);212213				if (planeNormalDotVelocity === 0) {214					if (Math.abs(signedDistFromPositionToTriPlane) >= 1) {215						return false;216					} else {217						sphereInPlane = true;218					}219				} else {220					t0 = (1 - signedDistFromPositionToTriPlane) / planeNormalDotVelocity;221					t1 = (-1 - signedDistFromPositionToTriPlane) / planeNormalDotVelocity;222223					if (t0 > t1) {224						var temp = t0;225						t0 = t1;226						t1 = temp;227					}228229					if (t0 > 1 || t1 < 0) {230						return false;231					}232233					if (t0 < 0) {234						t0 = 0;235					}236					if (t1 > 1) {237						t1 = 1;238					}239				}240241				var collidingWithTri = false;242				var t = 1;243244				if (!sphereInPlane) {245					aux.copy(velocity).multiplyScalar(t0);246					planeIntersectionPoint.copy(position).add(aux).sub(normal);247248					if (this.checkPointInTriangle(planeIntersectionPoint, v0, v1, v2)) {249						collidingWithTri = true;250						t = t0;251						collisionPoint.copy(planeIntersectionPoint);252					}253				}254255				if (!collidingWithTri) {256					var a, b, c;257					var velocityLengthSquared = velocity.lengthSq();258					a = velocityLengthSquared;259					var result = {};260261					aux.copy(position).sub(v0);262					b = 2 * velocity.dot(aux);263					aux.copy(v0).sub(position);264					c = aux.length();265					c = c * c - 1;266					if (this.getLowestRoot(a, b, c, t, result)) {267						t = result.root;268						collidingWithTri = true;269						collisionPoint.copy(v0);270					}271272					aux.copy(position).sub(v1);273					b = 2 * velocity.dot(aux);274					aux.copy(v1).sub(position);275					c = aux.length();276					c = c * c - 1;277					if (this.getLowestRoot(a, b, c, t, result)) {278						t = result.root;279						collidingWithTri = true;280						collisionPoint.copy(v1);281					}282283					aux.copy(position).sub(v2);284					b = 2 * velocity.dot(aux);285					aux.copy(v2).sub(position);286					c = aux.length();287					c = c * c - 1;288					if (this.getLowestRoot(a, b, c, t, result)) {289						t = result.root;290						collidingWithTri = true;291						collisionPoint.copy(v2);292					}293294					edge.copy(v1).sub(v0);295					spherePositionToVertex.copy(v0).sub(position);296					var edgeLengthSquared = edge.lengthSq();297					var edgeDotVelocity = edge.dot(velocity);298					var edgeDotSpherePositionToVertex = edge.dot(spherePositionToVertex);299					var spherePositionToVertexLengthSquared = spherePositionToVertex.lengthSq();300301					a = edgeLengthSquared * -velocityLengthSquared + (edgeDotVelocity * edgeDotVelocity);302					b = edgeLengthSquared * 2 * velocity.dot(spherePositionToVertex) - 2 * edgeDotVelocity * edgeDotSpherePositionToVertex;303					c = edgeLengthSquared * (1 - spherePositionToVertexLengthSquared) + 304						(edgeDotSpherePositionToVertex * edgeDotSpherePositionToVertex);305306					if (this.getLowestRoot(a, b, c, t, result)) {307						var f = (edgeDotVelocity * result.root - edgeDotSpherePositionToVertex) / edgeLengthSquared;308						if (f >= 0 && f <= 1) {309							t = result.root;310							collidingWithTri = true;311							edge.multiplyScalar(f);312							collisionPoint.copy(v0).add(edge);313						}314					}315316					edge.copy(v2).sub(v1);317					spherePositionToVertex.copy(v1).sub(position);318					edgeLengthSquared = edge.lengthSq();319					edgeDotVelocity = edge.dot(velocity);320					edgeDotSpherePositionToVertex = edge.dot(spherePositionToVertex);321					spherePositionToVertexLengthSquared = spherePositionToVertex.lengthSq();322323					a = edgeLengthSquared * -velocityLengthSquared + (edgeDotVelocity * edgeDotVelocity);324					b = edgeLengthSquared * 2 * velocity.dot(spherePositionToVertex) - 2 * edgeDotVelocity * edgeDotSpherePositionToVertex;325					c = edgeLengthSquared * (1 - spherePositionToVertexLengthSquared) + 326						(edgeDotSpherePositionToVertex * edgeDotSpherePositionToVertex);327328					if (this.getLowestRoot(a, b, c, t, result)) {329						var f = (edgeDotVelocity * result.root - edgeDotSpherePositionToVertex) / edgeLengthSquared;330						if (f >= 0 && f <= 1) {331							t = result.root;332							collidingWithTri = true;333							edge.multiplyScalar(f);334							collisionPoint.copy(v1).add(edge);335						}336					}337338					edge.copy(v0).sub(v2);339					spherePositionToVertex.copy(v2).sub(position);340					edgeLengthSquared = edge.lengthSq();341					edgeDotVelocity = edge.dot(velocity);342					edgeDotSpherePositionToVertex = edge.dot(spherePositionToVertex);343					spherePositionToVertexLengthSquared = spherePositionToVertex.lengthSq();344345					a = edgeLengthSquared * -velocityLengthSquared + (edgeDotVelocity * edgeDotVelocity);346					b = edgeLengthSquared * 2 * velocity.dot(spherePositionToVertex) - 2 * edgeDotVelocity * edgeDotSpherePositionToVertex;347					c = edgeLengthSquared * (1 - spherePositionToVertexLengthSquared) + 348						(edgeDotSpherePositionToVertex * edgeDotSpherePositionToVertex);349350					if (this.getLowestRoot(a, b, c, t, result)) {351						var f = (edgeDotVelocity * result.root - edgeDotSpherePositionToVertex) / edgeLengthSquared;352						if (f >= 0 && f <= 1) {353							t = result.root;354							collidingWithTri = true;355							edge.multiplyScalar(f);356							collisionPoint.copy(v2).add(edge);357						}358					}359				}360361				if (collidingWithTri) {362					var distToCollision = t * velocity.length();363					if (!p.foundCollision || distToCollision < p.nearestDistance) {364						p.nearestDistance = distToCollision;365						p.intersectionPoint.copy(collisionPoint);366						p.foundCollision = true;367						p.normal.copy(normal);368						p.gridObject = gridObject;369370						return true;371					}372				}373			}374375			return false;376		}377	}(),378379	checkPointInTriangle: function() {380		var cp1 = new THREE.Vector3();381		var cp2 = new THREE.Vector3();382		var aux = new THREE.Vector3();383		var aux2 = new THREE.Vector3();384385		return function(point, v1, v2, v3) {386			aux.copy(v3).sub(v2);387			aux2.copy(point).sub(v2);388			cp1.crossVectors(aux, aux2);389390			aux.copy(v3).sub(v2);391			aux2.copy(v1).sub(v2);392			cp2.crossVectors(aux, aux2);393394			if (cp1.dot(cp2) >= 0) {395				aux.copy(v3).sub(v1);396				aux2.copy(point).sub(v1);397				cp1.crossVectors(aux, aux2);398399				aux.copy(v3).sub(v1);400				aux2.copy(v2).sub(v1);401				cp2.crossVectors(aux, aux2);402403				if (cp1.dot(cp2) >= 0) {404					aux.copy(v2).sub(v1);405					aux2.copy(point).sub(v1);406					cp1.crossVectors(aux, aux2);407408					aux.copy(v2).sub(v1);409					aux2.copy(v3).sub(v1);410					cp2.crossVectors(aux, aux2);411412					if (cp1.dot(cp2) >= 0) {413						return true;414					}415				}416			}417		}418	}(),419420	getLowestRoot: function(a, b, c, maxR, result) {421		var determinant = b * b - 4 * a * c;422		if (determinant < 0) {423			return false;
...Manager.js
Source:Manager.js  
1define([2	"../_base/array",  "../_base/declare", "../_base/lang", "../_base/window",3	"../dom-class", "../Evented", "../has", "../keys", "../on", "../topic", "../touch",4	"./common", "./autoscroll", "./Avatar"5], function(array, declare, lang, win, domClass, Evented, has, keys, on, topic, touch,6	dnd, autoscroll, Avatar){7// module:8//		dojo/dnd/Manager9var Manager = declare("dojo.dnd.Manager", [Evented], {10	// summary:11	//		the manager of DnD operations (usually a singleton)12	constructor: function(){13		this.avatar  = null;14		this.source = null;15		this.nodes = [];16		this.copy  = true;17		this.target = null;18		this.canDropFlag = false;19		this.events = [];20	},21	// avatar's offset from the mouse22	OFFSET_X: has("touch") ? 0 : 16,23	OFFSET_Y: has("touch") ? -64 : 16,24	// methods25	overSource: function(source){26		// summary:27		//		called when a source detected a mouse-over condition28		// source: Object29		//		the reporter30		if(this.avatar){31			this.target = (source && source.targetState != "Disabled") ? source : null;32			this.canDropFlag = Boolean(this.target);33			this.avatar.update();34		}35		topic.publish("/dnd/source/over", source);36	},37	outSource: function(source){38		// summary:39		//		called when a source detected a mouse-out condition40		// source: Object41		//		the reporter42		if(this.avatar){43			if(this.target == source){44				this.target = null;45				this.canDropFlag = false;46				this.avatar.update();47				topic.publish("/dnd/source/over", null);48			}49		}else{50			topic.publish("/dnd/source/over", null);51		}52	},53	startDrag: function(source, nodes, copy){54		// summary:55		//		called to initiate the DnD operation56		// source: Object57		//		the source which provides items58		// nodes: Array59		//		the list of transferred items60		// copy: Boolean61		//		copy items, if true, move items otherwise62		// Tell autoscroll that a drag is starting63		autoscroll.autoScrollStart(win.doc);64		this.source = source;65		this.nodes  = nodes;66		this.copy   = Boolean(copy); // normalizing to true boolean67		this.avatar = this.makeAvatar();68		win.body().appendChild(this.avatar.node);69		topic.publish("/dnd/start", source, nodes, this.copy);70		function stopEvent(e){71			e.preventDefault();72			e.stopPropagation();73		}74		this.events = [75			on(win.doc, touch.move, lang.hitch(this, "onMouseMove")),76			on(win.doc, touch.release,   lang.hitch(this, "onMouseUp")),77			on(win.doc, "keydown",   lang.hitch(this, "onKeyDown")),78			on(win.doc, "keyup",     lang.hitch(this, "onKeyUp")),79			// cancel text selection and text dragging80			on(win.doc, "dragstart",   stopEvent),81			on(win.body(), "selectstart", stopEvent)82		];83		var c = "dojoDnd" + (copy ? "Copy" : "Move");84		domClass.add(win.body(), c);85	},86	canDrop: function(flag){87		// summary:88		//		called to notify if the current target can accept items89		var canDropFlag = Boolean(this.target && flag);90		if(this.canDropFlag != canDropFlag){91			this.canDropFlag = canDropFlag;92			this.avatar.update();93		}94	},95	stopDrag: function(){96		// summary:97		//		stop the DnD in progress98		domClass.remove(win.body(), ["dojoDndCopy", "dojoDndMove"]);99		array.forEach(this.events, function(handle){ handle.remove(); });100		this.events = [];101		this.avatar.destroy();102		this.avatar = null;103		this.source = this.target = null;104		this.nodes = [];105	},106	makeAvatar: function(){107		// summary:108		//		makes the avatar; it is separate to be overwritten dynamically, if needed109		return new Avatar(this);110	},111	updateAvatar: function(){112		// summary:113		//		updates the avatar; it is separate to be overwritten dynamically, if needed114		this.avatar.update();115	},116	// mouse event processors117	onMouseMove: function(e){118		// summary:119		//		event processor for onmousemove120		// e: Event121		//		mouse event122		var a = this.avatar;123		if(a){124			autoscroll.autoScrollNodes(e);125			//autoscroll.autoScroll(e);126			var s = a.node.style;127			s.left = (e.pageX + this.OFFSET_X) + "px";128			s.top  = (e.pageY + this.OFFSET_Y) + "px";129			var copy = Boolean(this.source.copyState(dnd.getCopyKeyState(e)));130			if(this.copy != copy){131				this._setCopyStatus(copy);132			}133		}134		if(has("touch")){135			// Prevent page from scrolling so that user can drag instead.136			e.preventDefault();137		}138	},139	onMouseUp: function(e){140		// summary:141		//		event processor for onmouseup142		// e: Event143		//		mouse event144		if(this.avatar){145			if(this.target && this.canDropFlag){146				var copy = Boolean(this.source.copyState(dnd.getCopyKeyState(e)));147				topic.publish("/dnd/drop/before", this.source, this.nodes, copy, this.target, e);148				topic.publish("/dnd/drop", this.source, this.nodes, copy, this.target, e);149			}else{150				topic.publish("/dnd/cancel");151			}152			this.stopDrag();153		}154	},155	// keyboard event processors156	onKeyDown: function(e){157		// summary:158		//		event processor for onkeydown:159		//		watching for CTRL for copy/move status, watching for ESCAPE to cancel the drag160		// e: Event161		//		keyboard event162		if(this.avatar){163			switch(e.keyCode){164				case keys.CTRL:165					var copy = Boolean(this.source.copyState(true));166					if(this.copy != copy){167						this._setCopyStatus(copy);168					}169					break;170				case keys.ESCAPE:171					topic.publish("/dnd/cancel");172					this.stopDrag();173					break;174			}175		}176	},177	onKeyUp: function(e){178		// summary:179		//		event processor for onkeyup, watching for CTRL for copy/move status180		// e: Event181		//		keyboard event182		if(this.avatar && e.keyCode == keys.CTRL){183			var copy = Boolean(this.source.copyState(false));184			if(this.copy != copy){185				this._setCopyStatus(copy);186			}187		}188	},189	// utilities190	_setCopyStatus: function(copy){191		// summary:192		//		changes the copy status193		// copy: Boolean194		//		the copy status195		this.copy = copy;196		this.source._markDndStatus(this.copy);197		this.updateAvatar();198		domClass.replace(win.body(),199			"dojoDnd" + (this.copy ? "Copy" : "Move"),200			"dojoDnd" + (this.copy ? "Move" : "Copy"));201	}202});203// dnd._manager:204//		The manager singleton variable. Can be overwritten if needed.205dnd._manager = null;206Manager.manager = dnd.manager = function(){207	// summary:208	//		Returns the current DnD manager.  Creates one if it is not created yet.209	if(!dnd._manager){210		dnd._manager = new Manager();211	}212	return dnd._manager;	// Object213};214// TODO: for 2.0, store _manager and manager in Manager only.   Don't access dnd or dojo.dnd.215return Manager;...copybutton.js
Source:copybutton.js  
1// Localization support2const messages = {3  'en': {4    'copy': 'Copy',5    'copy_to_clipboard': 'Copy to clipboard',6    'copy_success': 'Copied!',7    'copy_failure': 'Failed to copy',8  },9  'es' : {10    'copy': 'Copiar',11    'copy_to_clipboard': 'Copiar al portapapeles',12    'copy_success': '¡Copiado!',13    'copy_failure': 'Error al copiar',14  },15  'de' : {16    'copy': 'Kopieren',17    'copy_to_clipboard': 'In die Zwischenablage kopieren',18    'copy_success': 'Kopiert!',19    'copy_failure': 'Fehler beim Kopieren',20  }21}22let locale = 'en'23if( document.documentElement.lang !== undefined24    && messages[document.documentElement.lang] !== undefined ) {25  locale = document.documentElement.lang26}27/**28 * Set up copy/paste for code blocks29 */30const runWhenDOMLoaded = cb => {31  if (document.readyState != 'loading') {32    cb()33  } else if (document.addEventListener) {34    document.addEventListener('DOMContentLoaded', cb)35  } else {36    document.attachEvent('onreadystatechange', function() {37      if (document.readyState == 'complete') cb()38    })39  }40}41const codeCellId = index => `codecell${index}`42// Clears selected text since ClipboardJS will select the text when copying43const clearSelection = () => {44  if (window.getSelection) {45    window.getSelection().removeAllRanges()46  } else if (document.selection) {47    document.selection.empty()48  }49}50// Changes tooltip text for two seconds, then changes it back51const temporarilyChangeTooltip = (el, newText) => {52  const oldText = el.getAttribute('data-tooltip')53  el.setAttribute('data-tooltip', newText)54  setTimeout(() => el.setAttribute('data-tooltip', oldText), 2000)55}56const addCopyButtonToCodeCells = () => {57  // If ClipboardJS hasn't loaded, wait a bit and try again. This58  // happens because we load ClipboardJS asynchronously.59  if (window.ClipboardJS === undefined) {60    setTimeout(addCopyButtonToCodeCells, 250)61    return62  }63  // Add copybuttons to all of our code cells64  const codeCells = document.querySelectorAll('div.highlight pre')65  codeCells.forEach((codeCell, index) => {66    const id = codeCellId(index)67    codeCell.setAttribute('id', id)68    const pre_bg = getComputedStyle(codeCell).backgroundColor;69    const clipboardButton = id =>70    `<a class="copybtn o-tooltip--left" style="background-color: ${pre_bg}" data-tooltip="${messages[locale]['copy']}" data-clipboard-target="#${id}">71      <img src="${DOCUMENTATION_OPTIONS.URL_ROOT}_static/copy-button.svg" alt="${messages[locale]['copy_to_clipboard']}">72    </a>`73    codeCell.insertAdjacentHTML('afterend', clipboardButton(id))74  })75function escapeRegExp(string) {76    return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string77}78// Callback when a copy button is clicked. Will be passed the node that was clicked79// should then grab the text and replace pieces of text that shouldn't be used in output80function formatCopyText(textContent, copybuttonPromptText, isRegexp = false, onlyCopyPromptLines = true, removePrompts = true) {81    var regexp;82    var match;83    // create regexp to capture prompt and remaining line84    if (isRegexp) {85        regexp = new RegExp('^(' + copybuttonPromptText + ')(.*)')86    } else {87        regexp = new RegExp('^(' + escapeRegExp(copybuttonPromptText) + ')(.*)')88    }89    const outputLines = [];90    var promptFound = false;91    for (const line of textContent.split('\n')) {92        match = line.match(regexp)93        if (match) {94            promptFound = true95            if (removePrompts) {96                outputLines.push(match[2])97            } else {98                outputLines.push(line)99            }100        } else {101            if (!onlyCopyPromptLines) {102                outputLines.push(line)103            }104        }105    }106    // If no lines with the prompt were found then just use original lines107    if (promptFound) {108        textContent = outputLines.join('\n');109    }110    // Remove a trailing newline to avoid auto-running when pasting111    if (textContent.endsWith("\n")) {112        textContent = textContent.slice(0, -1)113    }114    return textContent115}116var copyTargetText = (trigger) => {117  var target = document.querySelector(trigger.attributes['data-clipboard-target'].value);118  return formatCopyText(target.innerText, '', false, true,  true)119}120  // Initialize with a callback so we can modify the text before copy121  const clipboard = new ClipboardJS('.copybtn', {text: copyTargetText})122  // Update UI with error/success messages123  clipboard.on('success', event => {124    clearSelection()125    temporarilyChangeTooltip(event.trigger, messages[locale]['copy_success'])126  })127  clipboard.on('error', event => {128    temporarilyChangeTooltip(event.trigger, messages[locale]['copy_failure'])129  })130}...bootstrap-table-copy-rows.js
Source:bootstrap-table-copy-rows.js  
1/**2 * @author Homer Glascock <HopGlascock@gmail.com>3 * @version: v1.0.04 */5 !function ($) {6    "use strict";7    var calculateObjectValue = $.fn.bootstrapTable.utils.calculateObjectValue,8        sprintf = $.fn.bootstrapTable.utils.sprintf;9    var copytext = function (text) {10        var textField = document.createElement('textarea');11        $(textField).html(text);12        document.body.appendChild(textField);13        textField.select();14        try {15            document.execCommand('copy');16        }17        catch (e) {18            console.log("Oops, unable to copy");19        }20        $(textField).remove();21    };22    $.extend($.fn.bootstrapTable.defaults, {23        copyBtn: false,24        copyWHiddenBtn: false,25        copyDelemeter: ", "26    });27    $.fn.bootstrapTable.methods.push('copyColumnsToClipboard', 'copyColumnsToClipboardWithHidden');28    var BootstrapTable = $.fn.bootstrapTable.Constructor,29        _initToolbar = BootstrapTable.prototype.initToolbar;30    BootstrapTable.prototype.initToolbar = function () {31        _initToolbar.apply(this, Array.prototype.slice.apply(arguments));32        var that = this,33            $btnGroup = this.$toolbar.find('>.btn-group');34        if (this.options.clickToSelect || this.options.singleSelect) {35            if (this.options.copyBtn) {36                var copybtn = "<button class='btn btn-default' id='copyBtn'><span class='glyphicon glyphicon-copy icon-pencil'></span></button>";37                $btnGroup.append(copybtn);38                $btnGroup.find('#copyBtn').click(function () { that.copyColumnsToClipboard(); });39            }40            if (this.options.copyWHiddenBtn) {41                var copyhiddenbtn = "<button class='btn btn-default' id='copyWHiddenBtn'><span class='badge'><span class='glyphicon glyphicon-copy icon-pencil'></span></span></button>";42                $btnGroup.append(copyhiddenbtn);43                $btnGroup.find('#copyWHiddenBtn').click(function () { that.copyColumnsToClipboardWithHidden(); });44            }45        }46    };47    BootstrapTable.prototype.copyColumnsToClipboard = function () {48        var that = this,49            ret = "",50            delimet = this.options.copyDelemeter;51        $.each(that.getSelections(), function (index, row) {52            $.each(that.options.columns[0], function (indy, column) {53                if (column.field !== "state" && column.field !== "RowNumber" && column.visible) {54                    if (row[column.field] !== null) {55                        ret += calculateObjectValue(column, that.header.formatters[indy], [row[column.field], row, index], row[column.field]);56                    }57                    ret += delimet;58                }59            });60            ret += "\r\n";61        });62        copytext(ret);63    };64    BootstrapTable.prototype.copyColumnsToClipboardWithHidden = function () {65        var that = this,66            ret = "",67            delimet = this.options.copyDelemeter;68        $.each(that.getSelections(), function (index, row) {69            $.each(that.options.columns[0], function (indy, column) {70                if (column.field != "state" && column.field !== "RowNumber") {71                    if (row[column.field] !== null) {72                        ret += calculateObjectValue(column, that.header.formatters[indy], [row[column.field], row, index], row[column.field]);73                    }74                    ret += delimet;75                }76            });77            ret += "\r\n";78        });79        copytext(ret);80    };...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!!
