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.
 
 
 
 
 

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