Skip to content

Commit 3d9c02a

Browse files
wxiaoguanglunny
andauthored
Update frontend guideline (#19901)
* update frontend guideline * "Native" => "Vanilla JS", fix typo comma. Co-authored-by: Lunny Xiao <[email protected]>
1 parent c48706e commit 3d9c02a

File tree

1 file changed

+21
-11
lines changed

1 file changed

+21
-11
lines changed

docs/content/doc/developers/guidelines-frontend.md

+21-11
Original file line numberDiff line numberDiff line change
@@ -27,9 +27,9 @@ The HTML pages are rendered by [Go HTML Template](https://pkg.go.dev/html/templa
2727

2828
The source files can be found in the following directories:
2929
* **Less styles:** `web_src/less/`
30-
* **Javascript files:** `web_src/js/`
31-
* **Vue layouts:** `web_src/js/components/`
32-
* **HTML templates:** `templates/`
30+
* **JavaScript files:** `web_src/js/`
31+
* **Vue components:** `web_src/js/components/`
32+
* **Go HTML templates:** `templates/`
3333

3434
## General Guidelines
3535

@@ -40,24 +40,29 @@ We recommend [Google HTML/CSS Style Guide](https://google.github.io/styleguide/h
4040
1. Every feature (Fomantic-UI/jQuery module) should be put in separate files/directories.
4141
2. HTML ids and classes should use kebab-case.
4242
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.
43-
4. jQuery events across different features should use their own namespaces.
44-
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.
43+
4. jQuery events across different features could use their own namespaces if there are potential conflicts.
44+
5. CSS styling for classes provided by frameworks should not be overwritten. Always use new class-names with 2-3 feature related keywords to overwrite framework styles.
4545
6. The backend can pass complex data to the frontend by using `ctx.PageData["myModuleData"] = map[]{}`
4646
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).
4747

4848

4949
### Framework Usage
5050

51-
Mixing different frameworks together is highly discouraged. A JavaScript module should follow one major framework and follow the framework's best practice.
51+
Mixing different frameworks together is discouraged, it makes the code difficult to be maintained.
52+
A JavaScript module should follow one major framework and follow the framework's best practice.
5253

5354
Recommended implementations:
54-
* Vue + Native
55+
* Vue + Vanilla JS
5556
* Fomantic-UI (jQuery)
56-
* Native only
57+
* Vanilla JS
5758

5859
Discouraged implementations:
59-
* Vue + jQuery
60-
* jQuery + Native
60+
* Vue + Fomantic-UI (jQuery)
61+
* jQuery + Vanilla JS
62+
63+
To make UI consistent, Vue components can use Fomantic-UI CSS classes.
64+
Although mixing different frameworks is discouraged,
65+
it should also work if the mixing is necessary and the code is well-designed and maintainable.
6166

6267
### `async` Functions
6368

@@ -75,7 +80,8 @@ Some lint rules and IDEs also have warnings if the returned Promise is not handl
7580

7681
### HTML Attributes and `dataset`
7782

78-
We forbid `dataset` usage, its camel-casing behaviour makes it hard to grep for attributes. However there are still some special cases, so the current guideline is:
83+
The usage of `dataset` is forbidden, its camel-casing behaviour makes it hard to grep for attributes.
84+
However, there are still some special cases, so the current guideline is:
7985

8086
* For legacy code:
8187
* `$.data()` should be refactored to `$.attr()`.
@@ -86,6 +92,10 @@ We forbid `dataset` usage, its camel-casing behaviour makes it hard to grep for
8692
* never bind any user data to a DOM node, use a suitable design pattern to describe the relation between node and data.
8793

8894

95+
### Legacy Code
96+
97+
A lot of legacy code already existed before this document's written. It's recommended to refactor legacy code to follow the guidelines.
98+
8999
### Vue2/Vue3 and JSX
90100

91101
Gitea is using Vue2 now, we plan to upgrade to Vue3. We decided not to introduce JSX to keep the HTML and the JavaScript code separated.

0 commit comments

Comments
 (0)