| // 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; |