X-Git-Url: https://git.arvados.org/arvados.git/blobdiff_plain/d4de94839e7aabf550686ef3db9d43254ff2e4d7..d3973d7df59bffccb012eaff0bf1c11a23fb5a06:/apps/workbench/app/assets/javascripts/components/search.js diff --git a/apps/workbench/app/assets/javascripts/components/search.js b/apps/workbench/app/assets/javascripts/components/search.js index 0e879413ac..04572ec3cc 100644 --- a/apps/workbench/app/assets/javascripts/components/search.js +++ b/apps/workbench/app/assets/javascripts/components/search.js @@ -37,6 +37,12 @@ window.SearchResultsTable = { }, view: function(vnode) { var loader = vnode.attrs.loader + var iconsMap = { + 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'), @@ -46,14 +52,29 @@ window.SearchResultsTable = { ])), 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', { - title: 'Show '+item.objectType.description, - href: item.workbenchBaseURL()+'/'+item.objectType.wb_path+'/'+item.uuid, - }, item.objectType.label), - ]), + m('button.btn.btn-xs.btn-default[type=submit]', { + 'data-original-title': 'show '+item.objectType.description, + 'data-placement': 'top', + 'data-toggle': 'tooltip', + // 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})), @@ -83,6 +104,7 @@ window.SearchResultsTable = { 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 @@ -100,37 +122,31 @@ window.Search = { } var searchable_objects = [ { - wb_path: 'groups', + wb_path: 'projects', api_path: 'arvados/v1/groups', filters: [['group_class', '=', 'project']], - label: 'P', - description: 'Project', + description: 'project', }, { wb_path: 'collections', api_path: 'arvados/v1/collections', filters: [], - label: 'C', - description: 'Collection', + description: 'collection', }, ] return new MergingLoader({ sessionKey: key, // For every session, search for every object type - children: searchable_objects.map(function(obj_type){ + 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 (var f of obj_type.filters) { - filters.push(f) - } return vnode.state.sessionDB.request(session, obj_type.api_path, { data: { filters: JSON.stringify(filters), @@ -145,14 +161,13 @@ window.Search = { }) }, }) - }) + }), }) - }) + }), }) }) }, view: function(vnode) { - var sessions = vnode.state.sessionDB.loadAll() return m('form', { onsubmit: function() { vnode.state.searchActive(vnode.state.searchEntered())