project_view.html 3.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  1. {% extends "base.html" %}
  2. {%block head%}
  3. <link rel="stylesheet" href="{{ url_for('static', filename='style/fontello.css') }}">
  4. {%endblock%}
  5. {%block title%}{{selected_project.info.name}}{%endblock%}
  6. {%block content%}
  7. <div class="content">
  8. {%- if readme %}
  9. {{readme|safe}}
  10. {%-else%}
  11. <h1>{{selected_project.info.name}}</h1>
  12. <p>
  13. Here you can find artifacts for project &quot;{{selected_project.info.name}}&quot;
  14. </p>
  15. {%-endif%}
  16. </div>
  17. <h1 class="artifacts-header">Artifacts</h1>
  18. <hr />
  19. {%-for artifact in artifacts %}
  20. <div class="artifact-item">
  21. <div class="artifact-details">
  22. <span class="artifact-id">#{{artifact.id}}</span>
  23. {%-if artifact.hash%}
  24. <a class="hash-button" href="{{selected_project.info.commit_url}}/{{artifact.hash}}">{{artifact.short_hash or artifact.hash[:8]}}</a>
  25. {%-endif%}
  26. <span class="build-date-text">Build date: <span class="build-date">{{artifact.date}}</span></span>
  27. <span class="icon-downup icon-down-open"></span>
  28. </div>
  29. <div class="artifact-contents content">
  30. <h2>Downloads</h2>
  31. <div class="artifacts-list">
  32. {%-for download_item in artifact.artifacts%}
  33. <a class="artifact-link"
  34. href="{{ url_for('download_item', project_id=selected_project.id, artifact_id=artifact.id, download_item=download_item.file)}}">{{download_item.file}}</a>
  35. <span class="artifact-desc">{{download_item.description}}</span>
  36. {%-endfor%}
  37. </div>
  38. {%- if artifact.changelog %}
  39. <h2>Changelog</h2>
  40. <div class="changelog">
  41. {{artifact.changelog|safe}}
  42. </div>
  43. {%- endif %}
  44. </div>
  45. </div>
  46. {%-endfor%}
  47. <script>
  48. function init() {
  49. let dates = document.querySelectorAll("span.build-date");
  50. for (let date of dates) {
  51. date.textContent = new Date(date.textContent).toLocaleString();
  52. }
  53. let artifacts = document.querySelectorAll("div.artifact-item");
  54. for (let artifact of artifacts) {
  55. let contents = artifact.querySelector(".artifact-contents");
  56. let details = artifact.querySelector(".artifact-details");
  57. let icon = details.querySelector(".icon-downup");
  58. if (!contents || !(contents instanceof HTMLElement))
  59. continue;
  60. details.addEventListener("click", e => {
  61. if(e.target instanceof HTMLElement && e.target.nodeName.toUpperCase() == "A")
  62. return;
  63. e.preventDefault();
  64. if (contents.classList.contains("contents-visible")) {
  65. contents.classList.remove("contents-visible");
  66. icon.classList.remove("icon-up-open");
  67. icon.classList.add("icon-down-open");
  68. }
  69. else {
  70. contents.classList.add("contents-visible");
  71. icon.classList.remove("icon-down-open");
  72. icon.classList.add("icon-up-open");
  73. }
  74. });
  75. }
  76. }
  77. init();
  78. </script>
  79. {%endblock%}