blob: 8e7f76d052d126500868b41589087ac68b03ccd1 [file] [log] [blame]
// Copyright 2015 The Vanadium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.
var urlUtil = require('url');
var qsUtil = require('querystring');
var exists = require('../lib/exists');
var store = require('../lib/store');
var log = require('../lib/log')('routes:browse');
module.exports = function(routes) {
// Url pattern: /browse/vanadiumNameSpace?glob=*&viewType=grid
routes.addRoute('/browse/:namespace?', handleBrowseRoute);
};
module.exports.createUrl = function(browseState, opts) {
var globQuery;
var viewType;
var namespace;
if (opts) {
globQuery = opts.globQuery;
viewType = opts.viewType;
namespace = opts.namespace;
}
// We preserve namespace and viewtype if they are not provided
// We reset globquery unless provided
namespace = (namespace === undefined ? browseState.namespace : namespace);
viewType = (viewType === undefined ? browseState.items.viewType : viewType);
var path = '/browse';
if (exists(namespace)) {
namespace = encodeURIComponent(namespace);
path += '/' + namespace;
}
var query = {};
if (exists(globQuery)) {
query['glob'] = globQuery;
}
if (exists(viewType)) {
query['viewtype'] = viewType;
}
return '#' + urlUtil.format({
pathname: path,
query: query
});
};
function handleBrowseRoute(state, events, params) {
// Set the page to browse
state.navigation.pageKey.set('browse');
state.viewport.title.set('Browse');
var namespace;
var globquery;
var viewtype;
if (params.namespace) {
var parsed = urlUtil.parse(params.namespace);
if (parsed.pathname) {
namespace = parsed.pathname;
}
if (parsed.query) {
var queryString = qsUtil.parse(parsed.query);
globquery = queryString.glob;
viewtype = queryString.viewtype;
}
}
// Put the URL in the store, so we know where to reload next time.
store.setValue('index', namespace).catch(function(err) {
log.warn('Unable to save last name visited', err);
});
// Trigger browse components browseNamespace event
events.browse.browseNamespace({
'namespace': namespace,
'globQuery': globquery,
'viewType': viewtype,
'subPage': 'items'
});
}