footer.tmpl 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. {{/*
  2. <html>
  3. <body>
  4. <div>
  5. */}}
  6. </div>
  7. <footer>
  8. <div class="ui container">
  9. <div class="ui left">
  10. © {{Year}} {{AppName}}
  11. </div>
  12. <div class="ui right links">
  13. {{if ShowFooterTemplateLoadTime}}
  14. <span>
  15. {{.i18n.Tr "page"}}: <strong>{{LoadTimes .PageStartTime}}</strong> {{.i18n.Tr "template"}}: <strong>{{call .TmplLoadTimes}}</strong>
  16. </span>
  17. {{end}}
  18. {{if .ShowFooterBranding}}
  19. <a target="_blank" rel="noopener noreferrer" href="https://github.com/gogs/gogs"><i class="fa fa-github-square"></i><span class="sr-only">GitHub</span></a>
  20. <a target="_blank" rel="noopener noreferrer" href="https://twitter.com/GogsHQ"><i class="fa fa-twitter"></i><span class="sr-only">Twitter</span></a>
  21. <a target="_blank" rel="noopener noreferrer" href="http://weibo.com/gogschina"><i class="fa fa-weibo"></i><span class="sr-only">Sina Weibo</span></a>
  22. {{end}}
  23. <div class="ui language bottom floating slide up dropdown link item">
  24. <i class="world icon"></i>
  25. <div class="text">{{.LangName}}</div>
  26. <div class="menu">
  27. {{range .AllLangs}}
  28. <a class="item {{if eq $.Lang .Lang}}active selected{{end}}" href="{{if eq $.Lang .Lang}}#{{else}}{{$.Link}}?lang={{.Lang}}{{end}}">{{.Name}}</a>
  29. {{end}}
  30. </div>
  31. </div>
  32. <a href="/assets/librejs/librejs.html" style="display:none" data-jslicense="1">Javascript Licenses</a>
  33. <a target="_blank" rel="noopener noreferrer" href="https://gogs.io">{{.i18n.Tr "website"}}</a>
  34. </div>
  35. </div>
  36. </footer>
  37. </body>
  38. <!-- Third-party libraries -->
  39. {{if .RequireHighlightJS}}
  40. <link rel="stylesheet" href="{{AppSubURL}}/plugins/highlight-9.18.0/github.css">
  41. <script src="{{AppSubURL}}/plugins/highlight-9.18.0/highlight.pack.js"></script>
  42. <script>hljs.initHighlightingOnLoad();</script>
  43. {{end}}
  44. {{if .RequireMinicolors}}
  45. <link rel="stylesheet" href="{{AppSubURL}}/plugins/jquery.minicolors-2.2.3/jquery.minicolors.css">
  46. <script src="{{AppSubURL}}/plugins/jquery.minicolors-2.2.3/jquery.minicolors.min.js"></script>
  47. {{end}}
  48. {{if .RequireDatetimepicker}}
  49. <link rel="stylesheet" href="{{AppSubURL}}/plugins/jquery.datetimepicker-2.4.5/jquery.datetimepicker.css">
  50. <script src="{{AppSubURL}}/plugins/jquery.datetimepicker-2.4.5/jquery.datetimepicker.js"></script>
  51. {{end}}
  52. {{if .RequireDropzone}}
  53. <link rel="stylesheet" href="{{AppSubURL}}/plugins/dropzone-5.5.0/dropzone.min.css">
  54. <script src="{{AppSubURL}}/plugins/dropzone-5.5.0/dropzone.min.js"></script>
  55. <script>Dropzone.autoDiscover = false</script>
  56. {{end}}
  57. {{if .RequireAutosize}}
  58. <script src="{{AppSubURL}}/plugins/autosize-4.0.2/autosize.min.js"></script>
  59. {{end}}
  60. {{if .IsMarkdown}}
  61. <script src="{{AppSubURL}}/plugins/mermaid-11.9.0/mermaid.min.js"></script>
  62. <script>
  63. $(document).ready(function () {
  64. const deepMerge = function(target, source) {
  65. // Create a deep copy of the target to avoid modifying the original
  66. const output = { ...target };
  67. if (target && typeof target === 'object' && source && typeof source === 'object') {
  68. for (const key in source) {
  69. if (source.hasOwnProperty(key)) {
  70. if (source[key] instanceof Object && target[key] instanceof Object) {
  71. // If both are objects, recursively merge
  72. output[key] = deepMerge(target[key], source[key]);
  73. } else if (Array.isArray(source[key]) && Array.isArray(target[key])) {
  74. // If both are arrays, concatenate them
  75. output[key] = [...target[key], ...source[key]];
  76. } else {
  77. // Otherwise, overwrite with the source value
  78. output[key] = source[key];
  79. }
  80. }
  81. }
  82. }
  83. return output;
  84. };
  85. let initializeOpts = { startOnLoad: false, sequence: {noteMargin: 10}, journey: {noteMargin: 10}, timeline: {noteMargin: 10}, state: {noteMargin: 10} };
  86. if (window.MERMAID_INITIALIZE_OPTIONS) {
  87. // allow customization in inject/head.tmpl
  88. initializeOpts = deepMerge(initializeOpts, window.MERMAID_INITIALIZE_OPTIONS);
  89. }
  90. mermaid.initialize(initializeOpts);
  91. let runOpts = { querySelector: '.language-mermaid' };
  92. if (window.MERMAID_RUN_OPTIONS) {
  93. // allow customization in inject/head.tmpl
  94. runOpts = deepMerge(runOpts, window.MERMAID_RUN_OPTIONS);
  95. }
  96. mermaid.run(runOpts);
  97. });
  98. </script>
  99. {{end}}
  100. <script src="{{AppSubURL}}/js/libs/emojify-1.1.0.min.js"></script>
  101. <script src="{{AppSubURL}}/js/libs/clipboard-2.0.4.min.js"></script>
  102. {{template "inject/footer" .}}
  103. </html>