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.

Watermarks.web.js 5.2KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. /* @flow */
  2. import React, { Component } from 'react';
  3. import { connect } from 'react-redux';
  4. import { translate } from '../../i18n';
  5. declare var interfaceConfig: Object;
  6. /**
  7. * The CSS style of the element with CSS class <tt>rightwatermark</tt>.
  8. *
  9. * @private
  10. */
  11. const _RIGHT_WATERMARK_STYLE = {
  12. backgroundImage: 'url(images/rightwatermark.png)'
  13. };
  14. /**
  15. * A Web Component which renders watermarks such as Jits, brand, powered by,
  16. * etc.
  17. */
  18. class Watermarks extends Component {
  19. state = {
  20. brandWatermarkLink: String,
  21. jitsiWatermarkLink: String,
  22. showBrandWatermark: Boolean,
  23. showJitsiWatermark: Boolean,
  24. showJitsiWatermarkForGuests: Boolean,
  25. showPoweredBy: Boolean
  26. };
  27. /**
  28. * Initializes a new Watermarks instance.
  29. *
  30. * @param {Object} props - The read-only properties with which the new
  31. * instance is to be initialized.
  32. */
  33. constructor(props: Object) {
  34. super(props);
  35. let showBrandWatermark;
  36. let showJitsiWatermark;
  37. let showJitsiWatermarkForGuests;
  38. if (interfaceConfig.filmStripOnly) {
  39. showBrandWatermark = false;
  40. showJitsiWatermark = false;
  41. showJitsiWatermarkForGuests = false;
  42. } else {
  43. showBrandWatermark = interfaceConfig.SHOW_BRAND_WATERMARK;
  44. showJitsiWatermark = interfaceConfig.SHOW_JITSI_WATERMARK;
  45. showJitsiWatermarkForGuests
  46. = interfaceConfig.SHOW_WATERMARK_FOR_GUESTS;
  47. }
  48. this.state = {
  49. brandWatermarkLink:
  50. showBrandWatermark ? interfaceConfig.BRAND_WATERMARK_LINK : '',
  51. jitsiWatermarkLink:
  52. showJitsiWatermark || showJitsiWatermarkForGuests
  53. ? interfaceConfig.JITSI_WATERMARK_LINK : '',
  54. showBrandWatermark,
  55. showJitsiWatermark,
  56. showJitsiWatermarkForGuests,
  57. showPoweredBy: interfaceConfig.SHOW_POWERED_BY
  58. };
  59. }
  60. /**
  61. * Implements React's {@link Component#render()}.
  62. *
  63. * @inheritdoc
  64. * @returns {ReactElement}
  65. */
  66. render() {
  67. return (
  68. <div>
  69. {
  70. this._renderJitsiWatermark()
  71. }
  72. {
  73. this._renderBrandWatermark()
  74. }
  75. {
  76. this._renderPoweredBy()
  77. }
  78. </div>
  79. );
  80. }
  81. /**
  82. * Renders a brand watermark if it is enabled.
  83. *
  84. * @private
  85. * @returns {ReactElement|null} Watermark element or null.
  86. */
  87. _renderBrandWatermark() {
  88. let reactElement = null;
  89. if (this.state.showBrandWatermark) {
  90. reactElement = ( // eslint-disable-line no-extra-parens
  91. <div
  92. className = 'watermark rightwatermark'
  93. style = { _RIGHT_WATERMARK_STYLE } />
  94. );
  95. const { brandWatermarkLink } = this.state;
  96. if (brandWatermarkLink) {
  97. reactElement = ( // eslint-disable-line no-extra-parens
  98. <a
  99. href = { brandWatermarkLink }
  100. target = '_new'>
  101. { reactElement }
  102. </a>
  103. );
  104. }
  105. }
  106. return reactElement;
  107. }
  108. /**
  109. * Renders a Jitsi watermark if it is enabled.
  110. *
  111. * @private
  112. * @returns {ReactElement|null}
  113. */
  114. _renderJitsiWatermark() {
  115. let reactElement = null;
  116. if (this.state.showJitsiWatermark
  117. || (this.props._isGuest
  118. && this.state.showJitsiWatermarkForGuests)) {
  119. reactElement = <div className = 'watermark leftwatermark' />;
  120. const { jitsiWatermarkLink } = this.state;
  121. if (jitsiWatermarkLink) {
  122. reactElement = ( // eslint-disable-line no-extra-parens
  123. <a
  124. href = { jitsiWatermarkLink }
  125. target = '_new'>
  126. { reactElement }
  127. </a>
  128. );
  129. }
  130. }
  131. return reactElement;
  132. }
  133. /**
  134. * Renders a powered by block if it is enabled.
  135. *
  136. * @private
  137. * @returns {ReactElement|null}
  138. */
  139. _renderPoweredBy() {
  140. if (this.state.showPoweredBy) {
  141. const { t } = this.props;
  142. return (
  143. <a
  144. className = 'poweredby'
  145. href = 'http://jitsi.org'
  146. target = '_new'>
  147. <span>{ t('poweredby') } jitsi.org</span>
  148. </a>
  149. );
  150. }
  151. return null;
  152. }
  153. }
  154. /**
  155. * Maps parts of Redux store to component prop types.
  156. *
  157. * @param {Object} state - Snapshot of Redux store.
  158. * @returns {{
  159. * _isGuest: boolean
  160. * }}
  161. */
  162. function _mapStateToProps(state) {
  163. const { isGuest } = state['features/jwt'];
  164. return {
  165. /**
  166. * The indicator which determines whether the local participant is a
  167. * guest in the conference.
  168. *
  169. * @private
  170. * @type {boolean}
  171. */
  172. _isGuest: isGuest
  173. };
  174. }
  175. export default connect(_mapStateToProps)(translate(Watermarks));