You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							65 lines
						
					
					
						
							2.1 KiB
						
					
					
				
			
		
		
	
	
							65 lines
						
					
					
						
							2.1 KiB
						
					
					
				/** 
 | 
						|
 * JSON Schema link handler
 | 
						|
 * Licensed under AFL-2.1 OR BSD-3-Clause
 | 
						|
 */
 | 
						|
(function (root, factory) {
 | 
						|
    if (typeof define === 'function' && define.amd) {
 | 
						|
        // AMD. Register as an anonymous module.
 | 
						|
        define([], function () {
 | 
						|
            return factory();
 | 
						|
        });
 | 
						|
    } else if (typeof module === 'object' && module.exports) {
 | 
						|
        // Node. Does not work with strict CommonJS, but
 | 
						|
        // only CommonJS-like environments that support module.exports,
 | 
						|
        // like Node.
 | 
						|
        module.exports = factory();
 | 
						|
    } else {
 | 
						|
        // Browser globals
 | 
						|
        root.jsonSchemaLinks = factory();
 | 
						|
    }
 | 
						|
}(this, function () {// setup primitive classes to be JSON Schema types
 | 
						|
var exports = {};
 | 
						|
exports.cacheLinks = true;
 | 
						|
exports.getLink = function(relation, instance, schema){
 | 
						|
	// gets the URI of the link for the given relation based on the instance and schema
 | 
						|
	// for example:
 | 
						|
	// getLink(
 | 
						|
	// 		"brother", 
 | 
						|
	// 		{"brother_id":33}, 
 | 
						|
	// 		{links:[{rel:"brother", href:"Brother/{brother_id}"}]}) ->
 | 
						|
	//	"Brother/33"
 | 
						|
	var links = schema.__linkTemplates; 
 | 
						|
	if(!links){
 | 
						|
		links = {};
 | 
						|
		var schemaLinks = schema.links;
 | 
						|
		if(schemaLinks && schemaLinks instanceof Array){
 | 
						|
			schemaLinks.forEach(function(link){
 | 
						|
	/*			// TODO: allow for multiple same-name relations
 | 
						|
				if(links[link.rel]){
 | 
						|
					if(!(links[link.rel] instanceof Array)){
 | 
						|
						links[link.rel] = [links[link.rel]];
 | 
						|
					}
 | 
						|
				}*/
 | 
						|
				links[link.rel] = link.href;
 | 
						|
			});
 | 
						|
		}
 | 
						|
		if(exports.cacheLinks){
 | 
						|
			schema.__linkTemplates = links;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	var linkTemplate = links[relation];
 | 
						|
	return linkTemplate && exports.substitute(linkTemplate, instance);
 | 
						|
};
 | 
						|
 | 
						|
exports.substitute = function(linkTemplate, instance){
 | 
						|
	return linkTemplate.replace(/\{([^\}]*)\}/g, function(t, property){
 | 
						|
			var value = instance[decodeURIComponent(property)];
 | 
						|
			if(value instanceof Array){
 | 
						|
				// the value is an array, it should produce a URI like /Table/(4,5,8) and store.get() should handle that as an array of values
 | 
						|
				return '(' + value.join(',') + ')';
 | 
						|
			}
 | 
						|
			return value;
 | 
						|
		});
 | 
						|
};
 | 
						|
return exports;
 | 
						|
})); |