Support resource and discovery URLs with or without .json extension

This commit is contained in:
zeke
2012-01-24 16:27:40 -08:00
parent 2d25217dd2
commit 54209dd341
4 changed files with 61 additions and 36 deletions

View File

@@ -62,8 +62,8 @@ function clippyCopiedCallback(a) {
} }
// Logging function that accounts for browsers that don't have window.console // Logging function that accounts for browsers that don't have window.console
function log(m) { function log() {
if (window.console) console.log(m); if (window.console) console.log.apply(console,arguments);
} }
var Docs = { var Docs = {

View File

@@ -233,12 +233,15 @@
// adeed by ayush // adeed by ayush
createAll: function(values){ createAll: function(values){
// debugger;
values = this.fromJSON(values); values = this.fromJSON(values);
// debugger;
for (var i=0, il = values.length; i < il; i++) { for (var i=0, il = values.length; i < il; i++) {
var record = values[i]; var record = values[i];
record.newRecord = false; record.newRecord = false;
record.id = record.id || Spine.guid(); record.id = record.id || Spine.guid();
this.records[record.id] = record; this.records[record.id] = record;
} }
@@ -282,7 +285,7 @@
}, },
last: function(){ last: function(){
var values = this.recordsValues() var values = this.recordsValues();
var record = values[values.length - 1]; var record = values[values.length - 1];
return(record && record.clone()); return(record && record.clone());
}, },
@@ -331,7 +334,7 @@
fromJSON: function(objects){ fromJSON: function(objects){
if ( !objects ) return; if ( !objects ) return;
if ( typeof objects == "string" ) if ( typeof objects == "string" )
objects = JSON.parse(objects) objects = JSON.parse(objects);
if ( isArray(objects) ) { if ( isArray(objects) ) {
var results = []; var results = [];
for (var i=0; i < objects.length; i++) for (var i=0; i < objects.length; i++)

View File

@@ -10,10 +10,18 @@ function SwaggerService(baseUrl, _apiKey, statusCallback) {
if (! (baseUrl.toLowerCase().indexOf("http:") == 0 || baseUrl.toLowerCase().indexOf("https:") == 0)) { if (! (baseUrl.toLowerCase().indexOf("http:") == 0 || baseUrl.toLowerCase().indexOf("https:") == 0)) {
baseUrl = ("http://" + baseUrl); baseUrl = ("http://" + baseUrl);
} }
baseUrl = baseUrl + "/resources.json";
// baseUrl = baseUrl + "/resources.json";
// log("using base url " + baseUrl); // log("using base url " + baseUrl);
var apiHost = baseUrl.substr(0, baseUrl.lastIndexOf("/")); var apiHost = baseUrl.substr(0, baseUrl.lastIndexOf("/"));
var rootResourcesApiName = baseUrl.substr(baseUrl.lastIndexOf("/") + 1, (baseUrl.lastIndexOf(".") - baseUrl.lastIndexOf("/") - 1)); // debugger
// var rootResourcesApiName = baseUrl.substr(baseUrl.lastIndexOf("/") + 1, (baseUrl.lastIndexOf(".") - baseUrl.lastIndexOf("/") - 1));
// assuming root swagger is resources
var rootResourcesApiName = "resources";
if (baseUrl.indexOf(".json") > -1) rootResourcesApiName += ".json";
var formatString = ".{format}"; var formatString = ".{format}";
var statusListener = statusCallback; var statusListener = statusCallback;
var apiKey = _apiKey; var apiKey = _apiKey;
@@ -24,16 +32,13 @@ function SwaggerService(baseUrl, _apiKey, statusCallback) {
if (apiKey.length > 0) if (apiKey.length > 0)
apiKeySuffix = "?api_key=" + apiKey; apiKeySuffix = "?api_key=" + apiKey;
} }
// log("apiHost=" + apiHost);
// log("apiKey=" + apiKey); function log() {
// log("rootResourcesApiName = " + rootResourcesApiName); if (window.console) console.log.apply(console,arguments);
// utility functions
function log(m) {
if (window.console) console.log(m);
} }
function error(m) { function error(m) {
if (window.console) console.log("ERROR: " + m); log("ERROR: " + m);
} }
function updateStatus(status) { function updateStatus(status) {
@@ -65,12 +70,16 @@ function SwaggerService(baseUrl, _apiKey, statusCallback) {
this.path_xml = this.path.replace("{format}", "xml"); this.path_xml = this.path.replace("{format}", "xml");
this.baseUrl = apiHost; this.baseUrl = apiHost;
//execluded 9 letters to remove .{format} from name //execluded 9 letters to remove .{format} from name
this.name = this.path.substr(1, this.path.length - formatString.length - 1).replace(/\//g, "_"); this.name = this.path.split("/");
this.name = this.name[this.name.length - 1];
this.name = this.name.replace(".{format}",'').replace(/\//g, "_");
// this.name = this.path.substr(1, this.path.length - formatString.length - 1).replace(/\//g, "_");
this.apiList = Api.sub(); this.apiList = Api.sub();
this.modelList = ApiModel.sub(); this.modelList = ApiModel.sub();
}, },
addApis: function(apiObjects) { addApis: function(apiObjects) {
log("apiObjects: %o", apiObjects);
this.apiList.createAll(apiObjects); this.apiList.createAll(apiObjects);
}, },
@@ -365,17 +374,17 @@ function SwaggerService(baseUrl, _apiKey, statusCallback) {
var controller = this; var controller = this;
updateStatus("Fetching API List..."); updateStatus("Fetching API List...");
$.getJSON(apiHost + "/" + rootResourcesApiName + ".json" + apiKeySuffix, var url = apiHost + "/" + rootResourcesApiName + apiKeySuffix;
function(response) { $.getJSON(url, function(response) {
//log(response);
ApiResource.createAll(response.apis); // if (response.apis) {
ApiResource.createAll(response.apis);
// }
// get rid of the root resource list api since we're not going to document that // get rid of the root resource list api since we're not going to document that
var obj = ApiResource.findByAttribute("name", rootResourcesApiName); var obj = ApiResource.findByAttribute("name", rootResourcesApiName);
if (obj) if (obj)
obj.destroy(); obj.destroy();
controller.fetchResources(); controller.fetchResources();
}); });
}, },
@@ -392,8 +401,11 @@ function SwaggerService(baseUrl, _apiKey, statusCallback) {
fetchResource: function(apiResource) { fetchResource: function(apiResource) {
var controller = this; var controller = this;
updateStatus("Fetching " + apiResource.name + "..."); updateStatus("Fetching " + apiResource.name + "...");
$.getJSON(apiHost + apiResource.path_json + apiKeySuffix, var resourceUrl = apiHost + apiResource.path_json + apiKeySuffix;
log("resourceUrl: %o", resourceUrl);
$.getJSON(resourceUrl,
function(response) { function(response) {
log(response);
controller.loadResources(response, apiResource); controller.loadResources(response, apiResource);
}); });
}, },
@@ -402,7 +414,9 @@ function SwaggerService(baseUrl, _apiKey, statusCallback) {
try { try {
this.countLoaded++; this.countLoaded++;
// log(response); // log(response);
apiResource.addApis(response.apis); // if (response.apis) {
apiResource.addApis(response.apis);
// }
// updateStatus("Parsed Apis"); // updateStatus("Parsed Apis");
//log(response.models); //log(response.models);
if (response.models) { if (response.models) {

View File

@@ -32,6 +32,20 @@ jQuery(function($) {
apiSelectionController.adaptToScale(); apiSelectionController.adaptToScale();
}); });
this.handleEnter();
},
handleEnter: function(){
var self = this;
var submit = function() { self.showApi() }
$('#input_baseUrl').keydown(function(e) {
if(e.which != 13) return;
submit();
})
$('#input_apiKey').keydown(function(e) {
if(e.which != 13) return;
submit();
})
}, },
adaptToScale: function() { adaptToScale: function() {
@@ -44,10 +58,10 @@ jQuery(function($) {
// $('#input_baseUrl').width($('#input_baseUrl').width() + free_width - 50); // $('#input_baseUrl').width($('#input_baseUrl').width() + free_width - 50);
}, },
slapOn: function() { slapOn: function() {
// messageController.showMessage("Please enter the base URL of the API that you wish to explore."); // messageController.showMessage("Please enter the base URL of the API that you wish to explore.");
$("#content_message").show(); $("#content_message").show();
$("#resources_container").hide(); $("#resources_container").hide();
this.showApi(); this.showApi();
}, },
@@ -66,11 +80,9 @@ jQuery(function($) {
if (baseUrl.length == 0) { if (baseUrl.length == 0) {
$("#input_baseUrl").wiggle(); $("#input_baseUrl").wiggle();
} else { } else {
if (this.supportsLocalStorage()) { if (this.supportsLocalStorage()) {
localStorage.setItem("com.wordnik.swagger.ui.apiKey", apiKey); localStorage.setItem("com.wordnik.swagger.ui.apiKey", apiKey);
localStorage.setItem("com.wordnik.swagger.ui.baseUrl", baseUrl); localStorage.setItem("com.wordnik.swagger.ui.baseUrl", baseUrl);
} }
var resourceListController = ResourceListController.init({ var resourceListController = ResourceListController.init({
baseUrl: baseUrl, baseUrl: baseUrl,
@@ -133,6 +145,7 @@ jQuery(function($) {
// Create convenience references to Spine models // Create convenience references to Spine models
this.ApiResource = swaggerService.ApiResource(); this.ApiResource = swaggerService.ApiResource();
debugger;
this.ApiResource.bind("refresh", this.addAll); this.ApiResource.bind("refresh", this.addAll);
}, },
@@ -165,14 +178,9 @@ jQuery(function($) {
init: function() { init: function() {
this.render(); this.render();
this.apiResource = this.item; this.apiResource = this.item;
this.apiList = this.apiResource.apiList; this.apiList = this.apiResource.apiList;
this.modelList = this.apiResource.modelList; this.modelList = this.apiResource.modelList;
// log("------------- apiResource : " + this.apiResource.name);
// this.apiList.logAll();
// this.modelList.logAll();
this.apiList.each(this.renderApi); this.apiList.each(this.renderApi);
}, },
@@ -358,7 +366,7 @@ jQuery(function($) {
}); });
// Attach controller to window // Attach controller to window*
window.apiSelectionController = ApiSelectionController.init(); window.apiSelectionController = ApiSelectionController.init();
if (this.baseUrl) { if (this.baseUrl) {