Skip to content

Commit e59eee8

Browse files
committed
Update sample application, add Menu plugin to demonstrate how to use
1 parent c48b45f commit e59eee8

File tree

11 files changed

+382
-48
lines changed

11 files changed

+382
-48
lines changed

app/assets/stylesheets/main.css

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,8 @@ a.navbar-brand {
202202
-moz-border-radius: 0.3em;
203203
-webkit-border-radius: 0.3em;
204204
border-radius: 0.3em;
205+
padding-top: 25px;
206+
padding-bottom: 25px;
205207
}
206208

207209
.navbar li.dropdown-item a {

app/controllers/grace/demos/UrlMappings.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ class UrlMappings {
1010
}
1111

1212
"/"(view: "/index")
13+
"/about"(view:"/about")
14+
"/product"(view:"/product")
15+
"/contact"(view:"/contact")
16+
"/help"(view:"/help")
1317
"500"(view: '/error')
1418
"404"(view: '/notFound')
1519
}

app/i18n/messages.properties

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
default.doesnt.match.message=Property [{0}] of class [{1}] with value [{2}] does not match the required pattern [{3}]
2+
default.invalid.url.message=Property [{0}] of class [{1}] with value [{2}] is not a valid URL
3+
default.invalid.creditCard.message=Property [{0}] of class [{1}] with value [{2}] is not a valid credit card number
4+
default.invalid.email.message=Property [{0}] of class [{1}] with value [{2}] is not a valid e-mail address
5+
default.invalid.range.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid range from [{3}] to [{4}]
6+
default.invalid.size.message=Property [{0}] of class [{1}] with value [{2}] does not fall within the valid size range from [{3}] to [{4}]
7+
default.invalid.max.message=Property [{0}] of class [{1}] with value [{2}] exceeds maximum value [{3}]
8+
default.invalid.min.message=Property [{0}] of class [{1}] with value [{2}] is less than minimum value [{3}]
9+
default.invalid.max.size.message=Property [{0}] of class [{1}] with value [{2}] exceeds the maximum size of [{3}]
10+
default.invalid.min.size.message=Property [{0}] of class [{1}] with value [{2}] is less than the minimum size of [{3}]
11+
default.invalid.validator.message=Property [{0}] of class [{1}] with value [{2}] does not pass custom validation
12+
default.not.inlist.message=Property [{0}] of class [{1}] with value [{2}] is not contained within the list [{3}]
13+
default.blank.message=Property [{0}] of class [{1}] cannot be blank
14+
default.not.equal.message=Property [{0}] of class [{1}] with value [{2}] cannot equal [{3}]
15+
default.null.message=Property [{0}] of class [{1}] cannot be null
16+
default.not.unique.message=Property [{0}] of class [{1}] with value [{2}] must be unique
17+
18+
default.paginate.prev=Previous
19+
default.paginate.next=Next
20+
default.boolean.true=True
21+
default.boolean.false=False
22+
default.date.format=yyyy-MM-dd HH:mm:ss z
23+
default.number.format=0
24+
25+
default.created.message={0} {1} created
26+
default.updated.message={0} {1} updated
27+
default.deleted.message={0} {1} deleted
28+
default.not.deleted.message={0} {1} could not be deleted
29+
default.not.found.message={0} not found with id {1}
30+
default.optimistic.locking.failure=Another user has updated this {0} while you were editing
31+
32+
default.home.label=Home
33+
default.list.label={0} List
34+
default.add.label=Add {0}
35+
default.new.label=New {0}
36+
default.create.label=Create {0}
37+
default.show.label=Show {0}
38+
default.edit.label=Edit {0}
39+
40+
default.button.create.label=Create
41+
default.button.edit.label=Edit
42+
default.button.update.label=Update
43+
default.button.delete.label=Delete
44+
default.button.delete.confirm.message=Are you sure?
45+
46+
# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47+
typeMismatch.java.net.URL=Property {0} must be a valid URL
48+
typeMismatch.java.net.URI=Property {0} must be a valid URI
49+
typeMismatch.java.util.Date=Property {0} must be a valid Date
50+
typeMismatch.java.lang.Double=Property {0} must be a valid number
51+
typeMismatch.java.lang.Integer=Property {0} must be a valid number
52+
typeMismatch.java.lang.Long=Property {0} must be a valid number
53+
typeMismatch.java.lang.Short=Property {0} must be a valid number
54+
typeMismatch.java.math.BigDecimal=Property {0} must be a valid number
55+
typeMismatch.java.math.BigInteger=Property {0} must be a valid number
56+
typeMismatch=Property {0} is type-mismatched
57+
58+
welcome=Grace Dynamic Modules Plugin
59+
about=Grace Dynamic Modules Plugin (GDMP) offer new ways of creating modular and maintainable Grace applications.
60+
product=A Grace plugin can implement one or more plugin modules to develop and extend Grace applications.
61+
contact=We can use Dynamic Modules to maximize the use of Grace plugins and create an open, shared, and reusable plugin market.
62+
help=Getting started to use this plugin in your next application. Make your application extendable and flexible!
63+
64+
menu.about=About
65+
menu.product=Product
66+
menu.contact=Contact US
67+
menu.help=Help
68+
menu.application_status=Application Status
69+
menu.artefacts=Artefacts
70+
menu.plugins=Installed Plugins
71+
menu.languages=Languages

