modules_view.js 5.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. const { form, button, div, h2, p, section, table, tr, td, input, a, br, ul, li, span, strong } = require("../server/node_modules/hyperaxe");
  2. const { template, i18n } = require('./main_views');
  3. const { getConfig } = require('../configs/config-manager.js');
  4. const modulesView = () => {
  5. const config = getConfig().modules;
  6. const modules = [
  7. { name: 'agenda', label: i18n.modulesAgendaLabel, description: i18n.modulesAgendaDescription },
  8. { name: 'ai', label: i18n.modulesAILabel, description: i18n.modulesAIDescription },
  9. { name: 'audios', label: i18n.modulesAudiosLabel, description: i18n.modulesAudiosDescription },
  10. { name: 'bookmarks', label: i18n.modulesBookmarksLabel, description: i18n.modulesBookmarksDescription },
  11. { name: 'cipher', label: i18n.modulesCipherLabel, description: i18n.modulesCipherDescription },
  12. { name: 'docs', label: i18n.modulesDocsLabel, description: i18n.modulesDocsDescription },
  13. { name: 'events', label: i18n.modulesEventsLabel, description: i18n.modulesEventsDescription },
  14. { name: 'feed', label: i18n.modulesFeedLabel, description: i18n.modulesFeedDescription },
  15. { name: 'forum', label: i18n.modulesForumLabel, description: i18n.modulesForumDescription },
  16. { name: 'governance', label: i18n.modulesGovernanceLabel, description: i18n.modulesGovernanceDescription },
  17. { name: 'images', label: i18n.modulesImagesLabel, description: i18n.modulesImagesDescription },
  18. { name: 'invites', label: i18n.modulesInvitesLabel, description: i18n.modulesInvitesDescription },
  19. { name: 'jobs', label: i18n.modulesJobsLabel, description: i18n.modulesJobsDescription },
  20. { name: 'legacy', label: i18n.modulesLegacyLabel, description: i18n.modulesLegacyDescription },
  21. { name: 'latest', label: i18n.modulesLatestLabel, description: i18n.modulesLatestDescription },
  22. { name: 'market', label: i18n.modulesMarketLabel, description: i18n.modulesMarketDescription },
  23. { name: 'multiverse', label: i18n.modulesMultiverseLabel, description: i18n.modulesMultiverseDescription },
  24. { name: 'opinions', label: i18n.modulesOpinionsLabel, description: i18n.modulesOpinionsDescription },
  25. { name: 'pixelia', label: i18n.modulesPixeliaLabel, description: i18n.modulesPixeliaDescription },
  26. { name: 'popular', label: i18n.modulesPopularLabel, description: i18n.modulesPopularDescription },
  27. { name: 'reports', label: i18n.modulesReportsLabel, description: i18n.modulesReportsDescription },
  28. { name: 'summaries', label: i18n.modulesSummariesLabel, description: i18n.modulesSummariesDescription },
  29. { name: 'tags', label: i18n.modulesTagsLabel, description: i18n.modulesTagsDescription },
  30. { name: 'tasks', label: i18n.modulesTasksLabel, description: i18n.modulesTasksDescription },
  31. { name: 'threads', label: i18n.modulesThreadsLabel, description: i18n.modulesThreadsDescription },
  32. { name: 'transfers', label: i18n.modulesTransfersLabel, description: i18n.modulesTransfersDescription },
  33. { name: 'trending', label: i18n.modulesTrendingLabel, description: i18n.modulesTrendingDescription },
  34. { name: 'tribes', label: i18n.modulesTribesLabel, description: i18n.modulesTribesDescription },
  35. { name: 'videos', label: i18n.modulesVideosLabel, description: i18n.modulesVideosDescription },
  36. { name: 'wallet', label: i18n.modulesWalletLabel, description: i18n.modulesWalletDescription },
  37. { name: 'topics', label: i18n.modulesTopicsLabel, description: i18n.modulesTopicsDescription }
  38. ];
  39. const moduleStates = modules.reduce((acc, mod) => {
  40. acc[`${mod.name}Mod`] = config[`${mod.name}Mod`] === 'on' ? 'on' : 'off';
  41. return acc;
  42. }, {});
  43. const activeModulesCount = modules.filter(mod => moduleStates[`${mod.name}Mod`] === 'on').length;
  44. const totalModulesCount = modules.length;
  45. const disabledModulesCount = totalModulesCount - activeModulesCount;
  46. const header = div({ class: 'tags-header' },
  47. h2(i18n.modulesViewTitle),
  48. p(i18n.modulesViewDescription),
  49. div({ style: 'margin-bottom:16px;' },
  50. `${i18n.modulesTotalModulesLabel}: `,
  51. strong({ style: 'color:#888;' }, totalModulesCount),
  52. ul({ style: 'list-style-type:none; padding:0; margin:0;' },
  53. li({ style: 'font-size:18px; color:#555; margin:8px 0;' },
  54. `${i18n.modulesEnabledModulesLabel}: `,
  55. span({ style: 'color:#888;' }, activeModulesCount)
  56. ),
  57. li({ style: 'font-size:18px; color:#555; margin:8px 0;' },
  58. `${i18n.modulesDisabledModulesLabel}: `,
  59. span({ style: 'color:#888;' }, disabledModulesCount)
  60. )
  61. )
  62. )
  63. );
  64. return template(
  65. i18n.modules,
  66. section(header),
  67. section(
  68. form(
  69. { action: "/save-modules", method: "post" },
  70. table(
  71. { class: "module-table" },
  72. tr(
  73. td(i18n.modulesModuleName),
  74. td(i18n.modulesModuleDescription),
  75. td({ style: 'text-align: center;' }, i18n.modulesModuleStatus)
  76. ),
  77. modules.map(mod =>
  78. tr(
  79. td(a({ href: `/${mod.name}` }, mod.label)),
  80. td(p(mod.description)),
  81. td(
  82. input({
  83. type: "checkbox",
  84. id: `${mod.name}Mod`,
  85. name: `${mod.name}Form`,
  86. class: "input-checkbox",
  87. value: 'on',
  88. checked: moduleStates[`${mod.name}Mod`] === 'on' ? true : undefined
  89. })
  90. )
  91. )
  92. )
  93. ),
  94. div(
  95. { class: "save-button-container", style: "margin-top: 20px; text-align: center;" },
  96. button({ type: "submit", class: "submit-button" }, i18n.saveSettings)
  97. )
  98. )
  99. )
  100. );
  101. };
  102. exports.modulesView = modulesView;