index.html 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. <!--
  2. Sapphire
  3. Copyright (C) 2018 Florrie Haero
  4. Copyright (C) 2018 Alyssa Rosenzweig
  5. Copyright (C) 2018 eq
  6. This program is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2 of the License, or
  9. (at your option) any later version.
  10. This program is distributed in the hope that it will be useful,
  11. but WITHOUT ANY WARRANTY; without even the implied warranty of
  12. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  13. GNU General Public License for more details.
  14. You should have received a copy of the GNU General Public License
  15. along with this program; if not, write to the Free Software
  16. Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
  17. -->
  18. <!DOCTYPE html>
  19. <html>
  20. <head>
  21. <meta charset="utf-8">
  22. <meta name="viewport" content="width=device-width" />
  23. <title>Sapphire</title>
  24. <link rel="manifest" href="manifest.json"></link>
  25. <link rel="stylesheet" href="style/palette.css"></link>
  26. <link rel="stylesheet" href="style/style.css"></link>
  27. <link rel="stylesheet" id="emoji-stylesheet" href="style/emoji-none.css"></link>
  28. </head>
  29. <body>
  30. <div id="app" class="show-buddy-list show-chat-user-list">
  31. <div id="buddy-list-pane" class="pane">
  32. <div class="pane-scroller">
  33. <div id="buddy-list">
  34. </div>
  35. <div id="chat-list">
  36. </div>
  37. </div>
  38. <div id="left-pane-footer" class="pane-footer">
  39. <svg id="add-buddy" class="icon">
  40. <title>Add a buddy</title>
  41. <use href="icons/add.svg#add"></use>
  42. </svg>
  43. <!-- TODO: make this an actual settings modal -->
  44. <svg id="change-avatar" class="icon">
  45. <title>Change avatar</title>
  46. <use href="icons/gear.svg#gear"></use>
  47. </svg>
  48. <!--
  49. <div id="whoami">
  50. <div id="whoami-status">
  51. <span class="buddy-avatar"></span>
  52. <span class="buddy-name">Florrie</span>
  53. <span class="buddy-status status-online">●</span>
  54. </div>
  55. </div>
  56. -->
  57. </div>
  58. </div>
  59. <div id="chat-pane" class="pane">
  60. <div id="room-info">
  61. <a id="room-back" href="#" class="room-button">
  62. <svg class="icon"><use href="icons/menu.svg#menu"></use></svg>
  63. </a>
  64. <div id="room-info-content">
  65. <div id="room-name"></div>
  66. <div id="room-topic"></div>
  67. </div>
  68. <!-- TODO: "Toggle chat list" icon -->
  69. <a id="toggle-chat-user-list" class="room-button" href="#">@</a>
  70. </div>
  71. <div id="message-list-container" tabindex="0">
  72. <div id="message-list">
  73. </div>
  74. </div>
  75. <div id="chat-input-area">
  76. <form id="chat-form">
  77. <!-- Don't set an id/name, such that autocompletion doesn't try to do history but you still get generic complete on phones -->
  78. <textarea data-id="input" type="text" placeholder="Message" rows="1"></textarea>
  79. <input type="submit" value="Send!">
  80. </form>
  81. <div id="typing-indicator">
  82. <b id="typing-indicator-name"></b>
  83. <span id="typing-indicator-status"></span>
  84. </div>
  85. </div>
  86. </div>
  87. <div id="chat-user-list-pane" class="pane">
  88. <div class="pane-scroller">
  89. <div id="chat-user-list"></div>
  90. </div>
  91. </div>
  92. </div>
  93. <div id="modal-screen">
  94. <div id="modal-content">
  95. </div>
  96. </div>
  97. <div id="login-screen">
  98. <div id="login-content">
  99. <h1>Sapphire</h1>
  100. <p id="login-status"></p>
  101. <form id="login-form">
  102. <label><span>Username:</span> <input id="username" type="text" required></label>
  103. <label><span>Password:</span> <input id="password" type="password" required></label>
  104. <input type="submit" value="Login">
  105. </form>
  106. </div>
  107. </div>
  108. <script>window.BASE_HOST = window.location.protocol === "file:" ? "localhost" : window.location.hostname;</script>
  109. <script src="vendor/hogan-3.0.1.js"></script>
  110. <script src="vendor/emoji.js"></script>
  111. <script src="vendor/countries-rev.js"></script>
  112. <script src="vendor/otr/bigint.js"></script>
  113. <script src="vendor/otr/crypto.js"></script>
  114. <script src="vendor/otr/eventemitter.js"></script>
  115. <script src="vendor/otr/otr.js"></script>
  116. <script src="src/emoji-emoticon-to-unicode.js"></script>
  117. <script src="src/emojify.js"></script>
  118. <script src="src/emoji-font.js"></script>
  119. <script src="src/templates.js"></script>
  120. <script src="src/password.js"></script>
  121. <script src="src/backend.js"></script>
  122. <script src="src/avatar.js"></script>
  123. <script src="src/linkify.js"></script>
  124. <script src="src/sanitize.js"></script>
  125. <script src="src/main.js"></script>
  126. </body>
  127. </html>