interface.html 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549
  1. <% /*
  2. This is basically all the markup and interface for TogetherJS.
  3. Note all links should be like http://localhost:8080/togetherjs/*
  4. these links are rewritten with the location where TogetherJS was deployed.
  5. This file is inlined into togetherjs/templates.js
  6. */ %>
  7. <div id="togetherjs-container" class="togetherjs">
  8. <!-- This is the main set of buttons: -->
  9. <div id="togetherjs-dock" class="togetherjs-dock-right">
  10. <div id="togetherjs-dock-anchor" title="{{ gettext('Move the dock') }}">
  11. <span id="togetherjs-dock-anchor-horizontal">
  12. <img src="http://localhost:8080/togetherjs/images/icn-handle-circle@2x.png" alt="drag">
  13. </span>
  14. <span id="togetherjs-dock-anchor-vertical">
  15. <img src="http://localhost:8080/togetherjs/images/icn-handle-circle@2x.png" alt="drag">
  16. </span>
  17. </div>
  18. <div id="togetherjs-buttons">
  19. <div style="display: none">
  20. <button id="togetherjs-template-dock-person" class="togetherjs-button togetherjs-dock-person">
  21. <div class="togetherjs-tooltip togetherjs-dock-person-tooltip">
  22. <span class="togetherjs-person-name"></span>
  23. <span class="togetherjs-person-tooltip-arrow-r"></span>
  24. </div>
  25. <div class="togetherjs-person togetherjs-person-status-overlay"></div>
  26. </button>
  27. </div>
  28. <button id="togetherjs-profile-button" class="togetherjs-button" title="{{ gettext('This is you') }}">
  29. <div class="togetherjs-person togetherjs-person-self"></div>
  30. <div id="togetherjs-profile-arrow"></div>
  31. </button>
  32. <button id="togetherjs-share-button" class="togetherjs-button" title="{{ gettext('Add a friend') }}"></button>
  33. <button id="togetherjs-audio-button" class="togetherjs-button" title="{{ gettext('Turn on microphone')}}">
  34. <span id="togetherjs-audio-unavailable" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set">
  35. </span>
  36. <span id="togetherjs-audio-ready" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set" style="display: none">
  37. </span>
  38. <span id="togetherjs-audio-outgoing" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set" style="display: none">
  39. </span>
  40. <span id="togetherjs-audio-incoming" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set" style="display: none">
  41. </span>
  42. <span id="togetherjs-audio-active" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set" style="display: none">
  43. </span>
  44. <span id="togetherjs-audio-muted" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set" style="display: none">
  45. </span>
  46. <span id="togetherjs-audio-error" class="togetherjs-audio-set" data-toggles=".togetherjs-audio-set" style="display: none">
  47. </span>
  48. </button>
  49. <button id="togetherjs-chat-button" class="togetherjs-button" title="{{ gettext('Chat') }}"></button>
  50. <div id="togetherjs-dock-participants"></div>
  51. </div>
  52. </div>
  53. <!-- The window for editing the avatar: -->
  54. <div id="togetherjs-avatar-edit" class="togetherjs-modal"
  55. style="display: none">
  56. <header> {{ gettext('Update avatar') }} </header>
  57. <section>
  58. <div class="togetherjs-avatar-preview togetherjs-person togetherjs-person-self"></div>
  59. <div id="togetherjs-avatar-buttons">
  60. <input type="file" class="togetherjs-upload-avatar">
  61. <!--<button id="togetherjs-upload-avatar" class="togetherjs-primary">Upload a picture</button>-->
  62. <!--<button id="togetherjs-camera-avatar" class="togetherjs-default">Take a picture</button>-->
  63. </div>
  64. </section>
  65. <section class="togetherjs-buttons">
  66. <button class="togetherjs-cancel togetherjs-dismiss">{{ gettext('Cancel') }}</button>
  67. <span class="togetherjs-alt-text">{{ gettext('or') }}</span>
  68. <button class="togetherjs-avatar-save togetherjs-primary">{{ gettext('Save') }}</button>
  69. </section>
  70. </div>
  71. <!-- The window for sharing the link: -->
  72. <div id="togetherjs-share" class="togetherjs-window"
  73. data-bind-to="#togetherjs-share-button" style="display: none">
  74. <header> {{ gettext('Invite a friend') }} </header>
  75. <section>
  76. <div class="togetherjs-not-mobile">
  77. <p>{{ gettext('Copy and paste this link over IM or email:') }}</p>
  78. <input type="text" class="togetherjs-share-link">
  79. </div>
  80. <div class="togetherjs-only-mobile">
  81. <p>{{ gettext('Copy and paste this link over IM or email:') }}</p>
  82. <input type="text" class="togetherjs-share-link">
  83. <!-- <a class="togetherjs-share-link" href="#">Press your thumb here.</a> -->
  84. </div>
  85. </section>
  86. </div>
  87. <!-- Participant Full List view template: -->
  88. <div id="togetherjs-participantlist" class="togetherjs-window"
  89. data-bind-to="#togetherjs-participantlist-button" style="display: none">
  90. <header> {{ gettext('Participants') }} </header>
  91. <section>
  92. <div class="togetherjs-not-mobile">
  93. <ul>
  94. <li id="togetherjs-participant-item">
  95. <img class="togetherjs-person togetherjs-person-small" src="http://localhost:8080/togetherjs/images/btn-menu-change-avatar.png">
  96. <span class="tj-name togetherjs-person-name">NAME</span>
  97. <span class="tj-status">&#9679;</span>
  98. <p class="tj-urllocation">{{ gettext('Currently at:') }} <a class="togetherjs-person-url togetherjs-person-url-title" href="">http://www.location.comwww.location.comwww.location.comasdfsafd</a></p>
  99. <p class="tj-follow">{{ gettext('Follow:') }}
  100. <label class="togetherjs-follow-question" for="togetherjs-person-status-follow">
  101. <input type="checkbox" id="togetherjs-person-status-follow">
  102. </label>
  103. </p>
  104. <section class="togetherjs-buttons">
  105. <!-- Displayed when the peer is at a different URL: -->
  106. <div class="togetherjs-different-url">
  107. <a class="togetherjs-nudge togetherjs-default tj-btn-sm">{{ gettext('Nudge them') }}</a>
  108. <a href="#" class="togetherjs-follow togetherjs-person-url togetherjs-primary tj-btn-sm">{{ gettext('Join them') }}</a>
  109. </div>
  110. <!-- Displayed when the peer is at your same URL: -->
  111. <div class="togetherjs-same-url" style="display: none">
  112. <span class="togetherjs-person-name"></span> {{ gettext('is on the same page as you.')}}
  113. </div>
  114. </section>
  115. </li>
  116. </ul>
  117. </section>
  118. </div>
  119. <!-- Participant detail template: -->
  120. <div id="togetherjs-template-participant-window" class="togetherjs-window" style="display: none">
  121. <header><div class="togetherjs-person togetherjs-person-small"></div><span class="togetherjs-person-name"></span></header>
  122. <section class="togetherjs-participant-window-main">
  123. <p class="togetherjs-participant-window-row"><strong>{{ gettext('Role:') }}</strong>
  124. <span class="togetherjs-person-role"></span>
  125. </p>
  126. <p class="togetherjs-participant-window-row"><strong>{{ gettext('Currently at:') }}</strong>
  127. <a class="togetherjs-person-url togetherjs-person-url-title"></a>
  128. </p>
  129. <p class="togetherjs-participant-window-row"><strong>{{ gettext('Status:') }}</strong>
  130. <span class="togetherjs-person-status"></span>
  131. </p>
  132. <p class="togetherjs-participant-window-row"><strong class="togetherjs-float-left">{{ gettext('Follow this participant:') }}</strong>
  133. <label class="togetherjs-follow-question togetherjs-float-left" for="togetherjs-person-status-follow">
  134. <input type="checkbox" id="togetherjs-person-status-follow">
  135. </label>
  136. <span class="togetherjs-clear"></span>
  137. </p>
  138. </section>
  139. <section class="togetherjs-buttons">
  140. <!-- Displayed when the peer is at a different URL: -->
  141. <div class="togetherjs-different-url">
  142. <a class="togetherjs-nudge togetherjs-default">{{ gettext('Nudge them') }}</a>
  143. <a href="#" class="togetherjs-follow togetherjs-person-url togetherjs-primary">{{ gettext('Join them') }}</a>
  144. </div>
  145. <!-- Displayed when the peer is at your same URL: -->
  146. <div class="togetherjs-same-url" style="display: none">
  147. <span class="togetherjs-person-name"></span> {{ gettext('is on the same page as you.') }}
  148. </div>
  149. </section>
  150. </div>
  151. <!-- The chat screen: -->
  152. <div id="togetherjs-chat" class="togetherjs-window" data-bind-to="#togetherjs-chat-button"
  153. style="display: none">
  154. <header> {{ gettext('Chat') }} </header>
  155. <section class="togetherjs-subtitle">
  156. <div id="togetherjs-chat-participants" data-toggles="#togetherjs-chat-no-participants" style="display: none">
  157. <span id="togetherjs-chat-participant-list"></span>
  158. &amp; {{ gettext('You') }}
  159. </div>
  160. <div id="togetherjs-chat-no-participants" data-toggles="#togetherjs-chat-participants">
  161. {{ gettext('No one else is here.') }}
  162. </div>
  163. </section>
  164. <div style="display: none">
  165. <!-- Template for one message: -->
  166. <div id="togetherjs-template-chat-message" class="togetherjs-chat-item togetherjs-chat-message">
  167. <div class="togetherjs-person"></div>
  168. <div class="togetherjs-timestamp"><span class="togetherjs-time">HH:MM</span> <span class="togetherjs-ampm">AM/PM</span></div>
  169. <div class="togetherjs-person-name-abbrev"></div>
  170. <div class="togetherjs-chat-content togetherjs-sub-content"></div>
  171. </div>
  172. <!-- Template for when a person leaves: -->
  173. <div id="togetherjs-template-chat-left" class="togetherjs-chat-item togetherjs-chat-left-item">
  174. <div class="togetherjs-person"></div>
  175. <div class="togetherjs-ifnot-declinedJoin">
  176. <div class="togetherjs-inline-text"><span class="togetherjs-person-name"></span> {{ gettext('left the session.') }}</div>
  177. </div>
  178. <div class="togetherjs-if-declinedJoin">
  179. <div class="togetherjs-inline-text"><span class="togetherjs-person-name"></span> {{ gettext('declined to join the session.')}}</div>
  180. </div>
  181. <div class="togetherjs-clear"></div>
  182. </div>
  183. <!-- Template when a person joins the session: -->
  184. <div id="togetherjs-template-chat-joined" class="togetherjs-chat-item togetherjs-chat-join-item">
  185. <div class="togetherjs-person"></div>
  186. <div class="togetherjs-inline-text"><span class="togetherjs-person-name"></span> {{ gettext('joined the session.') }}</div>
  187. <div class="togetherjs-clear"></div>
  188. </div>
  189. <!-- Template for system-derived messages: -->
  190. <div id="togetherjs-template-chat-system" class="togetherjs-chat-item">
  191. <span class="togetherjs-chat-content togetherjs-sub-content"></span>
  192. </div>
  193. <!-- Template when a person joins the session: -->
  194. <!-- <div id="togetherjs-template-chat-joined" class="togetherjs-chat-item togetherjs-chat-join-item">
  195. <div class="togetherjs-person"></div>
  196. <div class="togetherjs-inline-text"><span class="togetherjs-person-name"></span> joined the session.</div>
  197. <div class="togetherjs-clear"></div>
  198. </div> -->
  199. <!-- Template for when someone goes to a new URL: -->
  200. <div id="togetherjs-template-url-change" class="togetherjs-chat-item togetherjs-chat-url-change">
  201. <div class="togetherjs-person"></div>
  202. <div class="togetherjs-inline-text">
  203. <div class="togetherjs-if-sameUrl">
  204. <span class="togetherjs-person-name"></span>
  205. {{ gettext('is on the same page as you.') }}
  206. </div>
  207. <div class="togetherjs-ifnot-sameUrl">
  208. <span class="togetherjs-person-name"></span>
  209. {{ gettext('has gone to:') }} <a href="#" class="togetherjs-person-url togetherjs-person-url-title" target="_self"></a>
  210. <section class="togetherjs-buttons togetherjs-buttons-notification-diff-url">
  211. <!-- Displayed when the peer is at a different URL: -->
  212. <div class="togetherjs-different-url togetherjs-notification-diff-url">
  213. <a class="togetherjs-nudge togetherjs-default">{{ gettext('Nudge them') }}</a>
  214. <a href="#" class="togetherjs-follow togetherjs-person-url togetherjs-primary">{{ gettext('Join them') }}</a>
  215. </div>
  216. </section>
  217. <!-- <div>
  218. <a class="togetherjs-nudge togetherjs-secondary">Nudge them</a>
  219. <a href="" class="togetherjs-person-url togetherjs-follow togetherjs-primary">Join them</a>
  220. </div> -->
  221. </div>
  222. </div>
  223. <div class="togetherjs-clear"></div>
  224. </div>
  225. </div>
  226. <section id="togetherjs-chat-messages">
  227. <!-- FIX ME// need to have some dialogue that says something like - There are no chats yet! -->
  228. </section>
  229. <section id="togetherjs-chat-input-box">
  230. <textarea id="togetherjs-chat-input" placeholder="{{ gettext('Type your message here') }}"></textarea>
  231. </section>
  232. </div>
  233. <!-- this is a kind of warning popped up when you (successfully) start RTC: -->
  234. <div id="togetherjs-rtc-info" class="togetherjs-window"
  235. data-bind-to="#togetherjs-audio-button"
  236. style="display: none">
  237. <header> {{ gettext('Audio Chat') }} </header>
  238. <section>
  239. <p>
  240. {{ gettext('Activate your <strong>browser microphone</strong> near your URL bar above.') }}
  241. </p>
  242. <p>
  243. {{ gettext('Talking on your microphone through your web browser is an experimental feature.') }}
  244. </p>
  245. <p>
  246. {{ gettext('Read more about Audio Chat') }} <a href="https://github.com/mozilla/togetherjs/wiki/About-Audio-Chat-and-WebRTC" target="_blank">{{ gettext('here') }}</a>.
  247. </p>
  248. </section>
  249. <section class="togetherjs-buttons">
  250. <label for="togetherjs-rtc-info-dismiss" style="display: inline;">
  251. <input class="togetherjs-dont-show-again" id="togetherjs-rtc-info-dismiss" type="checkbox">
  252. {{ gettext('Don\'t show again.') }}
  253. </label>
  254. <button class="togetherjs-default togetherjs-dismiss" type="button">{{ gettext('Close') }}</button>
  255. </section>
  256. </div>
  257. <!-- this is popped up when you hit the audio button, but RTC isn't
  258. supported: -->
  259. <div id="togetherjs-rtc-not-supported" class="togetherjs-window"
  260. data-bind-to="#togetherjs-audio-button"
  261. style="display: none">
  262. <header> {{ gettext('Audio Chat') }} </header>
  263. <section>
  264. <p>{{ gettext('Audio chat requires you to use a <a href=\'https://github.com/mozilla/togetherjs/wiki/About-Audio-Chat-and-WebRTC\' target=\'_blank\'>newer browser</a>!') }}</p>
  265. <p>
  266. {{ gettext('Live audio chat requires a newer (or different) browser than you\'re using.') }}
  267. </p>
  268. <p>
  269. {{ gettext('See <a href=\'https://github.com/mozilla/togetherjs/wiki/About-Audio-Chat-and-WebRTC\' target=\'_blank\'>this page</a>for more information and a list of supported browsers.') }}
  270. </p>
  271. </section>
  272. <section class="togetherjs-buttons">
  273. <div class="togetherjs-rtc-dialog-btn">
  274. <button class="togetherjs-default togetherjs-dismiss" type="button">{{ gettext('Close') }}</button>
  275. </div>
  276. </section>
  277. </div>
  278. <!-- The popup when a chat message comes in and the #togetherjs-chat window isn't open -->
  279. <div id="togetherjs-chat-notifier" class="togetherjs-notification"
  280. data-bind-to="#togetherjs-chat-button"
  281. style="display: none">
  282. <img src="http://localhost:8080/togetherjs/images/notification-togetherjs-logo.png" class="togetherjs-notification-logo" alt="">
  283. <img src="http://localhost:8080/togetherjs/images/notification-btn-close.png" class="togetherjs-notification-closebtn togetherjs-dismiss" alt="[close]">
  284. <section id="togetherjs-chat-notifier-message">
  285. </section>
  286. </div>
  287. <!-- The menu when you click on the profile: -->
  288. <div id="togetherjs-menu" class="togetherjs-menu" style="display: none">
  289. <div class="togetherjs-menu-item togetherjs-menu-disabled" id="togetherjs-menu-profile">
  290. <img id="togetherjs-menu-avatar">
  291. <span class="togetherjs-person-name-self" id="togetherjs-self-name-display" data-toggles="#togetherjs-menu .togetherjs-self-name">[nickname]</span>
  292. <input class="togetherjs-self-name" type="text" data-toggles="#togetherjs-self-name-display" style="display: none" placeholder="{{ gettext("Enter your name") }}">
  293. </div>
  294. <div class="togetherjs-menu-hr-avatar"></div>
  295. <div class="togetherjs-menu-item" id="togetherjs-menu-update-name"><img src="http://localhost:8080/togetherjs/images/button-pencil.png" alt=""> {{ gettext('Update your name') }}</div>
  296. <div class="togetherjs-menu-item" id="togetherjs-menu-update-avatar"><img src="http://localhost:8080/togetherjs/images/btn-menu-change-avatar.png" alt=""> {{ gettext('Change avatar') }}</div>
  297. <div class="togetherjs-menu-item" id="togetherjs-menu-update-color"><span class="togetherjs-person-bgcolor-self"></span> {{ gettext('Pick profile color') }}</div>
  298. <div class="togetherjs-hr"></div>
  299. <div class="togetherjs-menu-item" id="togetherjs-menu-help">{{ gettext('Help') }}</div>
  300. <div class="togetherjs-menu-item" id="togetherjs-menu-feedback">{{ gettext('Feedback') }}</div>
  301. <div id="togetherjs-invite" style="display: none">
  302. <div class="togetherjs-hr"></div>
  303. <div id="togetherjs-invite-users"></div>
  304. <div class="togetherjs-menu-item" id="togetherjs-menu-refresh-invite">{{ gettext('Refresh users') }}</div>
  305. <div class="togetherjs-menu-item" id="togetherjs-menu-invite-anyone">{{ gettext('Invite anyone') }}</div>
  306. </div>
  307. <div class="togetherjs-hr"></div>
  308. <div class="togetherjs-menu-item" id="togetherjs-menu-end"><img src="http://localhost:8080/togetherjs/images/button-end-session.png" alt=""> {{ gettext('End') }} <span class="togetherjs-tool-name">{{ gettext('TogetherJS') }}</span></div>
  309. </div>
  310. <!-- template for one person in the invite-users list -->
  311. <div style="display: none">
  312. <div id="togetherjs-template-invite-user-item" class="togetherjs-menu-item">
  313. <!-- FIXME: should include avatar in some way -->
  314. <span class="togetherjs-person-name"></span>
  315. </div>
  316. </div>
  317. <!-- A window version of #togetherjs-menu, for use on mobile -->
  318. <div id="togetherjs-menu-window" class="togetherjs-window" style="display: none">
  319. <header>{{ gettext('Settings and Profile') }}</header>
  320. <section>
  321. <div class="togetherjs-menu-item">
  322. <img class="togetherjs-menu-avatar">
  323. <span class="togetherjs-person-name-self" id="togetherjs-self-name-display"></span>
  324. </div>
  325. <div class="togetherjs-menu-hr-avatar"></div>
  326. <div class="togetherjs-menu-item" id="togetherjs-menu-update-name-button"><img src="http://localhost:8080/togetherjs/images/button-pencil.png" alt=""> {{ gettext('Update your name') }}</div>
  327. <div class="togetherjs-menu-item" id="togetherjs-menu-update-avatar-button"><img src="http://localhost:8080/togetherjs/images/btn-menu-change-avatar.png" alt=""> {{ gettext('Change avatar') }}</div>
  328. <div class="togetherjs-menu-item" id="togetherjs-menu-update-color-button"><span class="togetherjs-person-bgcolor-self"></span> {{ gettext('Pick profile color') }}</div>
  329. <div class="togetherjs-hr"></div>
  330. <div class="togetherjs-menu-item" id="togetherjs-menu-help-button">{{ gettext('Help') }}</div>
  331. <div class="togetherjs-menu-item" id="togetherjs-menu-feedback-button">{{ gettext('Feedback') }}</div>
  332. <div class="togetherjs-hr"></div>
  333. <div class="togetherjs-menu-item" id="togetherjs-menu-end-button"><img src="http://localhost:8080/togetherjs/images/button-end-session.png" alt=""> {{ gettext('End TOOL_NAME') }}</div>
  334. </section>
  335. <section class="togetherjs-buttons">
  336. <button class="togetherjs-dismiss togetherjs-primary">{{ gettext('OK') }}</button>
  337. </section>
  338. </div>
  339. <!-- The name editor, for use on mobile -->
  340. <div id="togetherjs-edit-name-window" class="togetherjs-window" style="display: none">
  341. <header>{{ gettext('Update Name') }}</header>
  342. <section>
  343. <div>
  344. <input class="togetherjs-self-name" type="text" placeholder="{{ gettext('Enter your name') }}">
  345. </div>
  346. </section>
  347. <section class="togetherjs-buttons">
  348. <button class="togetherjs-dismiss togetherjs-primary">{{ gettext('OK') }}</button>
  349. </section>
  350. </div>
  351. <div class="togetherjs-menu" id="togetherjs-pick-color" style="display: none">
  352. <div class="togetherjs-triangle-up"><img src="http://localhost:8080/togetherjs/images/icn-triangle-up.png"></div>
  353. <div style="display: none">
  354. <div id="togetherjs-template-swatch" class="togetherjs-swatch">
  355. </div>
  356. </div>
  357. </div>
  358. <!-- Invisible elements that handle the RTC audio: -->
  359. <audio id="togetherjs-audio-element"></audio>
  360. <audio id="togetherjs-local-audio" muted="true" volume="0.3"></audio>
  361. <audio id="togetherjs-notification" src="http://localhost:8080/togetherjs/images/notification.ogg"></audio>
  362. <!-- The intro screen for someone who joins a session the first time: -->
  363. <div id="togetherjs-intro" class="togetherjs-modal" style="display: none">
  364. <header>{{ gettext('Join TOOL_NAME session?') }}</header>
  365. <section>
  366. <p>{{ gettext("Your friend has asked you to join their TOOL_SITE_LINK browser session to collaborate in real-time!")}}</p>
  367. <p>{{ gettext("Would you like to join their session?") }}</p>
  368. </section>
  369. <section class="togetherjs-buttons">
  370. <button class="togetherjs-destructive togetherjs-modal-dont-join">{{ gettext( "No, don't join" ) }}</button>
  371. <button class="togetherjs-primary togetherjs-dismiss">{{ gettext( "Yes, join session" ) }}</button>
  372. </section>
  373. </div>
  374. <!-- Shown when a web browser is completely incapable of running TogetherJS: -->
  375. <div id="togetherjs-browser-broken" class="togetherjs-modal" style="display: none">
  376. <header> {{ gettext('Sorry') }} </header>
  377. <section>
  378. <p>
  379. {{ gettext("We're sorry, TOOL_NAME doesn't work with this browser. Please <a href='https://github.com/mozilla/togetherjs/wiki/Supported-Browsers#supported-browsers'>upgrade to a supported browser</a> to try TOOL_NAME." ) }}
  380. </p>
  381. <p id="togetherjs-browser-broken-is-ie" style="display: none">
  382. {{ gettext('We need your help fixing TogetherJS on Internet Explorer! Here are a list of IE <a href=\"https://github.com/mozilla/togetherjs/issues?labels=IE&milestone=&page=1&state=open\" target=\"_blank\">GitHub issues</a> we need fixed that you can work on.') }}
  383. {{ gettext("Internet Explorer <a href=\"https://github.com/mozilla/togetherjs/wiki/Supported-Browsers#internet-explorer\">is currently not supported</a>. If you do want to try out TogetherJS, we'd suggest using Firefox or Chrome.") }}
  384. </p>
  385. </section>
  386. <section class="togetherjs-buttons">
  387. <button class="togetherjs-dismiss togetherjs-primary">{{ gettext('End TOOL_NAME') }}</button>
  388. </section>
  389. </div>
  390. <!-- Shown when the browser has WebSockets, but is IE (i.e., IE10) -->
  391. <div id="togetherjs-browser-unsupported" class="togetherjs-modal" style="display: none">
  392. <header> {{ gettext('Unsupported Browser') }} </header>
  393. <section>
  394. <p>
  395. {{ gettext('We need your help fixing TogetherJS on Internet Explorer! Here are a list of IE <a href="https://github.com/mozilla/togetherjs/issues?labels=IE&milestone=&page=1&state=open" target="_blank">GitHub issues</a> we need fixed that you can work on.') }}
  396. {{ gettext("Internet Explorer <a href=\"https://github.com/mozilla/togetherjs/wiki/Supported-Browsers#internet-explorer\">is currently not supported</a>. If you do want to try out TogetherJS, we'd suggest using Firefox or Chrome.") }}
  397. </p>
  398. <p>{{ gettext('You can continue to try to use TOOL_NAME, but you are likely to hit lots of bugs. So be warned.') }}</p>
  399. </section>
  400. <section class="togetherjs-buttons">
  401. <button class="togetherjs-dismiss togetherjs-primary">{{ gettext('End TOOL_NAME') }}</button>
  402. <button class="togetherjs-dismiss togetherjs-secondary togetherjs-browser-unsupported-anyway">{{ gettext('Try TOOL_NAME Anyway') }}</button>
  403. </section>
  404. </div>
  405. <div id="togetherjs-confirm-end" class="togetherjs-modal" style="display: none">
  406. <header> {{ gettext('End session?') }} </header>
  407. <section>
  408. <p>
  409. {{ gettext("Are you sure you'd like to end your TOOL_NAME session?") }}
  410. </p>
  411. </section>
  412. <section class="togetherjs-buttons">
  413. <button class="togetherjs-cancel togetherjs-dismiss">{{ gettext('Cancel') }}</button>
  414. <span class="togetherjs-alt-text">{{ gettext('or') }}</span>
  415. <button id="togetherjs-end-session" class="togetherjs-destructive">{{ gettext('End session') }}</button>
  416. </section>
  417. </div>
  418. <div id="togetherjs-feedback-form" class="togetherjs-modal" style="display: none;">
  419. <header> {{ gettext('Feedback') }} </header>
  420. <iframe src="https://docs.google.com/a/mozilla.com/forms/d/1lVE7JyRo_tjakN0mLG1Cd9X9vseBX9wci153z9JcNEs/viewform?embedded=true" width="400" height="300" frameborder="0" marginheight="0" marginwidth="0">{{ gettext('Loading form...') }}</iframe>
  421. <!-- <p><button class="togetherjs-modal-close">Close</button></p> -->
  422. </div>
  423. <div style="display: none">
  424. <!-- This is when you join a session and the other person has already changed to another URL: -->
  425. <div id="togetherjs-template-url-change" class="togetherjs-modal">
  426. <header> {{ gettext('Following to new URL...') }} </header>
  427. <section>
  428. <div class="togetherjs-person"></div>
  429. {{ gettext('Following') }}
  430. <span class="togetherjs-person-name"></span>
  431. {{ gettext( "to" ) }} <a href="" class="togetherjs-person-url togetherjs-person-url-title"></a>
  432. </section>
  433. </div>
  434. <!-- This is when someone invites you to their session: -->
  435. <div id="togetherjs-template-invite" class="togetherjs-chat-item">
  436. <div class="togetherjs-person"></div>
  437. <div>
  438. <span class="togetherjs-person-name"></span>
  439. {{ gettext('has invited') }} <strong class="togetherjs-if-forEveryone">{{ gettext('anyone') }}</strong>
  440. <strong class="togetherjs-ifnot-forEveryone">{{ gettext('you') }}</strong>
  441. {{ gettext( "to" ) }} <a href="" data-togetherjs-subattr-href="href" class="togetherjs-sub-hrefTitle" target="_blank"></a>
  442. </div>
  443. </div>
  444. </div>
  445. <!-- The pointer at the side of a window: -->
  446. <div id="togetherjs-window-pointer-right" style="display: none"></div>
  447. <div id="togetherjs-window-pointer-left" style="display: none"></div>
  448. <!-- The element that overlaps the background of the page during a modal dialog: -->
  449. <div id="togetherjs-modal-background" style="display: none"></div>
  450. <!-- Some miscellaneous templates -->
  451. <div style="display: none">
  452. <!-- This is the cursor: -->
  453. <div id="togetherjs-template-cursor" class="togetherjs-cursor togetherjs">
  454. <!-- Note: images/cursor.svg is a copy of this (for editing): -->
  455. <!-- crossbrowser svg dropshadow http://demosthenes.info/blog/600/Creating-a-True-CrossBrowser-Drop-Shadow- -->
  456. <svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
  457. width="15px" height="22.838px" viewBox="96.344 146.692 15 22.838" enable-background="new 96.344 146.692 15 22.838"
  458. xml:space="preserve">
  459. <path fill="#231F20" d="M98.984,146.692c2.167,1.322,1.624,6.067,3.773,7.298c-0.072-0.488,2.512-0.931,3.097,0
  460. c0.503,0.337,1.104-0.846,2.653,0.443c0.555,0.593,3.258,2.179,1.001,8.851c-0.446,1.316,2.854,0.135,1.169,2.619
  461. c-3.748,5.521-9.455,2.787-9.062,1.746c1.06-2.809-6.889-4.885-4.97-9.896c0.834-2.559,2.898,0.653,2.923,0.29
  462. c-0.434-1.07-2.608-5.541-2.923-6.985C96.587,150.793,95.342,147.033,98.984,146.692z"/>
  463. </svg>
  464. <!-- <img class="togetherjs-cursor-img" src="http://localhost:8080/togetherjs/images/cursor.svg"> -->
  465. <span class="togetherjs-cursor-container">
  466. <span class="togetherjs-cursor-name"></span>
  467. <span style="display:none" class="togetherjs-cursor-typing" id="togetherjs-cursor-typebox">
  468. <span class="togetherjs-typing-ellipse-one">&#9679;</span><span class="togetherjs-typing-ellipse-two">&#9679;</span><span class="togetherjs-typing-ellipse-three">&#9679;</span>
  469. </span>
  470. <!-- Displayed when the cursor is below the screen: -->
  471. <span class="togetherjs-cursor-down">
  472. </span>
  473. <!-- Displayed when the cursor is above the screen: -->
  474. <span class="togetherjs-cursor-up">
  475. </span>
  476. </span>
  477. </div>
  478. <!-- This is the element that goes around focused form elements: -->
  479. <div id="togetherjs-template-focus">
  480. <div class="togetherjs-focus togetherjs-person-bordercolor"></div>
  481. </div>
  482. <!-- This is a click: -->
  483. <div id="togetherjs-template-click" class="togetherjs-click togetherjs">
  484. </div>
  485. </div>
  486. </div>