blob: e12184764eeef2b807d42bd08682a663b310f20f [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.
define([
"backbone",
"plugins/backbone.layoutmanager"
],
function (Backbone, LayoutManager) {
var FauxtonAPI = {
//add default objects
router: {
navigate: function () {}
},
masterLayout: {},
addNotification: function () {},
config: function (options) {
return _.extend(this, options);
}
};
FauxtonAPI.Deferred = function () {
return $.Deferred();
};
FauxtonAPI.when = function (deferreds) {
if (deferreds instanceof Array) {
return $.when.apply(null, deferreds);
}
return $.when(deferreds);
};
FauxtonAPI.addonExtensions = {
initialize: function () {},
RouteObjects: {},
Views: {}
};
FauxtonAPI.addon = function (extra) {
return _.extend(_.clone(FauxtonAPI.addonExtensions), extra);
};
FauxtonAPI.View = Backbone.View.extend({
// This should return an array of promises, an empty array, or null
establish: function () {
return null;
},
loaderClassname: 'loader',
manage: true,
disableLoader: false,
forceRender: function () {
this.hasRendered = false;
}
});
var caching = {
fetchOnce: function (opt) {
var options = _.extend({}, opt);
if (!this._deferred || this._deferred.state() === "rejected" || options.forceFetch ) {
this._deferred = this.fetch();
}
return this._deferred;
}
};
FauxtonAPI.Model = Backbone.Model.extend({ });
FauxtonAPI.Collection = Backbone.Collection.extend({ });
_.each([FauxtonAPI.Model, FauxtonAPI.Collection], function (ctor) {
_.extend(ctor.prototype, caching);
});
var extensions = _.extend({}, Backbone.Events);
// Can look at a remove function later.
FauxtonAPI.registerExtension = function (name, view) {
if (!extensions[name]) {
extensions[name] = [];
}
extensions.trigger('add:' + name, view);
extensions[name].push(view);
};
FauxtonAPI.unRegisterExtension = function (name) {
var views = extensions[name];
if (!views) { return; }
extensions.trigger('remove:' + name, views);
delete extensions[name];
};
FauxtonAPI.getExtensions = function (name) {
var views = extensions[name];
if (!views) {
views = [];
}
return views;
};
FauxtonAPI.removeExtensionItem = function (name, view, cb) {
var views = extensions[name];
if (!views) { return; }
var _cb = arguments[arguments.length - 1];
if (_.isObject(view) && !cb) {
_cb = function (item) { return _.isEqual(item, view);};
}
views = _.filter(views, function (item) {
return !_cb(item);
});
extensions[name] = views;
extensions.trigger('removeItem:' + name, view);
};
FauxtonAPI.extensions = extensions;
FauxtonAPI.setSession = function (newSession) {
FauxtonAPI.session = newSession;
return FauxtonAPI.session.fetchUser();
};
return FauxtonAPI;
});