blob: 7927397d94aeff17e87ac7d98631e7654ac1bf6d [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 FauxtonAPI from "./base";
import Router from "./router";
import RouteObject from "./routeObject";
import utils from "./utils";
import Store from "./store";
import constants from "../constants";
import dispatcher from "./dispatcher";
import $ from "jquery";
import Backbone from "backbone";
import _ from "lodash";
import Promise from "bluebird";
Backbone.$ = $;
Backbone.ajax = function () {
return Backbone.$.ajax.apply(Backbone.$, arguments);
};
Object.assign(FauxtonAPI, {
Router,
RouteObject,
utils,
Store,
dispatcher,
Promise,
Events: _.extend({}, Backbone.Events)
});
// Pass along all constants
FauxtonAPI.constants = constants;
FauxtonAPI.dispatch = dispatcher.dispatch;
FauxtonAPI.navigate = function (url, _opts) {
var options = _.extend({trigger: true}, _opts);
FauxtonAPI.router.navigate(url, options);
if (options.trigger) {
FauxtonAPI.router.trigger('trigger-update');
}
};
FauxtonAPI.beforeUnload = function () {
FauxtonAPI.router.beforeUnload.apply(FauxtonAPI.router, arguments);
};
FauxtonAPI.removeBeforeUnload = function () {
FauxtonAPI.router.removeBeforeUnload.apply(FauxtonAPI.router, arguments);
};
FauxtonAPI.addRoute = function (route) {
FauxtonAPI.router.route(route.route, route.name, route.callback);
};
var urlPaths = {};
FauxtonAPI.registerUrls = function (namespace, urls) {
urlPaths[namespace] = urls;
};
FauxtonAPI.url = {
encode(name = "") {
// These special caracters are allowed by couch: _, $, (, ), +, -, and /
// From them only $ + and / are to be escaped in a URI component.
return (/[$+/]/g.test(name)) ? encodeURIComponent(name) : name;
},
decode(name = "") {
return (/[$+/]/g.test(name)) ? decodeURIComponent(name) : name;
}
};
//This is a little rough and needs some improvement. But the basic concept is there
FauxtonAPI.urls = function (name, context) {
var interceptors = FauxtonAPI.getExtensions('urls:interceptors');
var url;
var args = arguments;
_.find(interceptors, function (interceptor) {
var out = interceptor.apply(null, args);
if (out) {
url = out;
return true;
}
return false;
});
if (!_.isUndefined(url)) { return url; }
if (!urlPaths[name]) {
console.error('could not find name ', name);
return '';
}
if (!urlPaths[name][context]) {
console.error('could not find context ', context);
return '';
}
args = Array.prototype.slice.call(arguments, 2);
url = urlPaths[name][context].apply(null, args);
return url;
};
// out-the-box Fauxton has only Views, but scripts extending Fauxton may introduce others (search indexes, geospatial
// indexes, etc). This returns an array of the special design doc property names for the index types
FauxtonAPI.getIndexTypePropNames = function () {
var indexTypes = FauxtonAPI.getExtensions('IndexTypes:propNames');
indexTypes.push('views');
return indexTypes;
};
export default FauxtonAPI;