layout.njk 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. {% import './macros/icon.njk' as icon %}
  2. <!doctype html>
  3. <html lang="en">
  4. <head>
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  7. <meta name="description" content="A layout example that shows off a responsive email layout.">
  8. <title>Email &ndash; Layout Examples &ndash; Pure</title>
  9. <link rel="stylesheet" href="https://unpkg.com/purecss@2.1.0/build/pure-min.css" integrity="sha384-yHIFVG6ClnONEA5yB5DJXfW2/KC173DIQrYoZMEtBvGzmf0PKiGyNEqe9N6BNDBH" crossorigin="anonymous">
  10. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.5.1/styles/base16/gruvbox-dark-hard.min.css" integrity="sha512-kCMzrI8UyzNgyq0JVxwb17xy9nRVhwyPBSTaRC1hiOCnbMKBv9vII61ZHD4EmHpc+o0o9trcRCRAk6j5vVft8A==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  11. <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.5/codemirror.min.css" integrity="sha512-uf06llspW44/LZpHzHT6qBOIVODjWtv4MxCricRxkzvopAlSWnTf6hpZTFxuuZcuNE9CBQhqE0Seu1CoRk84nQ==" crossorigin="anonymous" referrerpolicy="no-referrer" />
  12. <link rel="preconnect" href="https://fonts.googleapis.com">
  13. <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
  14. <link href="https://fonts.googleapis.com/css2?family=Roboto+Mono:ital,wght@0,400;0,500;1,400;1,500&display=swap" rel="stylesheet">
  15. <link rel="stylesheet" href="/stylesheets/style.css">
  16. </head>
  17. <body>
  18. <div id="layout" class="content pure-g">
  19. <div id="nav" class="pure-u-1">
  20. <a href="#" id="menuLink" class="nav-menu-button">Menu</a>
  21. <div class="nav-inner">
  22. <button id="new" class="pure-button pure-button-primary">{{ icon.svg('plus-circle') }} New</button>
  23. <div class="pure-menu">
  24. <ul class="pure-menu-list">
  25. <li class="pure-menu-heading">Languages</li>
  26. {% for language in languages %}
  27. <li class="pure-menu-item{% if selected.language === language.code %} pure-active{% endif %}"><a href="/{{ language.code }}" class="pure-menu-link">{{ language.name }}</a></li>
  28. {% endfor %}
  29. </ul>
  30. </div>
  31. </div>
  32. </div>
  33. <div id="list" class="pure-u-1">
  34. {% for row in rows %}
  35. <div id="{{ row.id }}" class="item-container">
  36. <div class="item pure-g {% if row.id == selected.id %}item-selected{% endif %}">
  37. <div class="pure-u-3-4">
  38. <h4 class="subject">{{ row.title }}</h4>
  39. <p class="desc">{{ row.tags }}</p>
  40. </div>
  41. <div class="pure-u-1-4">
  42. {% if row.status == 'DRAFT' %}
  43. <div>{{ icon.svg('slash-circle') }}</div>
  44. {% elseif row.status == 'PUBLISHED' %}
  45. <div>{{ icon.svg('check2-circle') }}</div>
  46. {% elseif row.status == 'SYNCHRONIZED' %}
  47. <div>{{ icon.svg('arrow-left-right') }}</div>
  48. {% endif %}
  49. {% if row.translations_count > 1 %}
  50. <div>{{ icon.svg('translate') }}</div>
  51. {% endif %}
  52. </div>
  53. </div>
  54. </div>
  55. {% endfor %}
  56. </div>
  57. <div id="main" class="pure-u-1">
  58. {% include "./partial/view.njk" %}
  59. </div>
  60. </div>
  61. <!-- Script to make the Menu link work -->
  62. <!-- Just stripped down version of the js/ui.js script for the side-menu layout -->
  63. <script>
  64. function getElements() {
  65. return {
  66. menu: document.getElementById('nav'),
  67. menuLink: document.getElementById('menuLink')
  68. };
  69. }
  70. function toggleClass(element, className) {
  71. var classes = element.className.split(/\s+/);
  72. var length = classes.length;
  73. var i = 0;
  74. for (; i < length; i++) {
  75. if (classes[i] === className) {
  76. classes.splice(i, 1);
  77. break;
  78. }
  79. }
  80. // The className is not found
  81. if (length === classes.length) {
  82. classes.push(className);
  83. }
  84. element.className = classes.join(' ');
  85. }
  86. function toggleMenu() {
  87. var active = 'active';
  88. var elements = getElements();
  89. toggleClass(elements.menu, active);
  90. }
  91. function handleEvent(e) {
  92. var elements = getElements();
  93. if (e.target.id === elements.menuLink.id) {
  94. toggleMenu();
  95. e.preventDefault();
  96. } else if (elements.menu.className.indexOf('active') !== -1) {
  97. toggleMenu();
  98. }
  99. }
  100. document.addEventListener('DOMContentLoaded', function () {
  101. document.addEventListener('click', handleEvent);
  102. });
  103. </script>
  104. <script type="text/javascript" src="/javascripts/main.js"></script>
  105. <script id="view.js" type="text/javascript" src="/javascripts/view.js"></script>
  106. </body>
  107. </html>