app/i18n/messages_zh_CN.properties

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
default.doesnt.match.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E\u8981\u6C42\u7684\u6A21\u5F0F[{3}]\u4E0D\u5339\u914D
2+
default.invalid.creditCard.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u6709\u6548\u7684\u4FE1\u7528\u5361\u53F7
3+
default.invalid.email.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684\u7535\u5B50\u90AE\u4EF6\u5730\u5740
4+
default.invalid.max.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C[{3}]\u8FD8\u5927
5+
default.invalid.max.size.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C[{3}]\u8FD8\u5927
6+
default.invalid.min.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C[{3}]\u8FD8\u5C0F
7+
default.invalid.min.size.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C[{3}]\u8FD8\u5C0F
8+
default.invalid.range.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185([{3}]\uFF5E[{4}])
9+
default.invalid.size.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u8303\u56F4\u5185([{3}]\uFF5E[{4}])
10+
default.invalid.url.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u4E2A\u5408\u6CD5\u7684URL
11+
default.invalid.validator.message=[{1}]\u7C7B\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u8FC7\u81EA\u5B9A\u4E49\u7684\u9A8C\u8BC1
12+
default.blank.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A
13+
default.not.equal.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49
14+
default.not.inlist.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u8303\u56F4\u5185
15+
default.not.unique.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u987B\u662F\u552F\u4E00\u7684
16+
default.null.message=\u7C7B[{1}]\u7684\u5C5E\u6027[{0}]\u4E0D\u80FD\u4E3A\u7A7A
17+
18+
default.paginate.next=\u4E0B\u4E00\u9875
19+
default.paginate.prev=\u4E0A\u4E00\u9875
20+
default.boolean.true=\u662F
21+
default.boolean.false=\u5426
22+
default.date.format=yyyy-MM-dd HH:mm:ss z
23+
default.number.format=0
24+
25+
default.created.message={0}(ID: {1})\u5DF2\u521B\u5EFA
26+
default.updated.message={0}(ID: {1})\u5DF2\u66F4\u65B0
27+
default.deleted.message={0}(ID: {1})\u5DF2\u5220\u9664
28+
default.not.deleted.message={0}(ID: {1})\u65E0\u6CD5\u5220\u9664
29+
default.not.found.message={1}(ID: {0})\u4E0D\u5B58\u5728
30+
default.optimistic.locking.failure=\u5F53\u524D{0}\u5DF2\u88AB\u5176\u4ED6\u7528\u6237\u4FEE\u6539\u8FC7\uFF0C\u8BF7\u5237\u65B0\u540E\u518D\u64CD\u4F5C\u3002
31+
32+
default.home.label=\u9996\u9875
33+
default.list.label={0}\u5217\u8868
34+
default.add.label=\u589E\u52A0{0}
35+
default.new.label=\u65B0\u5EFA{0}
36+
default.create.label=\u521B\u5EFA{0}
37+
default.show.label=\u67E5\u770B{0}
38+
default.edit.label=\u4FEE\u6539{0}
39+
40+
default.button.create.label=\u521B\u5EFA
41+
default.button.edit.label=\u4FEE\u6539
42+
default.button.update.label=\u66F4\u65B0
43+
default.button.delete.label=\u5220\u9664
44+
default.button.delete.confirm.message=\u786E\u5B9A\u8981\u5220\u9664\u5417\uFF1F
45+
46+
# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47+
typeMismatch.java.net.URL=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684 URL
48+
typeMismatch.java.net.URI=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684 URI
49+
typeMismatch.java.util.Date=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u65E5\u671F
50+
typeMismatch.java.lang.Double=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6570\u5B57
51+
typeMismatch.java.lang.Integer=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u6574\u6570
52+
typeMismatch.java.lang.Long=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u957F\u6574\u6570
53+
typeMismatch.java.lang.Short=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u77ED\u6574\u6570
54+
typeMismatch.java.math.BigDecimal=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u9AD8\u7CBE\u5EA6\u5C0F\u6570
55+
typeMismatch.java.math.BigInteger=\u5C5E\u6027[{0}]\u5FC5\u987B\u662F\u4E00\u4E2A\u6709\u6548\u7684\u9AD8\u7CBE\u5EA6\u6574\u6570
56+
typeMismatch=\u5C5E\u6027[{0}]\u7C7B\u578B\u4E0D\u5339\u914D
57+
58+
welcome=Grace 的动态模块化插件
59+
about=Grace Dynamic Modules Plugin (GDMP) 提供了创建模块化和可维护的 Grace 应用程序的新方法。
60+
product=Grace 插件可以实现一个或多个插件模块来开发和扩展 Grace 应用程序。
61+
contact=我们可以使用 Dynamic Modules 来最大限度地利用 Grace 插件,并创建一个开放、共享和可重用的插件市场。
62+
help=开始在下一个应用程序中使用此插件。使您的应用程序可扩展且灵活!
63+
64+
menu.about=关于
65+
menu.product=产品
66+
menu.contact=联系我们
67+
menu.help=帮助
68+
menu.application_status=应用状态
69+
menu.artefacts=工件
70+
menu.plugins=已安装插件
71+
menu.languages=语言

