You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

WelcomePage.web.js 4.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import React, { Component } from 'react';
  2. import { Conference } from '../../conference';
  3. /**
  4. * The web container rendering the welcome page.
  5. */
  6. export default class WelcomePage extends Component {
  7. /**
  8. * Implements React's {@link Component#render()}.
  9. *
  10. * @inheritdoc
  11. * @returns {ReactElement|null}
  12. */
  13. render() {
  14. // FIXME The rendering of Conference bellow is a very quick and dirty
  15. // temporary fix for the following issue: when the WelcomePage is
  16. // disabled, app.js expects Conference to be rendered already and only
  17. // then it builds a room name but the App component expects the room
  18. // name to be built already (by looking at the window's location) in
  19. // order to choose between WelcomePage and Conference.
  20. return (
  21. <div>
  22. <div id = 'welcome_page'>
  23. {
  24. this._renderHeader()
  25. }
  26. {
  27. this._renderMain()
  28. }
  29. </div>
  30. <Conference />
  31. </div>
  32. );
  33. }
  34. /**
  35. * Renders a feature with a specific index.
  36. *
  37. * @param {number} index - The index of the feature to render.
  38. * @private
  39. * @returns {ReactElement}
  40. */
  41. _renderFeature(index) {
  42. return (
  43. <div className = 'feature_holder'>
  44. <div
  45. className = 'feature_icon'
  46. data-i18n = { `welcomepage.feature${index}.title` } />
  47. <div
  48. className = 'feature_description'
  49. data-i18n = { `welcomepage.feature${index}.content` }
  50. data-i18n-options = { JSON.stringify({
  51. postProcess: 'resolveAppName'
  52. }) } />
  53. </div>
  54. );
  55. }
  56. /**
  57. * Renders a row of features.
  58. *
  59. * @param {number} beginIndex - The inclusive feature index to begin the row
  60. * with.
  61. * @param {number} endIndex - The exclusive feature index to end the row
  62. * with.
  63. * @private
  64. * @returns {ReactElement}
  65. */
  66. _renderFeatureRow(beginIndex, endIndex) {
  67. const features = [];
  68. for (let index = beginIndex; index < endIndex; ++index) {
  69. features.push(this._renderFeature(index));
  70. }
  71. return (
  72. <div className = 'feature_row'>
  73. {
  74. features
  75. }
  76. </div>
  77. );
  78. }
  79. /**
  80. * Renders the header part of this WelcomePage.
  81. *
  82. * @private
  83. * @returns {ReactElement|null}
  84. */
  85. _renderHeader() {
  86. return (
  87. <div id = 'welcome_page_header'>
  88. <a target = '_new'>
  89. <div className = 'watermark leftwatermark' />
  90. </a>
  91. <a target = '_new'>
  92. <div className = 'watermark rightwatermark' />
  93. </a>
  94. <a
  95. className = 'poweredby'
  96. href = 'http://jitsi.org'
  97. target = '_new'>
  98. <span data-i18n = 'poweredby' /> jitsi.org
  99. </a>
  100. <div id = 'enter_room_container'>
  101. <div id = 'enter_room_form'>
  102. <div id = 'domain_name' />
  103. <div id = 'enter_room'>
  104. <input
  105. autoFocus = { true }
  106. id = 'enter_room_field'
  107. type = 'text' />
  108. <div
  109. className = 'icon-reload'
  110. id = 'reload_roomname' />
  111. <input
  112. data-i18n = '[value]welcomepage.go'
  113. id = 'enter_room_button'
  114. type = 'button'
  115. value = 'GO' />
  116. </div>
  117. </div>
  118. </div>
  119. <div id = 'brand_header' />
  120. <input
  121. id = 'disable_welcome'
  122. name = 'checkbox'
  123. type = 'checkbox' />
  124. <label
  125. className = 'disable_welcome_position'
  126. data-i18n = 'welcomepage.disable'
  127. htmlFor = 'disable_welcome' />
  128. <div id = 'header_text' />
  129. </div>
  130. );
  131. }
  132. /**
  133. * Renders the main part of this WelcomePage.
  134. *
  135. * @private
  136. * @returns {ReactElement|null}
  137. */
  138. _renderMain() {
  139. return (
  140. <div id = 'welcome_page_main'>
  141. <div id = 'features'>
  142. {
  143. this._renderFeatureRow(1, 5)
  144. }
  145. {
  146. this._renderFeatureRow(5, 9)
  147. }
  148. </div>
  149. </div>
  150. );
  151. }
  152. }