-
Notifications
You must be signed in to change notification settings - Fork 2
/
yellowgrass.app
122 lines (108 loc) · 3.25 KB
/
yellowgrass.app
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
application yellowgrass
imports templates
imports webservices
imports ac
imports auxiliary
imports features
imports issue/issue
imports user/user
imports project/project
imports user/register
imports tag/tag
imports questions/question-view
section root page
page root() {
title{"YellowGrass.org - The Tag-Based Issue Tracker"}
bmain{
gridRow{
gridCol(4){
pageHeader2{ "About YellowGrass" }
well{
par {
"YellowGrass is a tag-based issue tracker."
}
par {
"It supports issue voting, issue tagging, roadmaps, assigning and following issues, private and public projects, full text search, email updates, action logging and much more. "
"YellowGrass is fully web-based and free of charge. Registering your project is just a few clicks away. "
"Take a look at YellowGrass's " navigate(features()){"Feature List"} " or " navigate(registerUser()){"Register"} " right away."
}
}
}
gridCol(8){
pageHeader2{ "Some Active Projects" }
tableBordered {
for(p : Project in activeProjects()) {
row {
column { navigate project(p) { output(p.name) } }
column { output(p.url) }
}
}
}
par { navigate projectList() { "View all Projects" } }
}
}
gridRow{
gridCol(12){
pageHeader2{ "Recent Issues" }
par { issues(recentIssues().set(), true, false, false, 40) }
}
}
}
}
section about page
page about() {
title{"About YellowGrass"}
bmain{
pageHeader{ "About YellowGrass" }
par{ "YellowGrass is a tag-based issue tracker" }
par{
" Provide " <a href="http://yellowgrass.org/project/YellowGrass"> "Feedback " </a>
}
par{
" Powered by " <a href="http://webdsl.org">"WebDSL"</a>
}
pageHeader { "YellowGrass Source Code" }
par {
" YellowGrass is open and freely available."
" Its source code is distributed under under the " <a href="http://www.affero.org/agpl2.html">"Affero General Public License"</a> "."
}
par {
"The source code repository can be found at: " <a href="https://github.com/webdsl/yellowgrass">"https://github.com/webdsl/yellowgrass"</a>
}
pageHeader{ "Contributions" }
par{
"YellowGrass was first developed by "
<a href="http://www.sandervermolen.nl"> "Sander Vermolen" </a>
" at " <a href="http://tudelft.nl">"TU Delft"</a>
" in the MoDSE project."
}
par{
"YellowGrass is now maintained by SLDE at TU Delft"
}
"Contributions "
list{
listitem{ "Sander Vermolen" }
listitem{ "Elmer van Chastelet" }
listitem{ "Chris Melman" }
listitem{ "Danny Groenewegen" }
listitem{ "Eelco Visser" }
}
}
}
access control rules
rule page fixData(){
isAdministrator()
}
section fixData
page fixData(){
action ignore-validation setTagOrdinals(){
for(t : Tag){
if(t.name.length() > 1 && /[a-zA-Z0-9\.\-_@!]*/.match(t.name)){
t.deriveOrdinal( t.name );
}
}
}
bmain{
submit setTagOrdinals(){ "Set all tag orderString values" }
}
}