app/i18n/messages_zh_TW.properties

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,71 @@
1+
default.doesnt.match.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u8207\u8981\u6C42\u7684\u6A21\u5F0F[{3}]\u4E0D\u5339\u914D
2+
default.invalid.creditCard.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u500B\u6709\u6548\u7684\u4FE1\u7528\u5361\u865F
3+
default.invalid.email.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u500B\u5408\u6CD5\u7684\u96FB\u5B50\u90F5\u4EF6\u5730\u5740
4+
default.invalid.max.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C[{3}]\u9084\u5927
5+
default.invalid.max.size.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5927\u503C[{3}]\u9084\u5927
6+
default.invalid.min.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C[{3}]\u9084\u5C0F
7+
default.invalid.min.size.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u6BD4\u6700\u5C0F\u503C[{3}]\u9084\u5C0F
8+
default.invalid.range.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u7BC4\u570D\u5167([{3}]\uFF5E[{4}])
9+
default.invalid.size.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5408\u6CD5\u7684\u7BC4\u570D\u5167([{3}]\uFF5E[{4}])
10+
default.invalid.url.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u662F\u4E00\u500B\u5408\u6CD5\u7684URL
11+
default.invalid.validator.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u672A\u80FD\u901A\u904E\u81EA\u5B9A\u7FA9\u7684\u9A57\u8B49
12+
default.blank.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u4E0D\u80FD\u70BA\u7A7A
13+
default.not.equal.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0E[{3}]\u4E0D\u76F8\u7B49
14+
default.not.inlist.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u4E0D\u5728\u5217\u8868\u7684\u53D6\u503C\u7BC4\u570D
15+
default.not.unique.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u7684\u503C[{2}]\u5FC5\u9808\u662F\u552F\u4E00\u7684
16+
default.null.message=\u985E[{1}]\u7684\u5C6C\u6027[{0}]\u4E0D\u80FD\u70BA\u7A7A
17+
18+
default.paginate.next=\u4E0B\u4E00\u9801
19+
default.paginate.prev=\u4E0A\u4E00\u9801
20+
default.boolean.true=\u662F
21+
default.boolean.false=\u5426
22+
default.date.format=yyyy-MM-dd HH:mm:ss z
23+
default.number.format=0
24+
25+
default.created.message={0}(ID: {1})\u5DF2\u5275\u5EFA
26+
default.updated.message={0}(ID: {1})\u5DF2\u66F4\u65B0
27+
default.deleted.message={0}(ID: {1})\u5DF2\u522A\u9664
28+
default.not.deleted.message={0}(ID: {1})\u7121\u6CD5\u522A\u9664
29+
default.not.found.message={1}(ID: {0})\u4E0D\u5B58\u5728
30+
default.optimistic.locking.failure=\u7576\u524D{0}\u5DF2\u88AB\u5176\u4ED6\u7528\u6236\u4FEE\u6539\u904E\uFF0C\u8ACB\u5237\u65B0\u5F8C\u518D\u64CD\u4F5C\u3002
31+
32+
default.home.label=\u9996\u9801
33+
default.list.label={0}\u5217\u8868
34+
default.add.label=\u589E\u52A0{0}
35+
default.new.label=\u65B0\u5EFA{0}
36+
default.create.label=\u5275\u5EFA{0}
37+
default.show.label=\u67E5\u770B{0}
38+
default.edit.label=\u4FEE\u6539{0}
39+
40+
default.button.create.label=\u5275\u5EFA
41+
default.button.edit.label=\u4FEE\u6539
42+
default.button.update.label=\u66F4\u65B0
43+
default.button.delete.label=\u522A\u9664
44+
default.button.delete.confirm.message=\u78BA\u5B9A\u8981\u522A\u9664\u55CE\uFF1F
45+
46+
# Data binding errors. Use "typeMismatch.$className.$propertyName to customize (eg typeMismatch.Book.author)
47+
typeMismatch.java.net.URL=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684 URL
48+
typeMismatch.java.net.URI=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684 URI
49+
typeMismatch.java.util.Date=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u65E5\u671F
50+
typeMismatch.java.lang.Double=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u6578\u5B57
51+
typeMismatch.java.lang.Integer=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u6574\u6578
52+
typeMismatch.java.lang.Long=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u9577\u6574\u6578
53+
typeMismatch.java.lang.Short=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u77ED\u6574\u6578
54+
typeMismatch.java.math.BigDecimal=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u9AD8\u7CBE\u5EA6\u5C0F\u6570
55+
typeMismatch.java.math.BigInteger=\u5C6C\u6027[{0}]\u5FC5\u9808\u662F\u4E00\u500B\u6709\u6548\u7684\u9AD8\u7CBE\u5EA6\u6574\u6578
56+
typeMismatch=\u5C6C\u6027[{0}]\u985E\u578B\u4E0D\u5339\u914D
57+
58+
welcome=Grace 的動態模塊化插件
59+
about=Grace Dynamic Modules Plugin (GDMP) 提供了創建模塊化和可維護的 Grace 應用程式的新方法。
60+
product=Grace 插件可以實現一個或多個插件模塊來開發和擴展 Grace 應用程式。
61+
contact=我們可以使用 Dynamic Modules 來最大限度地利用 Grace 插件,並創建一個開放、共享和可重用的插件市場。
62+
help=開始在下一個應用程式中使用此插件。使您的應用程式可擴展且靈活!
63+
64+
menu.about=關於
65+
menu.product=產品
66+
menu.contact=聯繫我們
67+
menu.help=幫助
68+
menu.application_status=應用狀態
69+
menu.artefacts=工件
70+
menu.plugins=已安裝插件
71+
menu.languages=語言
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package grace.demos
2+
3+
import grails.plugins.*
4+
import grails.util.Environment
5+
import grails.util.GrailsUtil
6+
7+
class MenuGrailsPlugin extends DynamicPlugin {
8+
def version = "1.0.0"
9+
// the version or versions of Grails the plugin is designed for
10+
def grailsVersion = GrailsUtil.getGrailsVersion()
11+
12+
Closure doWithSpring() { {->
13+
}
14+
}
15+
16+
Closure doWithDynamicModules() { {->
17+
webSection(key: "topnav", name: "Top Navigation Bar", i18nNameKey: "top.navigation.bar")
18+
19+
webItem(key: 'about', i18nNameKey: 'menu.about', name: 'About US', section: 'topnav', description: 'This is a description') {
20+
label(key: 'menu.about')
21+
link(linkId: "about_link", url: '/about')
22+
}
23+
webItem(key: 'product', i18nNameKey: 'menu.product', name: 'Products', section: 'topnav') {
24+
label(key: 'menu.product')
25+
link(linkId: 'product_link', url: '/product')
26+
}
27+
webItem(key: 'contact', i18nNameKey: 'menu.contact', name: 'Contact', section: 'topnav') {
28+
link(linkId: 'contact_link', url: '/contact')
29+
}
30+
webItem(key: 'help', i18nNameKey: 'menu.help', name: 'Help', section: 'topnav') {
31+
link(linkId: 'help_link', url: '/help')
32+
}
33+
webSection(key: 'application_status', i18nNameKey: 'menu.application_status', name: 'Application Status', location: 'topnav')
34+
webItem(key: 'env', i18nNameKey: 'menu.application_status.env', name: "Environment: ${Environment.current.name}", section: 'application_status') {
35+
link(linkId: 'env', url: '#')
36+
}
37+
webItem(key: 'profile', i18nNameKey: 'menu.application_status.profile', name: "App profile: ${grailsApplication.config.getProperty('grails.profile')}", section: 'application_status') {
38+
link(linkId: 'profile', url: '#')
39+
}
40+
webItem(key: 'appversion', i18nNameKey: 'menu.application_status.appversion', name: "App version: ${grailsApplication.config.getProperty('info.app.version')}", section: 'application_status') {
41+
link(linkId: 'appversion', url: '#')
42+
}
43+
webItem(key: 'grailsversion', i18nNameKey: 'menu.application_status.grailsversion', name: "Grails version: ${grailsApplication.config.getProperty('info.app.grailsVersion')}", section: 'application_status') {
44+
link(linkId: 'grailsversion', url: '#')
45+
}
46+
webItem(key: 'groovyversion', i18nNameKey: 'menu.application_status.groovyversion', name: "Groovy version: ${GroovySystem.getVersion()}", section: 'application_status') {
47+
link(linkId: 'groovyversion', url: '#')
48+
}
49+
webItem(key: 'javaversion', i18nNameKey: 'menu.application_status.javaversion', name: "JVM version: ${System.getProperty('java.version')}", section: 'application_status') {
50+
link(linkId: 'javaversion', url: '#')
51+
}
52+
webItem(key: 'reloadingenabled', i18nNameKey: 'menu.application_status.reloadingenabled', name: "Reloading active: ${Environment.reloadingAgentEnabled}", section: 'application_status') {
53+
link(linkId: 'reloadingenabled', url: '#')
54+
}
55+
}}
56+
}

