source: trunk/grails-app/taglib/AssetTreeTagLib.groovy @ 306

Last change on this file since 306 was 306, checked in by gav, 14 years ago

Move asset tree/overview to an overlay pane.

File size: 21.8 KB
Line 
1/**
2* Asset Tree tags.
3* Specific to gnumims hence the namespace.
4*/
5class AssetTreeTagLib {
6    static namespace = 'gnuMims'
7
8    def resources = { attrs ->
9        ///@todo: should include our javascript and do setup here.
10    }
11
12    def assetTreeButton = {
13        def mkp = new groovy.xml.MarkupBuilder(out) //this line will be unnecessary in versions of Grails after version 1.2
14
15        mkp.div(class: "tree_button") {
16            a(href: showPane()) {
17                img(src: treeRootImg())
18            }
19        }
20    } // mkp
21
22    def assetTree = { attrs ->
23
24        def sites = Site.list()
25
26        def divIdCount = 0
27        def divId = ''
28        def nextDivId = {
29            divIdCount++
30            divId = 'assetTreeBranch'+divIdCount
31        }
32
33        def mkp = new groovy.xml.MarkupBuilder(out) //this line will be unnecessary in versions of Grails after version 1.2
34
35
36        /// @todo: use a loop for the subItem levels.
37        mkp.div(class: 'overlayPane', id: 'assetTreePane', style: 'display:none;') {
38            div(class: 'tree') {
39                table() {
40                    tr() {
41                        td( valign: 'top', class: 'value') {
42                            ul() {
43                                img(src: treeRootImg(), alt: 'TreeRoot')
44                                for(site in sites.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
45                                    li() {
46                                        if(site.sections) {
47                                            a(href: toggleBranch(nextDivId()) ) {
48                                                img( src: bulletTreePlusImg(), id: divId+'img' )
49                                            }
50                                        }
51                                        else
52                                            img(src: dashImg())
53                                        a( href: siteShowLink(site.id) ) {
54                                            yieldUnescaped( site.encodeAsHTML() )
55                                        }
56                                        a(href: sectionCreateLink(site.id)) {
57                                            img(src: addImg(), alt: 'Add', title: 'Add Section')
58                                        }
59                                    }
60                                    if(site.sections) {
61                                        div(id: divId, style: 'display:none;') {
62                                            ul() {
63                                                for(section in site.sections.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
64                                                    li() {
65                                                        if(section.assets) {
66                                                            a(href: toggleBranch(nextDivId()) ) {
67                                                                img(src: bulletTreePlusImg(), id: divId+'img' )
68                                                            }
69                                                        }
70                                                        else
71                                                            img(src: dashImg())
72                                                        a( href: sectionShowLink(section.id) ) {
73                                                            yieldUnescaped( section.encodeAsHTML() )
74                                                        }
75                                                        a(href: assetCreateLink(section.id)) {
76                                                            img(src: addImg(), alt: 'Add', title: 'Add Asset')
77                                                        }
78                                                    }
79
80                                                    if(section.assets) {
81                                                        div(id: divId, style: 'display:none;') {
82                                                            ul() {
83                                                                for(asset in section.assets.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
84                                                                    li() {
85                                                                        if(asset.assetSubItems) {
86                                                                            a(href: toggleBranch(nextDivId()) ) {
87                                                                                img(src: bulletTreePlusImg(), id: divId+'img' )
88                                                                            }
89                                                                        }
90                                                                        else
91                                                                            img(src: dashImg())
92                                                                        a( href: assetShowLink(asset.id) ) {
93                                                                            yieldUnescaped( asset.encodeAsHTML() )
94                                                                        }
95                                                                        a(href: assetSubItemCreateLink(asset.id)) {
96                                                                            img(src: addImg(), alt: 'Add', title: 'Add Sub Item')
97                                                                        }
98                                                                        a(href: assetCopyLink(asset.id)) {
99                                                                            img(src: copyImg(), alt: 'Add', title: 'Copy Asset')
100                                                                        }
101                                                                    } // li
102
103                                                                    if(asset.assetSubItems) {
104                                                                        div(id: divId, style: 'display:none;') {
105                                                                            ul() {
106                                                                                for(assetSubItemL1 in asset.assetSubItems.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
107                                                                                    li() {
108                                                                                        if(assetSubItemL1.subItems) {
109                                                                                            a(href: toggleBranch(nextDivId()) ) {
110                                                                                                img(src: bulletTreePlusImg(), id: divId+'img' )
111                                                                                            }
112                                                                                        }
113                                                                                        else
114                                                                                            img(src: dashImg())
115                                                                                        a( href: assetSubItemShowLink(assetSubItemL1.id) ) {
116                                                                                            yieldUnescaped( assetSubItemL1.encodeAsHTML() )
117                                                                                        }
118                                                                                        a(href: assetSubItemCreateWithParentLink(assetSubItemL1.id)) {
119                                                                                            img(src: addImg(), alt: 'Add', title: 'Add Sub Item')
120                                                                                        }
121                                                                                    } // li
122
123                                                                                    if(assetSubItemL1.subItems) {
124                                                                                        div(id: divId, style: 'display:none;') {
125                                                                                            ul() {
126                                                                                                for(assetSubItemL2 in assetSubItemL1.subItems.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
127                                                                                                    li() {
128                                                                                                        if(assetSubItemL2.subItems) {
129                                                                                                            a(href: toggleBranch(nextDivId()) ) {
130                                                                                                                img( src: bulletTreePlusImg(), id: divId+'img' )
131                                                                                                            }
132                                                                                                        }
133                                                                                                        else
134                                                                                                            img(src: dashImg())
135                                                                                                        a( href: assetSubItemShowLink(assetSubItemL2.id) ) {
136                                                                                                            yieldUnescaped( assetSubItemL2.encodeAsHTML() )
137                                                                                                        }
138                                                                                                        a(href: assetSubItemCreateWithParentLink(assetSubItemL2.id)) {
139                                                                                                            img(src: addImg(), alt: 'Add', title: 'Add Sub Item')
140                                                                                                        }
141                                                                                                    } // li
142
143                                                                                                    if(assetSubItemL2.subItems) {
144                                                                                                        div(id: divId, style: 'display:none;') {
145                                                                                                            ul() {
146                                                                                                                for(assetSubItemL3 in assetSubItemL2.subItems.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
147                                                                                                                    li() {
148                                                                                                                        if(assetSubItemL3.subItems) {
149                                                                                                                            a(href: toggleBranch(nextDivId()) ) {
150                                                                                                                                img( src: bulletTreePlusImg(), id: divId+'img' )
151                                                                                                                            }
152                                                                                                                        }
153                                                                                                                        else
154                                                                                                                            img(src: dashImg())
155                                                                                                                        a( href: assetSubItemShowLink(assetSubItemL3.id) ) {
156                                                                                                                            yieldUnescaped( assetSubItemL3.encodeAsHTML() )
157                                                                                                                        }
158                                                                                                                        a(href: assetSubItemCreateWithParentLink(assetSubItemL3.id)) {
159                                                                                                                            img(src: addImg(), alt: 'Add', title: 'Add Sub Item')
160                                                                                                                        }
161                                                                                                                    } // li
162
163                                                                                                                    if(assetSubItemL3.subItems) {
164                                                                                                                        div(id: divId, style: 'display:none;') {
165                                                                                                                            ul() {
166                                                                                                                                for(assetSubItemL4 in assetSubItemL3.subItems.sort { p1, p2 -> p1.name.compareToIgnoreCase(p2.name) }) {
167                                                                                                                                    li() {
168                //                                                                                                                         if(assetSubItemL4.subItems) {
169                //                                                                                                                             a(href: toggleBranch(nextDivId()) ) {
170                //                                                                                                                                 img( src: bulletTreePlusImg(), id: divId+'img' )
171                //                                                                                                                             }
172                //                                                                                                                         }
173                //                                                                                                                         else
174                                                                                                                                        img(src: dashImg())
175                                                                                                                                        a( href: assetSubItemShowLink(assetSubItemL4.id) ) {
176                                                                                                                                            yieldUnescaped( assetSubItemL4.encodeAsHTML() )
177                                                                                                                                        }
178                //                                                                                                                         a(href: assetSubItemCreateWithParentLink(assetSubItemL4.id)) {
179                //                                                                                                                             img(src: addImg(), alt: 'Add', title: 'Add Sub Item')
180                //                                                                                                                         }
181                                                                                                                                    } // li
182
183                                                                                                                                } // assetSubItemL4
184                                                                                                                            } // ul
185                                                                                                                        } // div
186                                                                                                                    } // if(assetSubItemL3.subItems)
187
188
189                                                                                                                } // assetSubItemL3
190                                                                                                            } // ul
191                                                                                                        } // div
192                                                                                                    } // if(assetSubItemL2.subItems)
193
194                                                                                                } // assetSubItemL2
195                                                                                            } // ul
196                                                                                        } // div
197                                                                                    } // if(assetSubItemL1.subItems)
198
199                                                                                } // assetSubItemL1
200                                                                            } // ul
201                                                                        } // div
202                                                                    } // if(asset.assetSubItems)
203
204                                                                } // assets
205                                                            } // ul
206                                                        } // div
207                                                    } // if(section.assets)
208
209                                                } //sections
210                                            } // ul
211                                        } // div
212                                    } // if(site.sections)
213                                } // sites
214                            } // ul
215                        } // td
216                    } // tr
217                } // table
218            } // div
219
220            div( class: 'buttons') {
221                span(class: 'button') {
222                    input(type: 'button', value: 'Close', onclick: 'return hideElement("assetTreePane");')
223                }
224            }
225
226        } // mkp
227
228    } // assetTree
229
230
231
232    /** Imgs */
233
234    def treeRootImg() {
235        resource(dir:'images/skin',file:'chart_organisation.png').toString()
236    }
237    def addImg() {
238        resource(dir:'images/skin',file:'database_add.png').toString()
239    }
240    def copyImg() {
241        resource(dir:'images/skin',file:'page_copy.png').toString()
242    }
243    def bulletTreePlusImg() {
244        resource(dir:'images/skin',file:'bullet_tree_plus.png').toString()
245    }
246    // actually set in javascript function.
247    def bulletTreeMinusImg() {
248        resource(dir:'images/skin',file:'bullet_tree_minus.png').toString()
249    }
250    def dashImg() {
251        resource(dir:'images/skin',file:'hline_short.png').toString()
252    }
253
254    /** js calls */
255
256    def showPane() {
257       'javascript: showDiv(\"assetTreePane\");'
258    }
259
260    def toggleBranch(divId) {
261        /// @todo: toggleBranch is in overlayPane.js and should be moved to tree.js
262       'javascript: toggleBranch(\"' + divId + '\", \"' + divId + 'img' +'\", \"' + bulletTreeMinusImg() +'\", \"' + bulletTreePlusImg() + '\");'
263    }
264
265    /** Links */
266
267    def siteShowLink(id) {
268        createLink(controller: 'siteDetailed', action: 'show', params: ['id': id] ).toString()
269    }
270
271    def siteEditLink(id) {
272        createLink(controller: 'siteDetailed', action: 'edit', params: ['id': id] ).toString()
273    }
274
275    def sectionCreateLink(siteId) {
276        createLink(controller: 'sectionDetailed', action: 'create', params: ['site.id': siteId] ).toString()
277    }
278
279    def sectionShowLink(id) {
280        createLink(controller: 'sectionDetailed', action: 'show', params: ['id': id] ).toString()
281    }
282
283    def sectionEditLink(id) {
284        createLink(controller: 'sectionDetailed', action: 'edit', params: ['id': id] ).toString()
285    }
286
287    def assetCreateLink(sectionId) {
288        createLink(controller: 'assetDetailed', action: 'create', params: ['section.id': sectionId] ).toString()
289    }
290
291    def assetShowLink(id) {
292        createLink(controller: 'assetDetailed', action: 'show', id: id ).toString()
293    }
294
295    def assetEditLink(id) {
296        createLink(controller: 'assetDetailed', action: 'edit', id: id ).toString()
297    }
298
299    def assetCopyLink(id) {
300        createLink(controller: 'assetDetailed', action: 'copy', params: ['assetToCopy.id': id] ).toString()
301    }
302
303    def assetSubItemCreateLink(assetId) {
304        createLink(controller: 'assetSubItemDetailed', action: 'create', params: ['asset.id': assetId] ).toString()
305    }
306
307    def assetSubItemCreateWithParentLink(parentItemId) {
308        createLink(controller: 'assetSubItemDetailed', action: 'create', params: ['parentItem.id': parentItemId] ).toString()
309    }
310
311    def assetSubItemShowLink(id) {
312        createLink(controller: 'assetSubItemDetailed', action: 'show', params: ['id': id] ).toString()
313    }
314
315    def assetSubItemEditLink(id) {
316        createLink(controller: 'assetSubItemDetailed', action: 'edit', params: ['id': id] ).toString()
317    }
318
319} // end class
Note: See TracBrowser for help on using the repository browser.