refactor PageData to pageData

pull/17301/head
wxiaoguang 3 years ago
parent b0c049427b
commit f1eb3784d0
  1. 2
      docs/content/doc/developers/guidelines-frontend.md
  2. 4
      modules/context/context.go
  3. 2
      templates/base/head.tmpl
  4. 2
      templates/repo/issue/view_content.tmpl
  5. 4
      web_src/js/components/DashboardRepoList.js
  6. 2
      web_src/js/components/RepoActivityTopAuthors.vue
  7. 2
      web_src/js/features/admin-users.js

@ -36,7 +36,7 @@ Guidelines specialized for Gitea:
3. HTML ids and classes used in JavaScript should be unique for the whole project, and should contain 2-3 feature related keywords. We recommend to use the `js-` prefix for classes that are only used in JavaScript. 3. HTML ids and classes used in JavaScript should be unique for the whole project, and should contain 2-3 feature related keywords. We recommend to use the `js-` prefix for classes that are only used in JavaScript.
4. jQuery events across different features should use their own namespaces. 4. jQuery events across different features should use their own namespaces.
5. CSS styling for classes provided by frameworks should not be overwritten. Always use new class-names to overwrite framework styles. We recommend to use the `us-` prefix for user defined styles. 5. CSS styling for classes provided by frameworks should not be overwritten. Always use new class-names to overwrite framework styles. We recommend to use the `us-` prefix for user defined styles.
6. The backend can pass complex data to the frontend by using `ctx.PageData["myModuleData"] = map{}` 6. The backend can pass complex data to the frontend by using `ctx.PageData["myModuleData"] = map[]{}`
7. Simple pages and SEO-related pages use Go HTML Template render to generate static Fomantic-UI HTML output. Complex pages can use Vue2 (or Vue3 in future). 7. Simple pages and SEO-related pages use Go HTML Template render to generate static Fomantic-UI HTML output. Complex pages can use Vue2 (or Vue3 in future).
## Legacy Problems and Solutions ## Legacy Problems and Solutions

@ -51,7 +51,7 @@ type Context struct {
Resp ResponseWriter Resp ResponseWriter
Req *http.Request Req *http.Request
Data map[string]interface{} // data used by MVC templates Data map[string]interface{} // data used by MVC templates
PageData map[string]interface{} // data used by JavaScript modules in one page PageData map[string]interface{} // data used by JavaScript modules in one page, it's `window.config.pageData`
Render Render Render Render
translation.Locale translation.Locale
Cache cache.Cache Cache cache.Cache
@ -648,7 +648,7 @@ func Contexter() func(next http.Handler) http.Handler {
"IsProd": setting.IsProd(), "IsProd": setting.IsProd(),
}, },
} }
// PageData is passed by reference, and it will be rendered to `window.config.PageData` in `head.tmpl` for JavaScript modules // PageData is passed by reference, and it will be rendered to `window.config.pageData` in `head.tmpl` for JavaScript modules
ctx.PageData = map[string]interface{}{} ctx.PageData = map[string]interface{}{}
ctx.Data["PageData"] = ctx.PageData ctx.Data["PageData"] = ctx.PageData

@ -26,7 +26,7 @@
CustomEmojis: {{CustomEmojis}}, CustomEmojis: {{CustomEmojis}},
UseServiceWorker: {{UseServiceWorker}}, UseServiceWorker: {{UseServiceWorker}},
csrf: '{{.CsrfToken}}', csrf: '{{.CsrfToken}}',
PageData: {{ .PageData }}, pageData: {{ .PageData }},
HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}}, HighlightJS: {{if .RequireHighlightJS}}true{{else}}false{{end}},
SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}}, SimpleMDE: {{if .RequireSimpleMDE}}true{{else}}false{{end}},
Tribute: {{if .RequireTribute}}true{{else}}false{{end}}, Tribute: {{if .RequireTribute}}true{{else}}false{{end}},

@ -9,7 +9,7 @@
{{end}} {{end}}
<!-- I know, there is probably a better way to do this (moved from sidebar.tmpl, original author: 6543 @ 2021-02-28) --> <!-- I know, there is probably a better way to do this (moved from sidebar.tmpl, original author: 6543 @ 2021-02-28) -->
<!-- Agree, there should be a better way, eg: introduce window.config.PageData (original author: wxiaoguang @ 2021-09-05) --> <!-- Agree, there should be a better way, eg: introduce window.config.pageData (original author: wxiaoguang @ 2021-09-05) -->
<input type="hidden" id="repolink" value="{{$.RepoRelPath}}"> <input type="hidden" id="repolink" value="{{$.RepoRelPath}}">
<input type="hidden" id="repoId" value="{{.Repository.ID}}"> <input type="hidden" id="repoId" value="{{.Repository.ID}}">
<input type="hidden" id="issueIndex" value="{{.Issue.Index}}"/> <input type="hidden" id="issueIndex" value="{{.Issue.Index}}"/>

@ -1,7 +1,7 @@
import Vue from 'vue'; import Vue from 'vue';
import {initVueSvg, vueDelimiters} from './VueComponentLoader.js'; import {initVueSvg, vueDelimiters} from './VueComponentLoader.js';
const {AppSubUrl, AssetUrlPrefix, PageData} = window.config; const {AppSubUrl, AssetUrlPrefix, pageData} = window.config;
function initVueComponents() { function initVueComponents() {
Vue.component('repo-search', { Vue.component('repo-search', {
@ -350,7 +350,7 @@ function initVueComponents() {
function initDashboardRepoList() { function initDashboardRepoList() {
const el = document.getElementById('dashboard-repo-list'); const el = document.getElementById('dashboard-repo-list');
const dashboardRepoListData = PageData.dashboardRepoList || null; const dashboardRepoListData = pageData.dashboardRepoList || null;
if (!el || !dashboardRepoListData) return; if (!el || !dashboardRepoListData) return;
initVueSvg(); initVueSvg();

@ -68,7 +68,7 @@ const sfc = {
// * home_link: (...) // * home_link: (...)
// * login: (...) // * login: (...)
// * name: (...) // * name: (...)
activityTopAuthors: window.config.PageData.repoActivityTopAuthors || [], activityTopAuthors: window.config.pageData.repoActivityTopAuthors || [],
}), }),
computed: { computed: {
graphPoints() { graphPoints() {

@ -1,5 +1,5 @@
export function initAdminUserListSearchForm() { export function initAdminUserListSearchForm() {
const searchForm = window.config.PageData.adminUserListSearchForm; const searchForm = window.config.pageData.adminUserListSearchForm;
if (!searchForm) return; if (!searchForm) return;
const $form = $('#user-list-search-form'); const $form = $('#user-list-search-form');

Loading…
Cancel
Save