app/views/about.gsp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta name="layout" content="main"/>
5+
<title>About US</title>
6+
</head>
7+
<body>
8+
9+
<div id="content" role="main">
10+
<div class="container">
11+
<section class="row colset-2-its">
12+
<h1><g:message code="welcome" /></h1>
13+
14+
<p>
15+
<g:message code="about" default="About US" />
16+
</p>
17+
</section>
18+
</div>
19+
</div>
20+
21+
</body>
22+
</html>

app/views/contact.gsp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta name="layout" content="main"/>
5+
<title>Contact US</title>
6+
</head>
7+
<body>
8+
9+
<div id="content" role="main">
10+
<div class="container">
11+
<section class="row colset-2-its">
12+
<h1><g:message code="welcome" /></h1>
13+
14+
<p>
15+
<g:message code="contact" default="Contact US" />
16+
</p>
17+
</section>
18+
</div>
19+
</div>
20+
21+
</body>
22+
</html>

app/views/help.gsp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
<!doctype html>
2+
<html>
3+
<head>
4+
<meta name="layout" content="main"/>
5+
<title>Help</title>
6+
</head>
7+
<body>
8+
9+
<div id="content" role="main">
10+
<div class="container">
11+
<section class="row colset-2-its">
12+
<h1><g:message code="welcome" /></h1>
13+
14+
<p>
15+
<g:message code="help" default="Help" />
16+
</p>
17+
</section>
18+
</div>
19+
</div>
20+
21+
</body>
22+
</html>

0 commit comments

Comments
 (0)