},
onupdate: function(vnode) {
vnode.state.loader = vnode.attrs.loader
- // This activates bootstrap tooltip feature
- $(function () {
- $('[data-toggle="tooltip"]').tooltip()
- })
},
onremove: function(vnode) {
window.clearInterval(vnode.state.timer)
view: function(vnode) {
var loader = vnode.attrs.loader
var iconsMap = {
- C: m('i.fa.fa-fw.fa-archive'),
- P: m('i.fa.fa-fw.fa-folder'),
+ collections: m('i.fa.fa-fw.fa-archive'),
+ projects: m('i.fa.fa-fw.fa-folder'),
}
+ var db = new SessionDB()
+ var sessions = db.loadActive()
return m('table.table.table-condensed', [
m('thead', m('tr', [
m('th'),
])),
m('tbody', [
loader.items().map(function(item) {
+ var session = sessions[item.uuid.slice(0,5)]
+ var tokenParam = ''
+ // Add the salted token to search result links from federated
+ // remote hosts.
+ if (!session.isFromRails && session.token.indexOf('v2/') == 0) {
+ tokenParam = session.token
+ }
return m('tr', [
- m('td', [
+ m('td', m('form', {
+ action: item.workbenchBaseURL() + '/' + item.objectType.wb_path + '/' + item.uuid,
+ method: 'GET'
+ }, [
+ tokenParam !== '' &&
+ m('input[type=hidden][name=api_token]', {value: tokenParam}),
item.workbenchBaseURL() &&
- m('a.btn.btn-xs.btn-default', {
+ m('button.btn.btn-xs.btn-default[type=submit]', {
'data-original-title': 'show '+item.objectType.description,
'data-placement': 'top',
'data-toggle': 'tooltip',
- href: item.workbenchBaseURL()+'/'+item.objectType.wb_path+'/'+item.uuid,
- }, iconsMap[item.objectType.label]),
- ]),
+ // Bootstrap's tooltip feature
+ oncreate: function(vnode) { $(vnode.dom).tooltip() },
+ }, iconsMap[item.objectType.wb_path]),
+ ])),
m('td.arvados-uuid', item.uuid),
m('td', item.name || '(unnamed)'),
m('td', m(LocalizedDateTime, {parse: item.modified_at})),
window.Search = {
oninit: function(vnode) {
vnode.state.sessionDB = new SessionDB()
+ vnode.state.sessionDB.autoRedirectToHomeCluster('/search')
vnode.state.searchEntered = m.stream()
vnode.state.searchActive = m.stream()
// When searchActive changes (e.g., when restoring state
}
var searchable_objects = [
{
- wb_path: 'groups',
+ wb_path: 'projects',
api_path: 'arvados/v1/groups',
filters: [['group_class', '=', 'project']],
- label: 'P',
description: 'project',
},
{
wb_path: 'collections',
api_path: 'arvados/v1/collections',
filters: [],
- label: 'C',
description: 'collection',
},
]
children: searchable_objects.map(function(obj_type) {
return new MultipageLoader({
sessionKey: key,
- objectKind: obj_type.label,
loadFunc: function(filters) {
+ // Apply additional type dependant filters
+ filters = filters.concat(obj_type.filters)
var tsquery = to_tsquery(q)
if (tsquery) {
- filters = filters.slice(0)
filters.push(['any', '@@', tsquery])
}
- // Apply additional type dependant filters, if any.
- for (i = 0; i < obj_type.filters.length; i++) {
- filters.push(obj_type.filters[i])
- }
return vnode.state.sessionDB.request(session, obj_type.api_path, {
data: {
filters: JSON.stringify(filters),
})
},
view: function(vnode) {
- var sessions = vnode.state.sessionDB.loadAll()
return m('form', {
onsubmit: function() {
vnode.state.searchActive(vnode.state.searchEntered())