header.js 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. var m = require('mithril');
  2. var _dbs = require('./dbs');
  3. var _i18n = require('./i18n');
  4. var markdown = require('markdown-it')()
  5. .use(require('markdown-it-footnote'));
  6. // import * as i18next from 'i18next';
  7. // __ __ __
  8. // / / / /__ ____ _____/ /__ _____
  9. // / /_/ / _ \/ __ `/ __ / _ \/ ___/
  10. // / __ / __/ /_/ / /_/ / __/ /
  11. // /_/ /_/\___/\__,_/\__,_/\___/_/
  12. module.exports = {
  13. // onupdate(vn){
  14. // // console.log("Header onupdate : vn", vn);
  15. // },
  16. view(vn){
  17. // console.log("Header view : vn", vn);
  18. return m('header', [
  19. m('hgroup', [
  20. m('h1', 'Ethica'),
  21. m('h2', 'Spinoza (1632-1677)')
  22. ]),
  23. m('div', {'id':"menus"}, [
  24. m(_PartsNav),
  25. m(_Filters),
  26. m(_RouteMenu),
  27. m(_LangMenu)
  28. ])
  29. ]);
  30. }
  31. }
  32. // ____ __
  33. // / __ \____ ______/ /______ ____ ___ ___ ____ __ __
  34. // / /_/ / __ `/ ___/ __/ ___/ / __ `__ \/ _ \/ __ \/ / / /
  35. // / ____/ /_/ / / / /_(__ ) / / / / / / __/ / / / /_/ /
  36. // /_/ \__,_/_/ \__/____/ /_/ /_/ /_/\___/_/ /_/\__,_/
  37. var _PartsNav = {
  38. view(vn){
  39. var lang = m.route.param('lang');
  40. // console.log('partsmenu', lang);
  41. return m('nav', {id:'parts-nav'}, [
  42. // TODO: replaced labels with localized content
  43. m('h3', _i18n.t('Parts')),
  44. m('ul', _dbs.data[lang].map(function(p){
  45. // console.log("anchors, part", p);
  46. if(p.id !== "intro"){
  47. return m('li', [
  48. m('a', {'href':'#'+p.id}, m.trust(markdown.renderInline(p.title)))
  49. ]);
  50. }
  51. })
  52. )
  53. ]);
  54. }
  55. };
  56. // ___ _ _ _ __ __
  57. // | __(_) | |_ ___ _ _ ___ | \/ |___ _ _ _ _
  58. // | _|| | | _/ -_) '_(_-< | |\/| / -_) ' \ || |
  59. // |_| |_|_|\__\___|_| /__/ |_| |_\___|_||_\_,_|
  60. var _Filters = {
  61. view(vn){
  62. var lang = m.route.param('lang');
  63. return m('nav', {id:'filters'}, [
  64. m('h3', _i18n.t('Filters')),
  65. m('ul', _dbs.types[lang].map(function(p){
  66. // console.log("types", p);
  67. return m('li', [
  68. m('a', {
  69. 'href':`#filter-${p}`,
  70. 'type':`${p}`,
  71. onclick(e){
  72. // console.log('click filter btn', type);
  73. e.preventDefault();
  74. if(e.target.parentNode.classList.contains('active')){
  75. e.target.parentNode.classList.remove('active');
  76. _dbs.active_type_filter = null;
  77. }else{
  78. e.target.parentNode.classList.add('active');
  79. let type = e.target.getAttribute("type");
  80. _dbs.active_type_filter = type;
  81. }
  82. return false;
  83. }
  84. }, p)
  85. ]);
  86. })
  87. )
  88. ]);
  89. }
  90. }
  91. // ____ __
  92. // / __ \____ __ __/ /____ ____ ___ ___ ____ __ __
  93. // / /_/ / __ \/ / / / __/ _ \ / __ `__ \/ _ \/ __ \/ / / /
  94. // / _, _/ /_/ / /_/ / /_/ __/ / / / / / / __/ / / / /_/ /
  95. // /_/ |_|\____/\__,_/\__/\___/ /_/ /_/ /_/\___/_/ /_/\__,_/
  96. var _RouteMenu = {
  97. view(){
  98. var lang = m.route.param('lang');
  99. var path = m.route.get().match(/^(\/[^\/]+)(\/[^\/|#]+)(.*)$/);
  100. // console.log('Route menu Path', path);
  101. return m('nav', {id:'routes'}, [
  102. // TODO: replaced labels with localized content
  103. m('h3', _i18n.t('Mode')),
  104. m('ul', [
  105. m('li', m('a', {
  106. 'href':`/${lang}/text${path[3]}`,
  107. oncreate : m.route.link,
  108. onupdate : m.route.link
  109. }, _i18n.t("Text"))),
  110. m('li', m('a', {
  111. 'href':`/${lang}/connections${path[3]}`,
  112. oncreate : m.route.link,
  113. onupdate : m.route.link
  114. }, _i18n.t("Connections"))),
  115. ])
  116. ]);
  117. }
  118. }
  119. // __ __ ___
  120. // / / ____ _____ ____ _/ |/ /__ ____ __ __
  121. // / / / __ `/ __ \/ __ `/ /|_/ / _ \/ __ \/ / / /
  122. // / /___/ /_/ / / / / /_/ / / / / __/ / / / /_/ /
  123. // /_____/\__,_/_/ /_/\__, /_/ /_/\___/_/ /_/\__,_/
  124. // /____/
  125. var _LangMenu = {
  126. view(){
  127. var path = m.route.get().match(/^\/[^\/]+(.+)$/);
  128. // console.log('Lang menu Path', path);
  129. // create ul dom
  130. // console.log("Header _LangMenu view : i18next", i18next);
  131. return m('nav', {id:'languages'}, [
  132. // TODO: replaced labels with localized content
  133. m('h3', _i18n.t('Language')),
  134. m('ul', _dbs.langs.map(lang => {
  135. // create li dom for each lang link
  136. return m('li', m('a', {
  137. 'lang':lang.lc,
  138. 'href':`/${lang.lc}${path[1]}`,
  139. oncreate : m.route.link,
  140. onupdate : m.route.link
  141. }, lang.label)
  142. );
  143. }))
  144. ]);
  145. }
  146. }