| SLIVER_API = "/plstackapi/slivers/"; |
| SLICE_API = "/plstackapi/slices/"; |
| NODE_API = "/plstackapi/nodes/"; |
| SITE_API = "/plstackapi/sites/"; |
| USER_API = "/plstackapi/users/"; |
| DEPLOYMENT_API = "/plstackapi/deployments"; |
| |
| XOSModel = Backbone.Model.extend({ |
| /* from backbone-tastypie.js */ |
| idAttribute: 'resource_uri', |
| |
| /* from backbone-tastypie.js */ |
| url: function() { |
| // Use the id if possible |
| var url = this.id; |
| |
| // If there's no idAttribute, try to have the collection construct a url. Fallback to 'urlRoot'. |
| if ( !url ) { |
| url = this.collection && ( _.isFunction( this.collection.url ) ? this.collection.url() : this.collection.url ); |
| console.log(url); |
| url = url || this.urlRoot; |
| } |
| |
| url && ( url += ( url.length > 0 && url.charAt( url.length - 1 ) === '/' ) ? '' : '/' ); |
| |
| url && ( url += "?no_hyperlinks=1" ); |
| |
| return url; |
| }, |
| }); |
| |
| XOSCollection = Backbone.Collection.extend({ |
| objects: function() { |
| return this.models.map(function(element) { return element.attributes; }); |
| }, |
| |
| maybeFetch: function(options){ |
| // Helper function to fetch only if this collection has not been fetched before. |
| if(this._fetched){ |
| // If this has already been fetched, call the success, if it exists |
| options.success && options.success(); |
| console.log("alreadyFetched"); |
| return; |
| } |
| |
| // when the original success function completes mark this collection as fetched |
| var self = this, |
| successWrapper = function(success){ |
| return function(){ |
| self._fetched = true; |
| success && success.apply(this, arguments); |
| }; |
| }; |
| options.success = successWrapper(options.success); |
| console.log("call fetch"); |
| this.fetch(options); |
| }, |
| |
| getOrFetch: function(id, options){ |
| // Helper function to use this collection as a cache for models on the server |
| var model = this.get(id); |
| |
| if(model){ |
| options.success && options.success(model); |
| return; |
| } |
| |
| model = new this.model({ |
| resource_uri: id |
| }); |
| |
| model.fetch(options); |
| }, |
| |
| /* from backbone-tastypie.js */ |
| url: function( models ) { |
| var url = this.urlRoot || ( models && models.length && models[0].urlRoot ); |
| url && ( url += ( url.length > 0 && url.charAt( url.length - 1 ) === '/' ) ? '' : '/' ); |
| |
| // Build a url to retrieve a set of models. This assume the last part of each model's idAttribute |
| // (set to 'resource_uri') contains the model's id. |
| if ( models && models.length ) { |
| var ids = _.map( models, function( model ) { |
| var parts = _.compact( model.id.split('/') ); |
| return parts[ parts.length - 1 ]; |
| }); |
| url += 'set/' + ids.join(';') + '/'; |
| } |
| |
| url && ( url += "?no_hyperlinks=1" ); |
| |
| return url; |
| }, |
| }); |
| |
| function xoslib() { |
| this.sliver = XOSModel.extend({ urlRoot: SLIVER_API }); |
| this.sliverCollection = XOSCollection.extend({ urlRoot: SLIVER_API, |
| model: this.sliver}); |
| this.slivers = new this.sliverCollection(); |
| |
| this.slice = XOSModel.extend({ urlRoot: SLICE_API }); |
| this.sliceCollection = XOSCollection.extend({ urlRoot: SLICE_API, |
| model: this.slice}); |
| this.slices = new this.sliceCollection(); |
| |
| this.node = XOSModel.extend({ urlRoot: NODE_API }); |
| this.nodeCollection = XOSCollection.extend({ urlRoot: NODE_API, |
| model: this.node}); |
| this.nodes = new this.nodeCollection(); |
| |
| this.site = XOSModel.extend({ urlRoot: SITE_API }); |
| this.siteCollection = XOSCollection.extend({ urlRoot: SITE_API, |
| model: this.site}); |
| this.sites = new this.siteCollection(); |
| |
| this.user = XOSModel.extend({ urlRoot: USER_API }); |
| this.userCollection = XOSCollection.extend({ urlRoot: USER_API, |
| model: this.user}); |
| this.users = new this.userCollection(); |
| |
| this.deployment = XOSModel.extend({ urlRoot: DEPLOYMENT_API }); |
| this.deploymentCollection = XOSCollection.extend({ urlRoot: DEPLOYMENT_API, |
| model: this.deployment}); |
| this.deployments = new this.deploymentCollection(); |
| }; |
| |
| xos = new xoslib(); |
| |