LinkGenerator.vue 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. <template>
  2. <v-layout justify-center align-center>
  3. <v-flex xs12 sm8>
  4. <v-card>
  5. <v-container fluid fill-height>
  6. <v-layout column align-center>
  7. <v-card-title class="headline d-block text-md-center font-weight-bold">Link generator</v-card-title>
  8. <v-card-text>
  9. <v-form>
  10. <h2>*Host configuration</h2>
  11. <h4>Web application configuration</h4>
  12. <v-text-field
  13. v-model="form.webAppUrl"
  14. label="*Web application link"
  15. />
  16. <h4>Server configuration</h4>
  17. <v-flex xs3>
  18. <v-select
  19. v-model="form.server.ssl"
  20. :items="[false, true]"
  21. label="*SSL"
  22. />
  23. </v-flex>
  24. <v-text-field
  25. v-model="form.server.host"
  26. label="*Host IP address or hostname"
  27. />
  28. <v-text-field
  29. v-model="form.server.port"
  30. label="*Port"
  31. type="number"
  32. />
  33. <h2>User ID and experiment ID</h2>
  34. <v-layout row wrap>
  35. <v-flex xs5>
  36. <v-checkbox
  37. v-model="form.userId.activated"
  38. color="primary"
  39. label="User ID"
  40. />
  41. </v-flex>
  42. <v-spacer />
  43. <v-flex xs6>
  44. <v-text-field
  45. v-model="form.userId.value"
  46. label="User ID"
  47. type="text"
  48. :disabled="!form.userId.activated"
  49. />
  50. </v-flex>
  51. </v-layout>
  52. <v-layout row wrap>
  53. <v-flex xs5>
  54. <v-checkbox
  55. v-model="form.experimentId.activated"
  56. color="primary"
  57. label="Experiment ID"
  58. />
  59. </v-flex>
  60. <v-spacer />
  61. <v-flex xs6>
  62. <v-text-field
  63. v-model="form.experimentId.value"
  64. label="Experiment ID"
  65. type="text"
  66. :disabled="!form.experimentId.activated"
  67. />
  68. </v-flex>
  69. </v-layout>
  70. <h2>Experiment name and scene name</h2>
  71. <v-layout row wrap>
  72. <v-flex xs5>
  73. <v-checkbox
  74. v-model="form.experimentName.activated"
  75. color="primary"
  76. label="Experiment name"
  77. />
  78. </v-flex>
  79. <v-spacer />
  80. <v-flex xs6>
  81. <v-text-field
  82. v-model="form.experimentName.value"
  83. label="Experiment name"
  84. type="text"
  85. :disabled="!form.experimentName.activated"
  86. />
  87. </v-flex>
  88. </v-layout>
  89. <v-layout row wrap>
  90. <v-flex xs5>
  91. <v-checkbox
  92. v-model="form.sceneName.activated"
  93. color="primary"
  94. label="Scene name"
  95. />
  96. </v-flex>
  97. <v-spacer />
  98. <v-flex xs6>
  99. <v-text-field
  100. v-model="form.sceneName.value"
  101. label="Scene name"
  102. type="text"
  103. :disabled="!form.sceneName.activated"
  104. />
  105. </v-flex>
  106. </v-layout>
  107. <v-btn color="primary" @click="generateLink">Generate link</v-btn>
  108. <div v-if="linkOutput && dataOutput">
  109. <h2 class="mt-5">Result</h2>
  110. <v-textarea
  111. :value="linkOutput"
  112. label="Your generated link"
  113. type="text"
  114. disabled
  115. />
  116. Data in the generated link:
  117. <pre>{{ dataOutput }}</pre>
  118. </div>
  119. <v-slide-y-transition mode="out-in">
  120. <v-alert v-if="alertMessage" :value="true" type="info" v-text="alertMessage" />
  121. </v-slide-y-transition>
  122. </v-form>
  123. </v-card-text>
  124. </v-layout>
  125. </v-container>
  126. </v-card>
  127. </v-flex>
  128. </v-layout>
  129. </template>
  130. <script>
  131. export default {
  132. name: 'LinkGenerator',
  133. components: {
  134. },
  135. data() {
  136. return {
  137. form: {
  138. webAppUrl: 'http://diran.univ-littoral.fr',
  139. server: {
  140. ssl: false,
  141. host: 'diran.univ-littoral.fr',
  142. port: '80'
  143. },
  144. userId: {
  145. activated: false,
  146. value: ''
  147. },
  148. experimentId: {
  149. activated: false,
  150. value: ''
  151. },
  152. experimentName: {
  153. activated: false,
  154. value: ''
  155. },
  156. sceneName: {
  157. activated: false,
  158. value: ''
  159. }
  160. },
  161. linkOutput: null,
  162. dataOutput: null,
  163. alertMessage: null
  164. }
  165. },
  166. methods: {
  167. generateLink() {
  168. this.alertMessage = null
  169. // Check host configuration is set
  170. if (this.form.webAppUrl === '' || this.form.server.host === '' || this.form.server.port === '') {
  171. this.alertMessage = 'The host configuration is required.'
  172. this.linkOutput = null
  173. this.dataOutput = null
  174. return
  175. }
  176. // Generate the link
  177. const obj = {
  178. hostConfig: {
  179. ssl: this.form.server.ssl,
  180. host: this.form.server.host,
  181. port: this.form.server.port
  182. }
  183. }
  184. if (this.form.userId.activated && this.form.userId.value !== '')obj.userId = this.form.userId.value
  185. if (this.form.experimentId.activated && this.form.experimentId.value !== '')obj.experimentId = this.form.experimentId.value
  186. if (this.form.experimentName.activated && this.form.experimentName.value !== '')obj.experimentName = this.form.experimentName.value
  187. if (this.form.sceneName.activated && this.form.sceneName.value !== '')obj.sceneName = this.form.sceneName.value
  188. // eslint-disable-next-line no-div-regex
  189. const q = btoa(JSON.stringify(obj)).replace(/=/g, '')
  190. this.linkOutput = `${this.form.webAppUrl}/#/?q=${q}`
  191. this.dataOutput = JSON.stringify(obj, null, 2)
  192. }
  193. }
  194. }
  195. </script>