Mirror of Quill
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.

224 lines
8.7 KiB

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <title>Quill Editor</title>
  5. <meta charset="utf-8">
  6. <link rel="pingback" href="https://webmention.io/aaronpk/xmlrpc" />
  7. <link rel="webmention" href="https://webmention.io/aaronpk/webmention" />
  8. <meta name="apple-mobile-web-app-capable" content="yes" />
  9. <!-- standard viewport tag to set the viewport to the device's width
  10. , Android 2.3 devices need this so 100% width works properly and
  11. doesn't allow children to blow up the viewport width-->
  12. <meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" />
  13. <!-- width=device-width causes the iPhone 5 to letterbox the app, so
  14. we want to exclude it for iPhone 5 to allow full screen apps -->
  15. <meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1" media="(device-height: 568px)" />
  16. <link rel="stylesheet" href="/editor-files/medium-editor/css/medium-editor.min.css">
  17. <link rel="stylesheet" href="/editor-files/medium-editor/css/themes/default.min.css">
  18. <link rel="stylesheet" href="/editor-files/medium-editor/css/medium-editor-insert-plugin.min.css">
  19. <link rel="stylesheet" href="/editor-files/medium-editor/css/medium-editor-insert-plugin-frontend.min.css">
  20. <link href="/editor-files/font-awesome/css/font-awesome.css" rel="stylesheet">
  21. <script src="/editor-files/jquery-1.11.3.min.js"></script>
  22. <script src="/editor-files/jquery-ui-1.11.4.custom/jquery-ui.min.js"></script>
  23. <script src="/editor-files/jquery.fileupload.js"></script>
  24. <script src="/editor-files/jquery.iframetransport.js"></script>
  25. <script src="/editor-files/handlebars.min.js"></script>
  26. <script src="/editor-files/medium-editor/js/medium-editor.min.js"></script>
  27. <script src="/editor-files/medium-editor/js/medium-editor-insert-plugin.min.js"></script>
  28. <script src="/libs/localforage.js"></script>
  29. <script src="/libs/tokenfield/bootstrap-tokenfield.min.js"></script>
  30. <link rel="stylesheet" href="/libs/tokenfield/bootstrap-tokenfield.min.css">
  31. <link rel="stylesheet" href="/libs/tokenfield/tokenfield-typeahead.min.css">
  32. <link rel="stylesheet" href="/editor-files/style.css">
  33. <link rel="apple-touch-icon" sizes="57x57" href="/images/quill-icon-57.png">
  34. <link rel="apple-touch-icon" sizes="72x72" href="/images/quill-icon-72.png">
  35. <link rel="apple-touch-icon" sizes="114x114" href="/images/quill-icon-114.png">
  36. <link rel="apple-touch-icon" sizes="144x144" href="/images/quill-icon-144.png">
  37. <link rel="icon" href="/favicon.ico" type="image/x-icon">
  38. </head>
  39. <body>
  40. <div class="toolbar">
  41. <div class="toolbar-left">
  42. <span class="item"><a href="/"><img src="/editor-files/quill-logo-36.png" width="36" height="31" class="logo"></a></span>
  43. <?= partial('partials/header') ?>
  44. <?php if($this->user): ?>
  45. <span class="item text"><b><?= display_url($this->user->url) ?></b></span>
  46. <?php endif; ?>
  47. <span class="item text"><span id="draft-status">Draft</span></span>
  48. </div>
  49. <div class="toolbar-right">
  50. <button class="btn" id="publish_btn">Publish <i class="fa fa-caret-down"></i></button>
  51. <button class="btn" id="new_btn">New</button>
  52. </div>
  53. <div class="clear"></div>
  54. </div>
  55. <div class="micropub-html-warning hidden"><div>
  56. <button class="btn btn-default" id="micropub-html-btn">Upgrade me!</button>
  57. <b>Upcoming change!</b>
  58. The Micropub spec now requires HTML content be sent as a nested object, <code>content[html]=&lt;b&gt;example&lt;/b&gt;</code>.
  59. You can <a href="http://indiewebcamp.com/Micropub-brainstorming#HTML_Escaping">read more about the change here</a>.
  60. When you are ready to receive the content as an object, click the button to switch.
  61. </div></div>
  62. <div class="publish-dropdown hidden">
  63. <div class="arrow"></div>
  64. <div class="dropdown-content action-publish">
  65. <div style="float:right"><button class="btn btn-medium" id="publish-confirm">Publish Now</button></div>
  66. <div style="clear:right; margin-bottom: 4px;"></div>
  67. <table id="publish-fields">
  68. <tr>
  69. <td>Tags:</td>
  70. <td><input type="text" class="form-field-small" placeholder="" id="post-tags"></td>
  71. </tr>
  72. <tr>
  73. <td>Slug:</td>
  74. <td><input type="text" class="form-field-small" id="post-slug"></td>
  75. </tr>
  76. <tr>
  77. <td>Status:</td>
  78. <td>
  79. <select id="post-status" class="form-select-small">
  80. <option value="published">Published</option>
  81. <option value="draft">Draft</option>
  82. </select>
  83. <a href="/docs/post-status" class="small hidden" target="_blank" id="published-status-warning">read this first!</a>
  84. </td>
  85. </tr>
  86. <tr>
  87. <td>Syndication:</td>
  88. <td>
  89. <select id="post-syndicate" class="form-select-small">
  90. <option value="no">No</option>
  91. <option value="yes">Yes</option>
  92. </select>
  93. </td>
  94. </tr>
  95. <tr class="form-group">
  96. <td>
  97. <label for="note_syndicate-to"><a href="javascript:reload_syndications()">Reload</a></label></td>
  98. <td id="syndication-container">
  99. <?php
  100. if($this->syndication_targets) {
  101. echo '<ul>';
  102. foreach($this->syndication_targets as $syn) {
  103. echo '<li>'
  104. . '<button data-syndicate-to="'.(isset($syn['uid']) ? htmlspecialchars($syn['uid']) : htmlspecialchars($syn['target'])).'" class="btn btn-default btn-block">'
  105. . ($syn['favicon'] ? '<img src="'.htmlspecialchars($syn['favicon']).'" width="16" height="16"> ' : '')
  106. . htmlspecialchars($syn['target'])
  107. . '</button>'
  108. . '</li>';
  109. }
  110. echo '</ul>';
  111. }
  112. ?>
  113. </td>
  114. </tr>
  115. <tr>
  116. <td>Publish:</td>
  117. <td><input type="text" class="form-field-small" id="post-publish-date" value="now" placeholder="YYYY-MM-DD hh:mm:ss"></td>
  118. </tr>
  119. </table>
  120. <div class="helptext hidden" id="publish-in-progress">
  121. Posting... <!-- TODO replace this with a CSS animated spinner -->
  122. </div>
  123. <div class="helptext hidden" id="publish-success">
  124. <div><a href="" id="publish-success-url">View your post</a></div>
  125. </div>
  126. <div class="helptext hidden" id="publish-error">
  127. <div>Something went wrong! Below is the response from your Micropub endpoint.</div><br>
  128. <pre id="publish-error-debug"></pre>
  129. </div>
  130. </div>
  131. <div class="dropdown-content action-signin hidden">
  132. <div class="helptext">You need to sign in before you can publish! Don't worry, your draft will still be here when you finish signing in.</div>
  133. <input type="url" class="form-field-small" placeholder="yourdomain.com" id="signin-domain">
  134. <button class="btn btn-small" id="signin-btn">Sign In</button>
  135. <div class="helptext small"><a href="/docs">How does this work?</a></div>
  136. </div>
  137. </div>
  138. <div class="container">
  139. <input id="post-name" type="text" value="" placeholder="Title">
  140. <input id="post-description" type="text" value="" placeholder="Description">
  141. <input id="post-image" type="text" value="" placeholder="Banner Image">
  142. <div id="content" class="editable"></div>
  143. </div>
  144. <script src="/editor-files/editor.js"></script>
  145. <script>
  146. $(function(){
  147. <?php if(!Config::$twitterClientID): ?>
  148. $.getJSON("/auth/twitter", function(data){
  149. // Check if we're already authorized with twitter
  150. if(data && data.result == 'ok') {
  151. $("#twitter-button").val("Connected").addClass("btn-success");
  152. } else if(data && data.url) {
  153. $("#twitter-button").val("Sign In").data("url", data.url).addClass("btn-warning");
  154. } else {
  155. $("#twitter-button").val("Error").addClass("btn-danger");
  156. }
  157. });
  158. $("#twitter-button").click(function(){
  159. if($(this).data('url')) {
  160. window.location = $(this).data('url');
  161. } else {
  162. $.getJSON("/auth/twitter", {login: 1}, function(data){
  163. window.location = data.url;
  164. });
  165. }
  166. });
  167. <?php endif ?>
  168. $("#send-html-content").click(function(){
  169. var enabled = $(this).attr("checked") == "checked";
  170. $.post("/settings/save", {
  171. html_content: (enabled ? 1 : 0)
  172. });
  173. });
  174. $("#save-slug-field").click(function(){
  175. $.post("/settings/save", {
  176. slug_field: $("#slug-field-name").val()
  177. });
  178. });
  179. $("#save-syndicate-to-field").click(function(){
  180. $.post("/settings/save", {
  181. syndicate_field: $("#syndicate-to-field-name").val()
  182. });
  183. });
  184. $("#reset-login").click(function(){
  185. $.post("/auth/reset", function(){
  186. window.location = "/";
  187. });
  188. });
  189. });
  190. <?= partial('partials/syndication-js') ?>
  191. </script>
  192. </body>
  193. </html>