| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 | /**  * JSON Schema link handler * Copyright (c) 2007 Kris Zyp SitePen (www.sitepen.com) * Licensed under the MIT (MIT-LICENSE.txt) license. */(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 typesvar 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;}));
 |