Best Python code snippet using elementium_python
CW3.py
Source:CW3.py  
1from BrickPi import *2import particleDataStructures3import basic4from numpy import cos, sin, pi, arctan, sqrt, exp, arccos, arctan25import random6import place_rec_bits7global signatures8distSonarToCenter = 139robotX = float(84.0)10robotY = float(30.0)11robotA = float(0.0)12nbOfParticles = 3013mult = 314particleSet = []15sonarVar = 316def lineToCoord(x0, y0, x1, y1):17   middleX = 100.018   middleY = 700.019   print "drawLine:"+str( (middleX + mult * x0, middleY - mult * y0, middleX + mult * x1, middleY - mult * y1) )20def particlesToCoord(particleSet):21  middleX = 100.022  middleY = 700.023  particles = [(mult * particleSet[i][0] + middleX, - mult * particleSet[i][1]+middleY, particleSet[i][2]) for i in range(nbOfParticles)]24  print "drawParticles:" + str(particles)25   26def meanParticles():27  global particleSet28  meanX = 029  meanY = 030  meanSinT = 031  meanCosT = 032  i = 033  while i < nbOfParticles:34    meanX += particleSet[i][0]*particleSet[i][3]35    meanY += particleSet[i][1]*particleSet[i][3]36    meanSinT += sin(particleSet[i][2]*pi/180)*particleSet[i][3]37    meanCosT += cos(particleSet[i][2]*pi/180)*particleSet[i][3]38    i += 139  meanT = arctan2(meanSinT, meanCosT)*180/pi40  #meanX /= nbOfParticles41  #meanY /= nbOfParticles42  #meanT /= nbOfParticles43  return (meanX, meanY, meanT)44def particleInit():45   global particleSet46   i = 047   particleSet = []48   while i < nbOfParticles:49      particleSet.append([robotX, robotY, robotA, 1.0/nbOfParticles])50      i += 151   return particleSet52def updateSL(D, sigma1, sigma2):53  global particleSet, robotX, robotY,robotA54  i = 055  #robotXn = robotX + float(D) *cos(robotA / 180 * pi)56  #robotYn = robotY + float(D) *sin(robotA / 180 * pi)57  while i < nbOfParticles:58    e = random.gauss(0, sigma1)59    f = random.gauss(0, sigma2)60    particleSet[i][0] += (D+e)*cos(particleSet[i][2] / 180 * pi) 61    particleSet[i][1] += (D+e)*sin(particleSet[i][2] / 180 * pi)62    particleSet[i][2] += f63    particleSet[i][2] = particleSet[i][2] % 36064    i += 165  updateParticlesSonar()66  mean = meanParticles()67  canvas.drawLine( (robotX, robotY, mean[0], mean[1]) )68  robotX = mean[0]69  robotY = mean[1]70  robotA = mean[2]71  #particlesToCoord(particleSet)72def updateR(a, sigma):73  global particleSet,robotA74  robotA = (robotA + a)%36075  i = 076  while i < nbOfParticles:77    g = random.gauss(0, sigma)78    particleSet[i][2] += a + g79    particleSet[i][2] = particleSet[i][2]%36080    i +=181def driveLine(distance):82  basic.move(-distance)83  updateSL(distance, 1, 0.5)84  85def rotation(degree):86  basic.turn(degree)87  updateR(degree, abs(degree/90*2.6))88def square():89  driveLine(40)90  rotation(90)91  driveLine(40)92  rotation(90)93  driveLine(40)94  rotation(90)95  driveLine(40)96  rotation(90)97def sonarMeasure():98  while True:99    result = BrickPiUpdateValues()100    if not result:101      print basic.measureSonar()  102      time.sleep(0.1)103  104def navigateToWaypoint(X, Y):105  (x, y , t) = meanParticles()106  print "Estimate direction is = ", t107  print "aim to: ", (X,Y), " from ", str((x,y,t))108  diffX = (X - x) 109  diffY = (Y - y)110  dist = sqrt(diffX*diffX + diffY*diffY)111  aimAngle = arctan(diffY / diffX) if (diffX != 0) else pi/2 if (diffY >= 0) else -pi/2112  if diffX < 0:113    aimAngle += pi114  #ux = cos(t*pi/180)115  #uy = sin(t*pi/180)116  #angle = -arctan((diffX*ux + diffY*uy)/(diffX*uy - diffY*ux))117  118  print aimAngle*180/pi - t119  rotAngle = aimAngle*180/pi - t120  if (rotAngle > 180):121    while rotAngle > 180:122      rotAngle -= 360123  elif (rotAngle < -180):124    while rotAngle < -180:125      rotAngle += 360 126  print dist127  rotation(rotAngle)128  driveLine(dist)129  correction = True130  if correction:131    (x, y , t) = meanParticles()    132    (m, wall, beta) = getFacingWall(X, Y, t)133    z = basic.measureSonar()134    z += distSonarToCenter135    if (abs(m - z) > 5 and z < 250 and beta < 30):136      driveLine(z-m)137  138def calculate_likelihood(x, y, theta, z):139   measure = getFacingWall(x,y,theta)140   #print measure141   if len(measure) == 1:142     return 0143   elif ( z >= 255 or abs(measure[2]) > 60 ):144     return 0.3145   else:146     diffMZ = measure[0] - z147     pZM = exp(-diffMZ*diffMZ/(2*sonarVar*sonarVar)) + 0.05148     return pZM149def intersection(x, y, theta, wall):150  if (theta != 90 and theta != 270):151    a = sin(theta * pi / 180)/cos(theta * pi / 180)152    b = y - a * x153  else:154    a = 0155    b = y156  if (wall[0] == wall[2]):157    intersectionY = a*wall[0] + b158    if ( (wall[1] <= intersectionY <= wall[3]) or (wall[3] <= intersectionY <= wall[1]) ):159      return True160    else:161      return False162  else:163    if a == 0:164      if ( (wall[0]  <= x <= wall[2]) or (wall[2] <= x <= wall[0]) ):165        return True166      else:167        return False168    else:169      intersectionX = (wall[1] - b)/a170      if ( (wall[0]  <= intersectionX <= wall[2]) or (wall[2] <= intersectionX <= wall[0]) ):171        return True172      else:173        return False174def getFacingWall(x,y,theta):175  global mymap176  walls = mymap.walls177  measures = []178  if insideTheMap(x,y):179    for wall in walls:180      m = (wall[3] - wall[1])*(wall[0] - x) - (wall[2] - wall[0])*(wall[1] - y)181      d = (wall[3] - wall[1])*cos(theta * pi / 180) - (wall[2] - wall[0])*sin(theta * pi / 180) 182      m = ((m / d) if d != 0 else 0)183      beta = 180*arccos( (cos(theta*pi/180) * (wall[1] - wall[3]) + sin(theta*pi/180) * (wall[2] - wall[0])) / sqrt( (wall[1] - wall[3]) * (wall[1] - wall[3]) + (wall[2] - wall[0]) * (wall[2] - wall[0])) )/pi184      if(m > 0):185        measures.append((m,wall, beta))186    sorted_measures = sorted(measures, key = lambda tup: tup[0])187    for meas in sorted_measures:188      if intersection(x, y, theta, meas[1]):189        return meas190  else:191   return [0]192  return None # should never happen!!193def insideTheMap(x,y):194  if (x < 0):195    return False196  elif (y < 0):197    return False198  elif (0 <= x <= 84 and y > 168):199    return False200  elif (84 <= x <= 168 and y > 210):201    return False202  elif (168 <= x <= 210 and y > 84):203    return False204  elif x > 210:205    return False206  else:207    return True208def updateParticlesSonar():209  global particleSet, nbOfParticles210  z = basic.measureSonar()211  z += distSonarToCenter212  weightSum = 0213  for particle in particleSet:214    particle[3] *= calculate_likelihood(particle[0], particle[1], particle[2], z)215    weightSum += particle[3]216  for particle in particleSet:217    particle[3] /= weightSum218  cumulativeProbability = [0] * nbOfParticles219  cumulativeProbability[0] = particleSet[0][3]220  i = 1221  while i < nbOfParticles:222    cumulativeProbability[i] = cumulativeProbability[i-1] + particleSet[i][3]223    i += 1224  i = 0225  newParticleSet = []226  while i < nbOfParticles:227    r = random.random()228    j = 0229    while r > cumulativeProbability[j]:230      j += 1231    newParticleSet.append( [particleSet[j][0], particleSet[j][1], particleSet[j][2], 1.0/nbOfParticles] )232    i += 1233  particleSet = newParticleSet234def routine():235  particleTuple = [tuple(l)[0:3] for l in particleSet]236  particles.data = particleTuple237  particles.draw()238  navigateToWaypoint(180, 30)239  updateParticlesSonar()240  particleTuple = [tuple(l)[0:3] for l in particleSet]241  particles.data = particleTuple242  particles.draw()243  navigateToWaypoint(180, 54)244  updateParticlesSonar()245  particleTuple = [tuple(l)[0:3] for l in particleSet]246  particles.data = particleTuple247  particles.draw()248  navigateToWaypoint(126, 54)249  updateParticlesSonar()250  particleTuple = [tuple(l)[0:3] for l in particleSet]251  particles.data = particleTuple252  particles.draw()253  navigateToWaypoint(126, 168)254  updateParticlesSonar()255  particleTuple = [tuple(l)[0:3] for l in particleSet]256  particles.data = particleTuple257  particles.draw()258  navigateToWaypoint(126, 126)259  updateParticlesSonar()260  particleTuple = [tuple(l)[0:3] for l in particleSet]261  particles.data = particleTuple262  particles.draw()263  navigateToWaypoint(30, 54)264  updateParticlesSonar()265  particleTuple = [tuple(l)[0:3] for l in particleSet]266  particles.data = particleTuple267  particles.draw()268  navigateToWaypoint(84, 54)269  updateParticlesSonar()270  particleTuple = [tuple(l)[0:3] for l in particleSet]271  particles.data = particleTuple272  particles.draw()273  navigateToWaypoint(84, 30)274  updateParticlesSonar()275  particleTuple = [tuple(l)[0:3] for l in particleSet]276  particles.data = particleTuple277  particles.draw()278def challenge():279  global robotX, robotY, robotA, signatures280  s = raw_input('Press ENTER to launch the robot !')281  index, angle = place_rec_bits.recognize_location_challenge()282  print "We are in location " + str(index) + " with an orientation of " + str(angle) + " degrees."283  x1 = 84284  y1 = 30285 286  x2 = 180287  y2 = 30288  x4 = 126289  y4 = 54290  x5 = 126291  y5 = 168292  x6 = 126293  y6 = 126294  x7 = 30295  y7 = 54296  # We consider the best path to be :297  # 1 <-> 2 <-> 4 <-> 5 <-> 6 <-> 7 <-> 1298  # initialize the robot location299  if index == 1:300    robotX = float(84.0)301    robotY = float(30.0)302    robotA = float(angle)303  elif index == 2:304    robotX = float(180.0)305    robotY = float(30.0)306    robotA = float(angle)307  elif index == 3:308    robotX = float(126.0)309    robotY = float(54.0)310    robotA = float(angle)311  elif index == 4:312    robotX = float(126.0)313    robotY = float(168.0)314    robotA = float(angle)315  else:316    robotX = float(30.0)317    robotY = float(54.0)318    robotA = float(angle)319  particleInit()320  basic.move(-13)321  # let's roll!322  if index == 1:323    if (angle > 78 and angle < 234):324      navigateToWaypoint(x7, y7)325      basic.blink()326      updateParticlesSonar()327      navigateToWaypoint(x6, y6)328      updateParticlesSonar()329      navigateToWaypoint(x5, y5)330      basic.blink()331      updateParticlesSonar()332      navigateToWaypoint(x4, y4)333      basic.blink()334      updateParticlesSonar()335      navigateToWaypoint(x2, y2)336      basic.blink()337      updateParticlesSonar()338      navigateToWaypoint(x1, y1)339      basic.blink()340    else:341      navigateToWaypoint(x2, y2)342      basic.blink()343      updateParticlesSonar()344      navigateToWaypoint(x4, y4)345      basic.blink()346      updateParticlesSonar()347      navigateToWaypoint(x5, y5)348      basic.blink()349      updateParticlesSonar()350      navigateToWaypoint(x6, y6)351      updateParticlesSonar()352      navigateToWaypoint(x7, y7)353      basic.blink()354      updateParticlesSonar()355      navigateToWaypoint(x1, y1)356      basic.blink()357  elif index == 2:358    if (angle > 168 and angle < 348):359      navigateToWaypoint(x1, y1)360      basic.blink()361      updateParticlesSonar()362      navigateToWaypoint(x7, y7)363      basic.blink()364      updateParticlesSonar()365      navigateToWaypoint(x6, y6)366      updateParticlesSonar()367      navigateToWaypoint(x5, y5)368      basic.blink()369      updateParticlesSonar()370      navigateToWaypoint(x4, y4)371      basic.blink()372      updateParticlesSonar()373      navigateToWaypoint(x2, y2)374      basic.blink()375    else:376      navigateToWaypoint(x4, y4)377      basic.blink()378      updateParticlesSonar()379      navigateToWaypoint(x5, y5)380      basic.blink()381      updateParticlesSonar()382      navigateToWaypoint(x6, y6)383      updateParticlesSonar()384      navigateToWaypoint(x7, y7)385      basic.blink()386      updateParticlesSonar()387      navigateToWaypoint(x1, y1)388      basic.blink()389      updateParticlesSonar()390      navigateToWaypoint(x2, y2)391      basic.blink()392  elif index == 3:393    if (angle > 33 and angle < 213):394      navigateToWaypoint(x5, y5)395      basic.blink()396      updateParticlesSonar()397      navigateToWaypoint(x6, y6)398      updateParticlesSonar()399      navigateToWaypoint(x7, y7)400      basic.blink()401      updateParticlesSonar()402      navigateToWaypoint(x1, y1)403      basic.blink()404      updateParticlesSonar()405      navigateToWaypoint(x2, y2)406      basic.blink()407      updateParticlesSonar()408      navigateToWaypoint(x4, y4)409      basic.blink()410    else:411      navigateToWaypoint(x2, y2)412      basic.blink()413      updateParticlesSonar()414      navigateToWaypoint(x1, y1)415      basic.blink()416      updateParticlesSonar()417      navigateToWaypoint(x7, y7)418      basic.blink()419      updateParticlesSonar()420      navigateToWaypoint(x6, y6)421      updateParticlesSonar()422      navigateToWaypoint(x5, y5)423      basic.blink()424      updateParticlesSonar()425      navigateToWaypoint(x4, y4)426      basic.blink()427  elif index == 4:428    navigateToWaypoint(x6, y6)429    updateParticlesSonar()430 431    navigateToWaypoint(x7, y7)432    basic.blink()433    updateParticlesSonar()434    navigateToWaypoint(x1, y1)435    basic.blink()436    updateParticlesSonar()437    navigateToWaypoint(x2, y2)438    basic.blink()439    updateParticlesSonar()440    navigateToWaypoint(x4, y4)441    basic.blink()442    updateParticlesSonar()443    navigateToWaypoint(x5, y5)444    basic.blink()445  else:446    if (angle > 6 and angle < 186):447      navigateToWaypoint(x6, y6)448      updateParticlesSonar()449      navigateToWaypoint(x5, y5)450      basic.blink()451      updateParticlesSonar()452      navigateToWaypoint(x4, y4)453      basic.blink()454      updateParticlesSonar()455      navigateToWaypoint(x2, y2)456      basic.blink()457      updateParticlesSonar()458      navigateToWaypoint(x1, y1)459      basic.blink()460      updateParticlesSonar()461      navigateToWaypoint(x7, y7)462      basic.blink()463    else:464      navigateToWaypoint(x1, y1)465      basic.blink()466      updateParticlesSonar()467      navigateToWaypoint(x2, y2)468      basic.blink()469      updateParticlesSonar()470      navigateToWaypoint(x4, y4)471      basic.blink()472      updateParticlesSonar()473      navigateToWaypoint(x5, y5)474      basic.blink()475      updateParticlesSonar()476      navigateToWaypoint(x6, y6)477      updateParticlesSonar()478      navigateToWaypoint(x7, y7)479      basic.blink()480## MAIN ##481basic.setupSensors()482particles = particleDataStructures.Particles()483particleSet = particleInit()484particleTuple = [tuple(l)[0:3] for l in particleSet]485particles.data = particleTuple486#particles.draw()487canvas = particleDataStructures.Canvas();      # global canvas we are going to draw on488mymap = particleDataStructures.Map();489# Definitions of walls490# a: O to A491# b: A to B492# c: C to D493# d: D to E494# e: E to F495# f: F to G496# g: G to H497# h: H to O498mymap.add_wall((0,0,0,168));        # a499mymap.add_wall((0,168,84,168));     # b500mymap.add_wall((84,126,84,210));    # c501mymap.add_wall((84,210,168,210));   # d502mymap.add_wall((168,210,168,84));   # e503mymap.add_wall((168,84,210,84));    # f504mymap.add_wall((210,84,210,0));     # g505mymap.add_wall((210,0,0,0));        # h506#mymap.draw();507#basic.move(100)508#time.sleep(1)509#basic.genericMove(100, -100, 100)510#basic.turn(90)511#driveLine(particleSet)512#leftRotation(particleSet)513#square()514#basic.turn(360)515#navigateToWaypoint(50,50)516#navigateToWaypoint(50, -20)517#navigateToWaypoint(60, 0)518#navigateToWaypoint(0,0)519#sonarMeasure()520#routine()...controls.js
Source:controls.js  
1import { queryAll } from '../utils/util.js'2import { isAndroid } from '../utils/device.js'3/**4 * Manages our presentation controls. This includes both5 * the built-in control arrows as well as event monitoring6 * of any elements within the presentation with either of the7 * following helper classes:8 * - .navigate-up9 * - .navigate-right10 * - .navigate-down11 * - .navigate-left12 * - .navigate-next13 * - .navigate-prev14 */15export default class Controls {16	constructor( Reveal ) {17		this.Reveal = Reveal;18		this.onNavigateLeftClicked = this.onNavigateLeftClicked.bind( this );19		this.onNavigateRightClicked = this.onNavigateRightClicked.bind( this );20		this.onNavigateUpClicked = this.onNavigateUpClicked.bind( this );21		this.onNavigateDownClicked = this.onNavigateDownClicked.bind( this );22		this.onNavigatePrevClicked = this.onNavigatePrevClicked.bind( this );23		this.onNavigateNextClicked = this.onNavigateNextClicked.bind( this );24	}25	render() {26		const rtl = this.Reveal.getConfig().rtl;27		const revealElement = this.Reveal.getRevealElement();28		this.element = document.createElement( 'aside' );29		this.element.className = 'controls';30		this.element.innerHTML =31			`<button class="navigate-left" aria-label="${ rtl ? 'next slide' : 'previous slide' }"><div class="controls-arrow"></div></button>32			<button class="navigate-right" aria-label="${ rtl ? 'previous slide' : 'next slide' }"><div class="controls-arrow"></div></button>33			<button class="navigate-up" aria-label="above slide"><div class="controls-arrow"></div></button>34			<button class="navigate-down" aria-label="below slide"><div class="controls-arrow"></div></button>`;35		this.Reveal.getRevealElement().appendChild( this.element );36		// There can be multiple instances of controls throughout the page37		this.controlsLeft = queryAll( revealElement, '.navigate-left' );38		this.controlsRight = queryAll( revealElement, '.navigate-right' );39		this.controlsUp = queryAll( revealElement, '.navigate-up' );40		this.controlsDown = queryAll( revealElement, '.navigate-down' );41		this.controlsPrev = queryAll( revealElement, '.navigate-prev' );42		this.controlsNext = queryAll( revealElement, '.navigate-next' );43		// The left, right and down arrows in the standard reveal.js controls44		this.controlsRightArrow = this.element.querySelector( '.navigate-right' );45		this.controlsLeftArrow = this.element.querySelector( '.navigate-left' );46		this.controlsDownArrow = this.element.querySelector( '.navigate-down' );47	}48	/**49	 * Called when the reveal.js config is updated.50	 */51	configure( config, oldConfig ) {52		this.element.style.display = config.controls ? 'block' : 'none';53		this.element.setAttribute( 'data-controls-layout', config.controlsLayout );54		this.element.setAttribute( 'data-controls-back-arrows', config.controlsBackArrows );55	}56	bind() {57		// Listen to both touch and click events, in case the device58		// supports both59		let pointerEvents = [ 'touchstart', 'click' ];60		// Only support touch for Android, fixes double navigations in61		// stock browser62		if( isAndroid ) {63			pointerEvents = [ 'touchstart' ];64		}65		pointerEvents.forEach( eventName => {66			this.controlsLeft.forEach( el => el.addEventListener( eventName, this.onNavigateLeftClicked, false ) );67			this.controlsRight.forEach( el => el.addEventListener( eventName, this.onNavigateRightClicked, false ) );68			this.controlsUp.forEach( el => el.addEventListener( eventName, this.onNavigateUpClicked, false ) );69			this.controlsDown.forEach( el => el.addEventListener( eventName, this.onNavigateDownClicked, false ) );70			this.controlsPrev.forEach( el => el.addEventListener( eventName, this.onNavigatePrevClicked, false ) );71			this.controlsNext.forEach( el => el.addEventListener( eventName, this.onNavigateNextClicked, false ) );72		} );73	}74	unbind() {75		[ 'touchstart', 'click' ].forEach( eventName => {76			this.controlsLeft.forEach( el => el.removeEventListener( eventName, this.onNavigateLeftClicked, false ) );77			this.controlsRight.forEach( el => el.removeEventListener( eventName, this.onNavigateRightClicked, false ) );78			this.controlsUp.forEach( el => el.removeEventListener( eventName, this.onNavigateUpClicked, false ) );79			this.controlsDown.forEach( el => el.removeEventListener( eventName, this.onNavigateDownClicked, false ) );80			this.controlsPrev.forEach( el => el.removeEventListener( eventName, this.onNavigatePrevClicked, false ) );81			this.controlsNext.forEach( el => el.removeEventListener( eventName, this.onNavigateNextClicked, false ) );82		} );83	}84	/**85	 * Updates the state of all control/navigation arrows.86	 */87	update() {88		let routes = this.Reveal.availableRoutes();89		// Remove the 'enabled' class from all directions90		[...this.controlsLeft, ...this.controlsRight, ...this.controlsUp, ...this.controlsDown, ...this.controlsPrev, ...this.controlsNext].forEach( node => {91			node.classList.remove( 'enabled', 'fragmented' );92			// Set 'disabled' attribute on all directions93			node.setAttribute( 'disabled', 'disabled' );94		} );95		// Add the 'enabled' class to the available routes; remove 'disabled' attribute to enable buttons96		if( routes.left ) this.controlsLeft.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );97		if( routes.right ) this.controlsRight.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );98		if( routes.up ) this.controlsUp.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );99		if( routes.down ) this.controlsDown.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );100		// Prev/next buttons101		if( routes.left || routes.up ) this.controlsPrev.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );102		if( routes.right || routes.down ) this.controlsNext.forEach( el => { el.classList.add( 'enabled' ); el.removeAttribute( 'disabled' ); } );103		// Highlight fragment directions104		let currentSlide = this.Reveal.getCurrentSlide();105		if( currentSlide ) {106			let fragmentsRoutes = this.Reveal.fragments.availableRoutes();107			// Always apply fragment decorator to prev/next buttons108			if( fragmentsRoutes.prev ) this.controlsPrev.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );109			if( fragmentsRoutes.next ) this.controlsNext.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );110			// Apply fragment decorators to directional buttons based on111			// what slide axis they are in112			if( this.Reveal.isVerticalSlide( currentSlide ) ) {113				if( fragmentsRoutes.prev ) this.controlsUp.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );114				if( fragmentsRoutes.next ) this.controlsDown.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );115			}116			else {117				if( fragmentsRoutes.prev ) this.controlsLeft.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );118				if( fragmentsRoutes.next ) this.controlsRight.forEach( el => { el.classList.add( 'fragmented', 'enabled' ); el.removeAttribute( 'disabled' ); } );119			}120		}121		if( this.Reveal.getConfig().controlsTutorial ) {122			let indices = this.Reveal.getIndices();123			// Highlight control arrows with an animation to ensure124			// that the viewer knows how to navigate125			if( !this.Reveal.hasNavigatedVertically() && routes.down ) {126				this.controlsDownArrow.classList.add( 'highlight' );127			}128			else {129				this.controlsDownArrow.classList.remove( 'highlight' );130				if( this.Reveal.getConfig().rtl ) {131					if( !this.Reveal.hasNavigatedHorizontally() && routes.left && indices.v === 0 ) {132						this.controlsLeftArrow.classList.add( 'highlight' );133					}134					else {135						this.controlsLeftArrow.classList.remove( 'highlight' );136					}137				} else {138					if( !this.Reveal.hasNavigatedHorizontally() && routes.right && indices.v === 0 ) {139						this.controlsRightArrow.classList.add( 'highlight' );140					}141					else {142						this.controlsRightArrow.classList.remove( 'highlight' );143					}144				}145			}146		}147	}148	/**149	 * Event handlers for navigation control buttons.150	 */151	onNavigateLeftClicked( event ) {152		event.preventDefault();153		this.Reveal.onUserInput();154		if( this.Reveal.getConfig().navigationMode === 'linear' ) {155			this.Reveal.prev();156		}157		else {158			this.Reveal.left();159		}160	}161	onNavigateRightClicked( event ) {162		event.preventDefault();163		this.Reveal.onUserInput();164		if( this.Reveal.getConfig().navigationMode === 'linear' ) {165			this.Reveal.next();166		}167		else {168			this.Reveal.right();169		}170	}171	onNavigateUpClicked( event ) {172		event.preventDefault();173		this.Reveal.onUserInput();174		this.Reveal.up();175	}176	onNavigateDownClicked( event ) {177		event.preventDefault();178		this.Reveal.onUserInput();179		this.Reveal.down();180	}181	onNavigatePrevClicked( event ) {182		event.preventDefault();183		this.Reveal.onUserInput();184		this.Reveal.prev();185	}186	onNavigateNextClicked( event ) {187		event.preventDefault();188		this.Reveal.onUserInput();189		this.Reveal.next();190	}...index.js
Source:index.js  
...118                label="INITIAL APPLICATION"119                progress={stage0Progress}120                navigate={121                  BASE_URL === DEV_URL122                    ? () => navigation.navigate(APPLY_NOW_NAV)123                    : !this.shouldNavigateToStage(0)124                    ? () => navigation.navigate(APPLY_NOW_NAV)125                    : null126                }127              />128              <StageProgressSection129                label="STAGE 1"130                progress={stage1Progress}131                navigate={132                  this.shouldNavigateToStage(0)133                    ? application_type === (NEW_APPLICANT || DIRECT_PLACEMENT)134                      ? INTERVIEW_STATUS_TITLE[status] !==135                          INTERVIEW_STATUS_TITLE[1] && stage1Progress === 100136                        ? () => navigation.navigate(STAGE_ONE_FORM)137                        : () => navigation.navigate(STAGE_ONE_NAV)138                      : stage1Progress === 100139                      ? () => navigation.navigate(STAGE_ONE_FORM)140                      : () => navigation.navigate(STAGE_ONE_NAV)141                    : null142                }143              />144              <StageProgressSection145                label="STAGE 2"146                progress={stage2Progress}147                navigate={148                  (application_type === RETURN_TO_CAMP149                  ? stage1Progress === 100150                  : status === INTERVIEW_STATUS.confirmed)151                    ? stage2Progress !== 100152                      ? () => navigation.navigate(STAGE_TWO_NAV)153                      : () => navigation.navigate(STAGE_TWO_FORM)154                    : stage1Progress === 100155                    ? () =>156                        //Toast.show(157                          application_type === RETURN_TO_CAMP158                            ? "You Have To Complete Stage One First"159                            : `Can not pass because your interview status is ${INTERVIEW_STATUS_TITLE[status]}`160                        )161                    : null162                }163              />164              <StageProgressSection165                label="STAGE 3"166                progress={stage3Progress}167                navigate={168                  this.shouldNavigateToStage(2)169                    ? stage3Progress !== 100170                      ? () => navigation.navigate(STAGE_THREE_NAV)171                      : () => navigation.navigate(STAGE_THREE_FORM)172                    : null173                }174              />175              <StageProgressSection176                label="STAGE 4"177                progress={stage4Progress}178                navigate={179                  this.shouldNavigateToStage(3)180                    ? stage4Progress !== 100181                      ? () => navigation.navigate(STAGE_FOUR_NAV)182                      : () => navigation.navigate(STAGE_FOUR_FORM)183                    : null184                }185              />186            </ApplicationStatusSceen>187          </View>188          {/* content end */}189          {/* Bottom buttons or logo */}190          <View key="bottomLeft">191            <BottomButtonLeft onPress={() => navigation.navigate(DASHBOARD)}>192              HOME193            </BottomButtonLeft>194          </View>195          <View key="bottomRight">196            <BottomButtonRight197              onPress={198                selectedStage ? () => navigation.navigate(selectedStage) : null199              }200            >201              NEXT202            </BottomButtonRight>203          </View>204          {/* bottom end */}205        </Card>206      </View>207    );208  }209}210const mapStateToProps = ({211  stageProgress,212  interview: { status },...EventBrowserTabController.py
Source:EventBrowserTabController.py  
...41    42    def refresh(self):43        eventNum=self._dataAccessor.eventNumber()44        self._fileModifcationTimestamp = os.path.getmtime(self._filename)45        self.navigate(0)46        self.navigate(eventNum)47            48    def readFile(self, filename):49        """ Reads in the file in a separate thread.50        """51        self.cancel()52        self._thread = ThreadChain(self.dataAccessor().open, filename)53        while self._thread.isRunning():54            if not Application.NO_PROCESS_EVENTS:55                QCoreApplication.instance().processEvents()56        if self._thread.returnValue():57            self.updateEventNumberDisplay()58            return True59        return False60    def isBusy(self):61        return BrowserTabController.isBusy(self) or\62               (self._thread and self._thread.isRunning())63    def navigate(self,to):64        # remember if navigation is ongoing65        navigating=self._navigateTo66        # set where to navigate67        self._navigateTo=to68        # if navigation is ongoing return69        if navigating!=None:70            return71        # if window is busy navigate later72        if self.isBusy():73            self.emit(SIGNAL("navigate"),to)74            return75        update=False76        while self._navigateTo!=None:77            current=self._navigateTo78            if self._navigateTo==0: 79                statusMessage = self.plugin().application().startWorking("Reopening file")80                self.dataAccessor().close()81                self.readFile(self._filename)82            else:83                statusMessage = self.plugin().application().startWorking("Navigate in file")84                if self._dataAccessor.goto(self._navigateTo):85                    update=True86            if current==self._navigateTo:87                self._navigateTo=None88                if update:89                    self.updateContent()90            self.updateEventNumberDisplay()91            self.plugin().application().stopWorking(statusMessage)92    def first(self):93        """ Navigate and to first event.94        """95        logging.debug(__name__ + ": first")96        self.cancel()97        currentEvent=self.dataAccessor().eventNumber()98        if currentEvent>1:99            self.navigate(1)100    def previous(self):101        """ Navigate and to previous event.102        """103        logging.debug(__name__ + ": previous")104        self.cancel()105        currentEvent=self.dataAccessor().eventNumber()106        if currentEvent>1:107            self.navigate(currentEvent-1)108    def next(self):109        """ Navigate and to next event.110        """111        logging.debug(__name__ + ": next")112        self.cancel()113        currentEvent=self.dataAccessor().eventNumber()114        allEvents=self.dataAccessor().numberOfEvents()115        if allEvents==None:116            allEvents=sys.maxint117        if currentEvent<allEvents:118            self.navigate(currentEvent+1)119    def last(self):120        """ Navigate and to last event.121        """122        logging.debug(__name__ + ": last")123        self.cancel()124        currentEvent=self.dataAccessor().eventNumber()125        allEvents=self.dataAccessor().numberOfEvents()126        if allEvents==None:127            allEvents=sys.maxint128        if currentEvent<allEvents:129            self.navigate(allEvents)130    def goto(self, number=None):131        """ Ask event number in dialog and navigate and to event.132        """133        logging.debug(__name__ + ": goto")134        if self._dataAccessor.numberOfEvents():135            max = self._dataAccessor.numberOfEvents()136        else:137            max = sys.maxint138        if number!=None:139            ok=(number>=1, number<=max)140        else:141            if hasattr(QInputDialog, "getInteger"):142                # Qt 4.3143                (number, ok) = QInputDialog.getInteger(self.plugin().application().mainWindow(), "Goto...", "Enter event number:", self._dataAccessor.eventNumber(), 1, max)144            else:145                # Qt 4.5146                (number, ok) = QInputDialog.getInt(self.plugin().application().mainWindow(), "Goto...", "Enter event number:", self._dataAccessor.eventNumber(), 1, max)147        if ok:148            self.cancel()149            currentEvent=self.dataAccessor().eventNumber()150            if currentEvent!=number:151                self.navigate(number)152    def updateEventNumberDisplay(self):153        eventDisplayString = str(self._dataAccessor.eventNumber()) + "/"154        if self._dataAccessor.numberOfEvents():155            eventDisplayString += str(self._dataAccessor.numberOfEvents())156        else:157            eventDisplayString += "?"...Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!
