root/galaxy-central/templates/display_base.mako @ 2

リビジョン 2, 13.7 KB (コミッタ: hatakeyama, 14 年 前)

import galaxy-central

行番号 
1<%!
2        def inherit( context ):
3            if context.get('no_panels'):
4                return '/base.mako'
5            else:
6                return '/webapps/galaxy/base_panels.mako'
7       
8        from galaxy.model import History, StoredWorkflow, Page
9        from galaxy.web.framework.helpers import iff
10%>
11<%inherit file="${inherit( context )}"/>
12<%namespace file="/tagging_common.mako" import="render_individual_tagging_element, render_community_tagging_element" />
13<%namespace file="/display_common.mako" import="*" />
14
15##
16## Functions used by base.mako and base_panels.mako to display content.
17##
18
19<%def name="title()">
20    Galaxy | ${iff( item.published, "Published ", iff( item.importable , "Accessible ", iff( item.users_shared_with, "Shared ", "Private " ) ) ) + get_class_display_name( item.__class__ )} | ${get_item_name( item ) | h}
21</%def>
22
23<%def name="init()">
24<%
25        self.has_left_panel=False
26        self.has_right_panel=True
27        self.message_box_visible=False
28        self.active_view="shared"
29        self.overlay_visible=False
30%>
31</%def>
32
33<%def name="javascripts()">
34    ${parent.javascripts()}
35    ${h.js( "jquery", "jquery.tipsy", "galaxy.base", "json2", "class", "jquery.jstore", "jquery.autocomplete", "jquery.rating", "autocomplete_tagging", "trackster" )}
36
37    <script type="text/javascript">
38       
39        // Handle click on community tag.
40        function community_tag_click(tag_name, tag_value) {
41            <% controller_name = get_controller_name( item ) %>
42            var href = '${h.url_for ( controller='/' + controller_name , action='list_published')}';
43            href = href + "?f-tags=" + tag_name;
44            if (tag_value != undefined && tag_value != "") {
45                href = href + ":" + tag_value;
46            }
47            self.location = href;
48        }
49       
50        // Map item rating to number of stars to show.
51        function map_rating_to_num_stars(rating) {
52            if (rating <= 0)
53                return 0;
54            else if (rating > 0 && rating <= 1.5)
55                return 1;
56            else if (rating > 1.5 && rating <= 2.5)
57                return 2;
58            else if (rating > 2.5 && rating <= 3.5)
59                return 3;
60            else if (rating > 3.5 && rating <= 4.5)
61                return 4;
62            else if (rating > 4.5)
63                return 5;
64        }
65       
66        // Init. on document load.
67        $(function() {
68            // Set links to Galaxy screencasts to open in overlay.
69            $(this).find("a[href^='http://screencast.g2.bx.psu.edu/']").each( function() {
70                $(this).click( function() {
71                    var href = $(this).attr('href');
72                    show_in_overlay(
73                        {
74                            url: href,       
75                            width: 640,
76                            height: 480,
77                            scroll: 'no' 
78                        }
79                    );
80                    return false;
81                });
82            });
83           
84            // Init history boxes.
85            init_history_items( $("div.historyItemWrapper"), false, "nochanges" );
86           
87            // Init user item rating.
88            $('.user_rating_star').rating({
89                callback: function(rating, link) {
90                    $.ajax({
91                        type: "GET",
92                        url: "${h.url_for ( controller='/' + controller_name , action='rate_async' )}",
93                        data: { id : "${trans.security.encode_id( item.id )}", rating : rating },
94                        dataType: 'json',
95                        error: function() { alert( "Rating submission failed" ); },
96                        success: function( community_data ) {
97                            $('#rating_feedback').show();
98                            $('#num_ratings').text(Math.round(community_data[1]*10)/10);
99                            $('#ave_rating').text(community_data[0]);
100                            $('.community_rating_star').rating('readOnly', false);
101                            $('.community_rating_star').rating('select', map_rating_to_num_stars(community_data[0])-1);
102                            $('.community_rating_star').rating('readOnly', true);
103                        }
104                    });
105                },
106                required: true // Hide cancel button.
107            });
108        });   
109    </script>
110</%def>
111
112<%def name="stylesheets()">
113    ${parent.stylesheets()}
114    ${h.css( "autocomplete_tagging", "embed_item", "trackster", "jquery.rating" )}
115   
116    <style type="text/css">
117        .page-body {
118            padding: 10px;
119            ## float: left;
120            ## width: 65%;
121        }
122        .page-meta {
123            float: right;
124            width: 27%;
125            padding: 0.5em;
126            margin: 0.25em;
127            vertical-align: text-top;
128            border: 2px solid #DDDDDD;
129            border-top: 4px solid #DDDDDD;
130        }
131       
132        ## Make sure that history items and workflow steps do not get too long.
133        .historyItemContainer, .toolForm {
134            max-width: 500px;
135        }
136       
137        ## Space out tool forms in workflows.
138        div.toolForm{
139            margin-top: 10px;
140            margin-bottom: 10px;
141        }
142       
143        ## Add border to history item container.
144        .historyItemContainer {
145            padding-right: 3px;
146            border-right-style: solid;
147            border-right-color: #66AA66;
148        }
149    </style>
150</%def>
151
152<%def name="render_item_links( item )">
153    ## Override.
154</%def>
155
156<%def name="render_item_header( item )">
157    <h3>Galaxy ${get_class_display_name( item.__class__ )} '${get_item_name( item )| h}'</h3>
158    %if hasattr( item, "annotation") and item.annotation is not None:
159        <div class="annotation">Annotation: ${item.annotation}</div>
160    %endif
161    <hr/>
162</%def>
163
164<%def name="render_item( item, item_data=None )">
165    ## Override.
166</%def>
167
168## For base.mako
169<%def name="body()">
170        ${self.render_content()}
171</%def>
172
173## For base_panels.mako
174<%def name="center_panel()">
175        ${self.render_content()}
176</%def>
177
178
179##
180## Render page content. Pages that inherit this page should override render_item_links() and render_item()
181##
182<%def name="render_content()">
183   
184    ## Get URL to other published items owned by user that owns this item.
185    <%
186        ##TODO: is there a better way to create this URL? Can't use 'f-username' as a key b/c it's not a valid identifier.
187        controller_name = get_controller_name( item )
188        item_plural = get_item_plural( item )
189        href_to_all_items = h.url_for( controller='/' + controller_name, action='list_published')
190        href_to_user_items = h.url_for( controller='/' + controller_name, action='list_published', xxx=item.user.username)
191        href_to_user_items = href_to_user_items.replace( 'xxx', 'f-username')
192    %>
193   
194    <div class="unified-panel-header" unselectable="on">
195                <div class="unified-panel-header-inner">
196                %if item.published:   
197                        <a href="${href_to_all_items}">Published ${item_plural}</a> |
198                        <a href="${href_to_user_items}">${item.user.username}</a>
199                %elif item.importable:
200                                Accessible ${get_class_display_name( item.__class__ )}
201                        %elif item.users_shared_with:
202                                Shared ${get_class_display_name( item.__class__ )}
203                        %else:
204                                Private ${get_class_display_name( item.__class__ )}
205                %endif
206                        | ${get_item_name( item )}
207            </div>
208    </div>
209   
210    <div class="unified-panel-body">
211        <div style="overflow: auto; height: 100%;">       
212            <div class="page-body">
213                <div style="float: right">
214                    ${self.render_item_links( item )}
215                </div>
216                <div>
217                    ${self.render_item_header( item )}
218                </div>
219               
220                ${self.render_item( item, item_data )}
221            </div>
222       
223
224        </div>
225    </div>
226</%def>
227
228<%def name="right_panel()">
229
230    <%
231        ## FIXME: duplicated from above for now
232        controller_name = get_controller_name( item )
233        item_plural = get_item_plural( item )
234        href_to_all_items = h.url_for( controller='/' + controller_name, action='list_published')
235        href_to_user_items = h.url_for( controller='/' + controller_name, action='list_published', xxx=item.user.username)
236        href_to_user_items = href_to_user_items.replace( 'xxx', 'f-username')
237    %>
238
239    <div class="unified-panel-header" unselectable="on">
240        <div class="unified-panel-header-inner">
241            About this ${get_class_display_name( item.__class__ )}
242        </div>
243    </div>
244   
245    <div class="unified-panel-body">
246        <div style="overflow: auto; height: 100%;">
247            <div style="padding: 10px;">
248           
249                <div style="float: right;"><img src="http://www.gravatar.com/avatar/${h.md5(item.user.email)}?d=identicon"></div>
250           
251                <h4>Author</h4>
252               
253                <p>${item.user.username | h}</p>
254               
255                ## Related items.
256                <h4>Related ${item_plural}</h4>
257                <p>
258                    <a href="${href_to_all_items}">All published ${item_plural.lower()}</a><br>
259                    <a href="${href_to_user_items}">Published ${item_plural.lower()} by ${item.user.username | h}</a>
260               
261                ## Rating.
262                <h4>Rating</h4>
263
264                <%
265                    label = "ratings"
266                    if num_ratings == 1:
267                        label = "rating"
268                %>
269                <div style="padding-bottom: 0.75em; float: left">
270                    Community<br>
271                    <span style="font-size:80%">
272                        (<span id="num_ratings">${num_ratings}</span> ${label},
273                         <span id="ave_rating">${"%.1f" % ave_item_rating}</span> average)
274                    <span>
275                </div>
276                <div style="float: right">
277                    <input name="star1" type="radio" class="community_rating_star star" disabled="disabled" value="1"
278                    %if ave_item_rating > 0 and ave_item_rating <= 1.5:
279                        checked="checked"
280                    %endif
281                   
282                    />
283                    <input name="star1" type="radio" class="community_rating_star star" disabled="disabled" value="2"
284                    %if ave_item_rating > 1.5 and ave_item_rating <= 2.5:
285                        checked="checked"
286                    %endif
287                    />
288                    <input name="star1" type="radio" class="community_rating_star star" disabled="disabled" value="3"
289                    %if ave_item_rating > 2.5 and ave_item_rating <= 3.5:
290                        checked="checked"
291                    %endif
292                    />
293                    <input name="star1" type="radio" class="community_rating_star star" disabled="disabled" value="4"
294                    %if ave_item_rating > 3.5 and ave_item_rating <= 4.5:
295                        checked="checked"
296                    %endif
297                    />
298                    <input name="star1" type="radio" class="community_rating_star star" disabled="disabled" value="5"
299                    %if ave_item_rating > 4.5:
300                        checked="checked"
301                    %endif
302                    />
303                </div>
304                <div style="clear: both;"></div>
305                %if trans.get_user():
306                    <div style="float: left">
307                        Yours<br><span id="rating_feedback" style="font-size:80%; display: none">(thanks!)</span>
308                    </div>
309                    <div style="float: right">
310                        <input name="star2" type="radio" class="user_rating_star" value="1"
311                        %if user_item_rating == 1:
312                            checked="checked"
313                        %endif
314                        />
315                        <input name="star2" type="radio" class="user_rating_star" value="2"
316                        %if user_item_rating == 2:
317                            checked="checked"
318                        %endif
319                        />
320                        <input name="star2" type="radio" class="user_rating_star" value="3"
321                        %if user_item_rating == 3:
322                            checked="checked"
323                        %endif
324                        />
325                        <input name="star2" type="radio" class="user_rating_star" value="4"
326                        %if user_item_rating == 4:
327                            checked="checked"
328                        %endif
329                        />
330                        <input name="star2" type="radio" class="user_rating_star" value="5"
331                        %if user_item_rating == 5:
332                            checked="checked"
333                        %endif
334                        />
335                    </div>
336                %endif
337                <div style="clear: both;"></div>
338                       
339                ## Tags.
340                <h4>Tags</h4>
341                <p>
342                ## Community tags.
343                <div>
344                    Community:
345                    ${render_community_tagging_element( tagged_item=item, tag_click_fn='community_tag_click', use_toggle_link=False )}
346                    %if len ( item.tags ) == 0:
347                        none
348                    %endif
349                </div>
350                ## Individual tags.
351                %if trans.get_user():
352                    <p>
353                    <div>
354                        Yours:
355                        ${render_individual_tagging_element( user=trans.get_user(), tagged_item=item, elt_context='view.mako', use_toggle_link=False, tag_click_fn='community_tag_click' )}
356                    </div>
357                %endif
358            </div>   
359        </div>
360    </div>
361
362</%def>
Note: リポジトリブラウザについてのヘルプは TracBrowser を参照してください。