links.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  1. const links_data = JSON.parse(links.replace(/"/g, '"'))
  2. const links_nb_elem = Object.keys(links_data).length
  3. const KEYCODE_ENTER = 13
  4. const alertDiv = document.getElementsByClassName('alert-danger')[0]
  5. function loadDataList(elem, list){
  6. userId = elem.value
  7. if (userId){
  8. // load and generate CalibrationMeasurement experiment link
  9. firstLink = links_data[userId][0].split(':::')[1]
  10. generateCalibrationLink(firstLink)
  11. // check if nomber of links can let access to userId
  12. if (userId > (links_nb_elem - 1) || userId < 0){
  13. alertDiv.setAttribute('style', 'display:block')
  14. }else{
  15. alertDiv.setAttribute('style', 'display:none')
  16. }
  17. let currentLinks = links_data[userId]
  18. // remove event listener of each element by default
  19. if (list.children.length > 0){
  20. for (var element of list.children){
  21. element.removeEventListener('click', elemClick)
  22. }
  23. }
  24. list.innerHTML = ""
  25. currentLinks.forEach((element, index) => {
  26. if (element.length > 0){
  27. data = element.split(':::')
  28. // add of div elements
  29. rowDiv = document.createElement('div')
  30. rowDiv.setAttribute('class', 'row')
  31. rowDivLeft = document.createElement('div')
  32. rowDivLeft.setAttribute('class', 'col-md-11')
  33. rowDivRight = document.createElement('div')
  34. rowDivRight.setAttribute('class', 'col-md-1')
  35. // create link
  36. currentLink = document.createElement('a')
  37. currentLink.setAttribute('href', data[1])
  38. currentLink.innerHTML = 'Link ' + (index + 1) + ': ' + data[0]
  39. // add of elements
  40. rowDivLeft.appendChild(currentLink)
  41. rowDiv.appendChild(rowDivLeft)
  42. rowDiv.appendChild(rowDivRight)
  43. currentLi = document.createElement('li')
  44. currentLi.setAttribute('class', 'list-group-item')
  45. currentLi.appendChild(rowDiv)
  46. list.appendChild(currentLi)
  47. }
  48. });
  49. }
  50. }
  51. function elemClick(event){
  52. event.preventDefault()
  53. currentElem = event.currentTarget
  54. // Add <i class="fas fa-check"></i>
  55. divLeft = currentElem.getElementsByClassName('col-md-1')[0]
  56. if (divLeft.children.length <= 0){
  57. iconElem = document.createElement('li')
  58. iconElem.setAttribute('class', 'fas fa-check')
  59. divLeft.appendChild(iconElem)
  60. // update `li` class element
  61. currentElem.setAttribute('class', 'list-group-item already-used')
  62. }
  63. // retrieve and open link in new tab
  64. link = currentElem.getElementsByTagName('a')[0]
  65. url = link.getAttribute('href')
  66. var win = window.open(url, '_blank');
  67. win.focus();
  68. }
  69. function generateCalibrationLink(link){
  70. // get and rebuild b64 link part using current info and calibration experiment
  71. b64Part = link.split('?q=')[1]
  72. jsonLinkData = JSON.parse(atob(b64Part))
  73. jsonLinkData['experimentName'] = 'CalibrationMeasurement'
  74. jsonLinkData['sceneName'] = '50_shades_of_grey'
  75. b64LinkData = btoa(JSON.stringify(jsonLinkData)).replace(/[=]/g, '')
  76. calibrationLink = jsonLinkData['hostConfig'] + '/#/?q=' + b64LinkData
  77. // add to calibration DOM element the new generated link
  78. domCalibrationLink = document.getElementById('calibration-link')
  79. domCalibrationLink.setAttribute('href', calibrationLink)
  80. }
  81. window.addEventListener('DOMContentLoaded', () => {
  82. const inputElement = document.getElementsByName('userId')[0]
  83. const linksList = document.getElementById('links-list')
  84. // add to calibration event listener
  85. domCalibrationLink = document.getElementById('calibration-link')
  86. liDomElement = domCalibrationLink.closest('li')
  87. liDomElement.addEventListener('click', elemClick)
  88. // first load data if userId is choosed
  89. loadDataList(inputElement, linksList)
  90. inputElement.addEventListener('keyup', event => {
  91. event.preventDefault()
  92. currentElem = event.currentTarget
  93. loadDataList(currentElem, linksList)
  94. for (var element of linksList.children){
  95. element.addEventListener('click', elemClick)
  96. }
  97. })
  98. })
  99. // check enter key issue
  100. const checkKey = e => {
  101. if (e.keyCode === KEYCODE_ENTER) {
  102. e.preventDefault()
  103. }
  104. }
  105. // implement `key` events
  106. document.addEventListener('keydown', checkKey)