A clean, Markdown-based publishing platform made for writers. Write together, and build a community. https://writefreely.org
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.
 
 
 
 
 

112 lines
3.2 KiB

  1. {{define "collections"}}
  2. {{template "header" .}}
  3. <div class="snug content-container">
  4. {{if .Flashes}}<ul class="errors">
  5. {{range .Flashes}}<li class="urgent">{{.}}</li>{{end}}
  6. </ul>{{end}}
  7. <h2>blogs</h2>
  8. <ul class="atoms collections">
  9. {{range $i, $el := .Collections}}<li class="collection"><h3>
  10. <a class="title" href="/{{.Alias}}/">{{if .Title}}{{.Title}}{{else}}{{.Alias}}{{end}}</a>
  11. </h3>
  12. <h4>
  13. <a class="action new-post" href="{{if $.Chorus}}/new{{else}}/{{end}}#{{.Alias}}">new post</a>
  14. <a class="action" href="/me/c/{{.Alias}}">customize</a>
  15. <a class="action" href="/me/c/{{.Alias}}/stats">stats</a>
  16. </h4>
  17. {{if .Description}}<p class="description">{{.Description}}</p>{{end}}
  18. </li>{{end}}
  19. <li id="create-collection">
  20. {{if not .NewBlogsDisabled}}
  21. <form method="POST" action="/api/collections" id="new-collection-form" onsubmit="return createCollection()">
  22. <h4>
  23. <input type="text" name="title" placeholder="Blog name" id="blog-name">
  24. <input type="hidden" name="web" value="true" />
  25. <input type="submit" value="Create" id="create-collection-btn">
  26. </h4>
  27. </form>
  28. {{end}}
  29. </li>
  30. </ul>
  31. {{if not .NewBlogsDisabled}}<p style="margin-top:0"><a id="new-collection" href="#new-collection">New blog</a></p>{{end}}
  32. </div>
  33. {{template "foot" .}}
  34. <script src="/js/h.js"></script>
  35. <script>
  36. function createCollection() {
  37. var input = He.get('blog-name');
  38. if (input.value == "") {
  39. return false;
  40. }
  41. var form = He.get('new-collection-form');
  42. var submit = He.get('create-collection-btn');
  43. submit.value = "Creating...";
  44. submit.disabled = "disabled";
  45. He.postJSON("/api/collections", {
  46. title: input.value,
  47. web: true
  48. }, function(code, data) {
  49. if (data.code == 201) {
  50. location.reload();
  51. } else {
  52. var $createColl = document.getElementById('create-collection');
  53. var $submit = $createColl.querySelector('input[type=submit]');
  54. $submit.value = "Create";
  55. $submit.disabled = "";
  56. var $err = $createColl.querySelector('.error');
  57. if (data.code == 409) {
  58. if ($err === null) {
  59. var url = He.create('span');
  60. url.className = "error";
  61. url.innerText = "This name is taken.";
  62. $createColl.appendChild(url);
  63. } else {
  64. $err.innerText = "This name is taken.";
  65. }
  66. } else {
  67. if ($err === null) {
  68. var url = He.create('span');
  69. url.className = "error";
  70. url.innerText = data.error_msg;
  71. $createColl.appendChild(url);
  72. } else {
  73. $err.innerText = "This name is taken.";
  74. }
  75. }
  76. }
  77. });
  78. return false;
  79. };
  80. (function() {
  81. H.getEl('new-collection').on('click', function(e) {
  82. e.preventDefault();
  83. var collForm = He.get('create-collection');
  84. if (collForm.style.display == '' || collForm.style.display == 'none') {
  85. // Show form
  86. this.textContent = "Cancel";
  87. collForm.style.display = 'list-item';
  88. collForm.querySelector('input[type=text]').focus();
  89. return;
  90. }
  91. // Hide form
  92. this.textContent = "New blog";
  93. collForm.style.display = 'none';
  94. });
  95. if (location.hash == '#new-collection' || location.hash == '#new') {
  96. var collForm = He.get('create-collection');
  97. collForm.style.display = 'list-item';
  98. collForm.querySelector('input[type=text]').focus();
  99. He.get('new-collection').textContent = "Cancel";
  100. }
  101. }());
  102. </script>
  103. {{template "body-end" .}}
  104. {{end}}