[2] | 1 | <% _=n_ %> |
---|
| 2 | ## Render the dataset `data` as history item, using `hid` as the displayed id |
---|
| 3 | <%def name="render_dataset( data, hid, show_deleted_on_refresh = False, for_editing = True )"> |
---|
| 4 | <a name="${trans.security.encode_id( data.id )}"></a> |
---|
| 5 | <% |
---|
| 6 | if data.state in ['no state','',None]: |
---|
| 7 | data_state = "queued" |
---|
| 8 | else: |
---|
| 9 | data_state = data.state |
---|
| 10 | current_user_roles = trans.get_current_user_roles() |
---|
| 11 | %> |
---|
| 12 | %if not trans.user_is_admin() and not trans.app.security_agent.can_access_dataset( current_user_roles, data.dataset ): |
---|
| 13 | <div class="historyItemWrapper historyItem historyItem-${data_state} historyItem-noPermission" id="historyItem-${data.id}"> |
---|
| 14 | %else: |
---|
| 15 | <div class="historyItemWrapper historyItem historyItem-${data_state}" id="historyItem-${data.id}"> |
---|
| 16 | %endif |
---|
| 17 | |
---|
| 18 | %if data.deleted: |
---|
| 19 | <div class="warningmessagesmall"> |
---|
| 20 | <strong>This dataset has been deleted. Click <a href="${h.url_for( controller='dataset', action='undelete', id=data.id )}" class="historyItemUndelete" id="historyItemUndeleter-${data.id}" target="galaxy_history">here</a> to undelete.</strong> |
---|
| 21 | </div> |
---|
| 22 | %endif |
---|
| 23 | |
---|
| 24 | %if data.visible is False: |
---|
| 25 | <div class="warningmessagesmall"> |
---|
| 26 | <strong>This dataset has been hidden. Click <a href="${h.url_for( controller='dataset', action='unhide', id=data.id )}" class="historyItemUnhide" id="historyItemUnhider-${data.id}" target="galaxy_history">here</a> to unhide.</strong> |
---|
| 27 | </div> |
---|
| 28 | %endif |
---|
| 29 | |
---|
| 30 | |
---|
| 31 | ## Header row for history items (name, state, action buttons) |
---|
| 32 | <div style="overflow: hidden;" class="historyItemTitleBar"> |
---|
| 33 | <div class="historyItemButtons"> |
---|
| 34 | %if data_state == "upload": |
---|
| 35 | ## TODO: Make these CSS, just adding a "disabled" class to the normal |
---|
| 36 | ## links should be enough. However the number of datasets being uploaded |
---|
| 37 | ## at a time is usually small so the impact of these images is also small. |
---|
| 38 | <img title='Display Data' class='icon-button display_disabled' /> |
---|
| 39 | %if for_editing: |
---|
| 40 | <img title='Edit Attributes' class='icon-button edit_disabled' /> |
---|
| 41 | %endif |
---|
| 42 | %else: |
---|
| 43 | <% |
---|
| 44 | dataset_id = trans.security.encode_id( data.id ) |
---|
| 45 | if for_editing: |
---|
| 46 | display_url = h.url_for( controller='dataset', action='display', dataset_id=dataset_id, preview=True, filename='' ) |
---|
| 47 | else: |
---|
| 48 | # Get URL for display only. |
---|
| 49 | if data.history.user and data.history.user.username: |
---|
| 50 | display_url = h.url_for( controller='dataset', action='display_by_username_and_slug', |
---|
| 51 | username=data.history.user.username, slug=dataset_id ) |
---|
| 52 | else: |
---|
| 53 | # HACK: revert to for_editing display URL when there is no user/username. This should only happen when |
---|
| 54 | # there's no user/username because dataset is being displayed by history/view after error reported. |
---|
| 55 | # There are no security concerns here because both dataset/display and dataset/display_by_username_and_slug |
---|
| 56 | # check user permissions (to the same degree) before displaying. |
---|
| 57 | display_url = h.url_for( controller='dataset', action='display', dataset_id=dataset_id, preview=True, filename='' ) |
---|
| 58 | %> |
---|
| 59 | <a class="icon-button display tooltip" title="Display data in browser" href="${display_url}" |
---|
| 60 | %if for_editing: |
---|
| 61 | target="galaxy_main" |
---|
| 62 | %endif |
---|
| 63 | ></a> |
---|
| 64 | %if for_editing: |
---|
| 65 | <a class="icon-button edit tooltip" title="Edit attributes" href="${h.url_for( controller='root', action='edit', id=data.id )}" target="galaxy_main"></a> |
---|
| 66 | %endif |
---|
| 67 | %endif |
---|
| 68 | %if for_editing: |
---|
| 69 | <a class="icon-button delete tooltip" title="Delete" href="${h.url_for( action='delete', id=data.id, show_deleted_on_refresh=show_deleted_on_refresh )}" id="historyItemDeleter-${data.id}"></a> |
---|
| 70 | %endif |
---|
| 71 | </div> |
---|
| 72 | <span class="state-icon"></span> |
---|
| 73 | <span class="historyItemTitle">${hid}: ${data.display_name()}</span> |
---|
| 74 | </div> |
---|
| 75 | |
---|
| 76 | ## Body for history items, extra info and actions, data "peek" |
---|
| 77 | |
---|
| 78 | <div id="info${data.id}" class="historyItemBody"> |
---|
| 79 | %if not trans.user_is_admin() and not trans.app.security_agent.can_access_dataset( current_user_roles, data.dataset ): |
---|
| 80 | <div>You do not have permission to view this dataset.</div> |
---|
| 81 | %elif data_state == "upload": |
---|
| 82 | <div>Dataset is uploading</div> |
---|
| 83 | %elif data_state == "queued": |
---|
| 84 | <div>${_('Job is waiting to run')}</div> |
---|
| 85 | %elif data_state == "running": |
---|
| 86 | <div>${_('Job is currently running')}</div> |
---|
| 87 | %elif data_state == "error": |
---|
| 88 | <div> |
---|
| 89 | An error occurred running this job: <i>${data.display_info().strip()}</i> |
---|
| 90 | </div> |
---|
| 91 | <div> |
---|
| 92 | <a href="${h.url_for( controller='dataset', action='errors', id=data.id )}" target="galaxy_main" title="View or report this error" class="icon-button bug tooltip"></a> |
---|
| 93 | <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a> |
---|
| 94 | </div> |
---|
| 95 | %elif data_state == "discarded": |
---|
| 96 | <div> |
---|
| 97 | The job creating this dataset was cancelled before completion. |
---|
| 98 | </div> |
---|
| 99 | %elif data_state == 'setting_metadata': |
---|
| 100 | <div>${_('Metadata is being Auto-Detected.')}</div> |
---|
| 101 | %elif data_state == "empty": |
---|
| 102 | <div>${_('No data: ')}<i>${data.display_info()}</i></div> |
---|
| 103 | %elif data_state in [ "ok", "failed_metadata" ]: |
---|
| 104 | %if data_state == "failed_metadata": |
---|
| 105 | <div class="warningmessagesmall" style="margin: 4px 0 4px 0"> |
---|
| 106 | An error occurred setting the metadata for this dataset. You may be able to <a href="${h.url_for( controller='root', action='edit', id=data.id )}" target="galaxy_main">set it manually or retry auto-detection</a>. |
---|
| 107 | </div> |
---|
| 108 | %endif |
---|
| 109 | <div> |
---|
| 110 | ${data.blurb}, |
---|
| 111 | format: <span class="${data.ext}">${data.ext}</span>, |
---|
| 112 | database: |
---|
| 113 | %if data.dbkey == '?': |
---|
| 114 | <a href="${h.url_for( controller='root', action='edit', id=data.id )}" target="galaxy_main">${_(data.dbkey)}</a> |
---|
| 115 | %else: |
---|
| 116 | <span class="${data.dbkey}">${_(data.dbkey)}</span> |
---|
| 117 | %endif |
---|
| 118 | </div> |
---|
| 119 | <div class="info">${_('Info: ')}${data.display_info()}</div> |
---|
| 120 | <div> |
---|
| 121 | <% dataset_id=trans.security.encode_id( data.id ) %> |
---|
| 122 | %if data.has_data(): |
---|
| 123 | <a href="${h.url_for( controller='dataset', action='display', dataset_id=dataset_id, to_ext=data.ext )}" title="Save" class="icon-button disk tooltip"></a> |
---|
| 124 | %if for_editing: |
---|
| 125 | <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a> |
---|
| 126 | %if app.config.get_bool( 'enable_tracks', False ) and data.ext in app.datatypes_registry.get_available_tracks(): |
---|
| 127 | <a data-url="${h.url_for( controller='tracks', action='list_tracks' )}" class="icon-button vis-chart tooltip trackster-add" |
---|
| 128 | action-url="${h.url_for( controller='tracks', action='browser', dataset_id=dataset_id)}" |
---|
| 129 | new-url="${h.url_for( controller='tracks', action='index', dataset_id=dataset_id, default_dbkey=data.dbkey)}" title="Visualize in Trackster"></a> |
---|
| 130 | %endif |
---|
| 131 | %if trans.user: |
---|
| 132 | <div style="float: right"> |
---|
| 133 | <a href="${h.url_for( controller='tag', action='retag', item_class=data.__class__.__name__, item_id=dataset_id )}" target="galaxy_main" title="Edit dataset tags" class="icon-button tags tooltip"></a> |
---|
| 134 | <a href="${h.url_for( controller='dataset', action='annotate', id=dataset_id )}" target="galaxy_main" title="Edit dataset annotation" class="icon-button annotate tooltip"></a> |
---|
| 135 | </div> |
---|
| 136 | <div style="clear: both"></div> |
---|
| 137 | <div class="tag-area" style="display: none"> |
---|
| 138 | <strong>Tags:</strong> |
---|
| 139 | <div class="tag-elt"></div> |
---|
| 140 | </div> |
---|
| 141 | <div id="${dataset_id}-annotation-area" class="annotation-area" style="display: none"> |
---|
| 142 | <strong>Annotation:</strong> |
---|
| 143 | <div id="${dataset_id}-annotation-elt" style="margin: 1px 0px 1px 0px" class="annotation-elt tooltip editable-text" title="Edit dataset annotation"></div> |
---|
| 144 | </div> |
---|
| 145 | |
---|
| 146 | %endif |
---|
| 147 | %else: |
---|
| 148 | ## When displaying datasets for viewing, this is often needed to prevent peek from overlapping |
---|
| 149 | ## icons. |
---|
| 150 | <div style="clear: both"></div> |
---|
| 151 | %endif |
---|
| 152 | <div style="clear: both"></div> |
---|
| 153 | %for display_app in data.datatype.get_display_types(): |
---|
| 154 | <% target_frame, display_links = data.datatype.get_display_links( data, display_app, app, request.base ) %> |
---|
| 155 | %if len( display_links ) > 0: |
---|
| 156 | | ${data.datatype.get_display_label(display_app)} |
---|
| 157 | %for display_name, display_link in display_links: |
---|
| 158 | <a target="${target_frame}" href="${display_link}">${_(display_name)}</a> |
---|
| 159 | %endfor |
---|
| 160 | %endif |
---|
| 161 | %endfor |
---|
| 162 | %for display_app in data.get_display_applications( trans ).itervalues(): |
---|
| 163 | | ${display_app.name} |
---|
| 164 | %for link_app in display_app.links.itervalues(): |
---|
| 165 | <a target="${link_app.url.get( 'target_frame', '_blank' )}" href="${link_app.get_display_url( data, trans )}">${_(link_app.name)}</a> |
---|
| 166 | %endfor |
---|
| 167 | %endfor |
---|
| 168 | %elif for_editing: |
---|
| 169 | <a href="${h.url_for( controller='tool_runner', action='rerun', id=data.id )}" target="galaxy_main" title="Run this job again" class="icon-button arrow-circle tooltip"></a> |
---|
| 170 | %endif |
---|
| 171 | |
---|
| 172 | </div> |
---|
| 173 | %if data.peek != "no peek": |
---|
| 174 | <div><pre id="peek${data.id}" class="peek">${_(data.display_peek())}</pre></div> |
---|
| 175 | %endif |
---|
| 176 | %else: |
---|
| 177 | <div>${_('Error: unknown dataset state "%s".') % data_state}</div> |
---|
| 178 | %endif |
---|
| 179 | |
---|
| 180 | ## Recurse for child datasets |
---|
| 181 | |
---|
| 182 | %if len( data.children ) > 0: |
---|
| 183 | ## FIXME: This should not be in the template, there should |
---|
| 184 | ## be a 'visible_children' method on dataset. |
---|
| 185 | <% |
---|
| 186 | children = [] |
---|
| 187 | for child in data.children: |
---|
| 188 | if child.visible: |
---|
| 189 | children.append( child ) |
---|
| 190 | %> |
---|
| 191 | %if len( children ) > 0: |
---|
| 192 | <div> |
---|
| 193 | There are ${len( children )} secondary datasets. |
---|
| 194 | %for idx, child in enumerate(children): |
---|
| 195 | ${render_dataset( child, idx + 1, show_deleted_on_refresh = show_deleted_on_refresh )} |
---|
| 196 | %endfor |
---|
| 197 | </div> |
---|
| 198 | %endif |
---|
| 199 | %endif |
---|
| 200 | |
---|
| 201 | <div style="clear: both;"></div> |
---|
| 202 | |
---|
| 203 | </div> |
---|
| 204 | |
---|
| 205 | |
---|
| 206 | </div> |
---|
| 207 | |
---|
| 208 | </%def> |
---|