blob: 05622566c8bad53f31b21bff1a20a73fbbbb0132 [file] [log] [blame]
// Licensed under the Apache License, Version 2.0 (the "License"); you may not
// use this file except in compliance with the License. You may obtain a copy of
// the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
// License for the specific language governing permissions and limitations under
// the License.
import Helpers from '../../helpers';
import FauxtonAPI from '../../core/api';
import Actions from './actions';
import SearchRoutes from './routes';
import reducers from './reducers';
import { get } from "../../core/ajax";
import Constants from './constants';
import './assets/less/search.less';
function checkSearchFeature () {
// Checks if the CouchDB server supports Search
return get(Helpers.getServerUrl("/")).then((couchdb) => {
return couchdb.features && couchdb.features.includes('search');
}).catch(() => {
return false;
});
}
function partitionUrlComponent(partitionKey) {
return partitionKey ? '/_partition/' + partitionKey : '';
}
SearchRoutes.initialize = function () {
checkSearchFeature().then(function(enabled) {
if (!enabled) return;
FauxtonAPI.registerExtension('sidebar:list', {
selector: 'indexes',
name: 'Search Indexes',
urlNamespace: 'search',
indexLabel: 'search index', // used for labels
onDelete: Actions.deleteSearchIndex,
onClone: Actions.cloneSearchIndex,
onEdit: Actions.gotoEditSearchIndexPage
});
FauxtonAPI.registerExtension('sidebar:links', {
title: "New Search Index",
url: "new_search",
icon: 'fonticon-plus-circled',
showForPartitionedDDocs: true
});
FauxtonAPI.registerExtension('sidebar:newLinks', {
url: 'new_search',
name: 'Search Index'
});
// this tells Fauxton of the new Search Index type. It's used to determine when a design doc is really empty
FauxtonAPI.registerExtension('IndexTypes:propNames', 'indexes');
FauxtonAPI.registerExtension('mango:indexTemplates', Constants.SEARCH_MANGO_INDEX_TEMPLATES);
});
};
FauxtonAPI.registerUrls('partitioned_search', {
app: function (id, partitionKey, designDoc) {
return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/';
}
});
FauxtonAPI.registerUrls('search', {
server: function (id, partitionKey, designDoc, searchName, query) {
return Helpers.getServerUrl('/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + searchName + query);
},
app: function (id, designDoc) {
return 'database/' + id + '/_design/' + designDoc + '/_search/';
},
edit: function (database, partitionKey, designDoc, indexName) {
return 'database/' + database + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + indexName + '/edit';
},
fragment: function (id, partitionKey, designDoc, search) {
return 'database/' + id + partitionUrlComponent(partitionKey) + '/_design/' + designDoc + '/_search/' + search;
},
showIndex: function (id, partitionKey, designDoc, search) {
return 'database/' + id + partitionUrlComponent(partitionKey) + '/' + designDoc + '/_search/' + search;
},
apiurl: function (id, partitionKey, designDoc, searchName, query) {
return window.location.origin + '/' + encodeURIComponent(id) + '/_design/' + encodeURIComponent(designDoc) +
'/_search/' + encodeURIComponent(searchName) + '?q=' + encodeURIComponent(query);
}
});
FauxtonAPI.addReducers({
search: reducers
});
export default SearchRoutes;