-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathjson-model.min.js
3 lines (3 loc) · 61.2 KB
/
json-model.min.js
1
2
3
"use strict";!function(a,b){"function"==typeof define&&define.amd?define([],b):"undefined"!=typeof module&&module.exports?module.exports=b():a.JsonModel=b()}(this,function(){function a(a){var b=String(a).replace(/^\s+|\s+$/g,"").match(/^([^:\/?#]+:)?(\/\/(?:[^:@]*(?::[^:@]*)?@)?(([^:\/?#]*)(?::(\d*))?))?([^?#]*)(\?[^#]*)?(#[\s\S]*)?/);return b?{href:b[0]||"",protocol:b[1]||"",authority:b[2]||"",host:b[3]||"",hostname:b[4]||"",port:b[5]||"",pathname:b[6]||"",search:b[7]||"",hash:b[8]||""}:null}function b(b,c){function d(a){var b=[];return a.replace(/^(\.\.?(\/|$))+/,"").replace(/\/(\.(\/|$))+/g,"/").replace(/\/\.\.$/,"/../").replace(/\/?[^\/]*/g,function(a){"/.."===a?b.pop():b.push(a)}),b.join("").replace(/^\//,"/"===a.charAt(0)?"/":"")}return c=a(c||""),b=a(b||""),c&&b?(c.protocol||b.protocol)+(c.protocol||c.authority?c.authority:b.authority)+d(c.protocol||c.authority||"/"===c.pathname.charAt(0)?c.pathname:c.pathname?(b.authority&&!b.pathname?"/":"")+b.pathname.slice(0,b.pathname.lastIndexOf("/")+1)+c.pathname:b.pathname)+(c.protocol||c.authority||c.pathname?c.search:c.search||b.search)+c.hash:null}function c(a,b){if(b.substring(0,a.length)===a){var c=b.substring(a.length);if(b.length>0&&"/"===b.charAt(a.length-1)||"#"===c.charAt(0)||"?"===c.charAt(0))return!0}return!1}function d(a){return(" "+a.replace(/\n/g,"\n ")).replace(/\t+$/,"")}function e(a){return""===a.split("#")[1]?a.split("#")[0]:a}function f(a,b){return/^[a-zA-Z][a-zA-Z0-9_]*/.test(b)?a+"."+b:a+"["+JSON.stringify(b)+"]"}function g(a,b){var c=b.match(/^[+#./;?&]*/)[0],d=function(a){return-1!==c.indexOf(a)},e=(b.match(/[*]*$/)[0],b.substring(c.length).split(",")),f=[];return d("#")&&f.push('"#"'),d(".")&&f.push('"."'),d("/")&&f.push('"/"'),e.forEach(function(b,c){function e(a){return Array.isArray(s)?-1===s.indexOf(a):"string"==typeof s?s===a:!0}var g=b,h=b.match(/(\:[0-9]+)?([*]*)$/),i=h[1],j=h[2];g=g.substring(0,g.length-h[0].length);var k=",",l="",m=",";j.indexOf("*")+1&&(m="=",d(".")?k=".":d("/")?k="/":d(";")?(k=";",l=encodeURIComponent(g)+"="):(d("?")||d("&"))&&(k="&",l=encodeURIComponent(g)+"="));var n="";d(";")?-1===j.indexOf("*")?(f.push(JSON.stringify(";"+g)),n="="):f.push(JSON.stringify(";")):d("?")&&0==c?f.push(-1===j.indexOf("*")?JSON.stringify("?"+g+"="):JSON.stringify("?")):d("?")||d("&")?f.push(-1===j.indexOf("*")?JSON.stringify("&"+g+"="):JSON.stringify("&")):d("&")?f.push(JSON.stringify("&"+g+"=")):c>0&&f.push(d(".")?'"."':d("/")?'"/"':d("?")?'"&"':'","');var o=[];if(i){var p=parseInt(i.substring(1));o.push(function(a){return"("+a+' || "").substring(0, '+p+")"})}o.push(d("+")||d("#")?function(a){return"encodeURI("+a+")"}:function(a){return"encodeURIComponent("+a+').replace(/!/g, "%21")'});var q=a(g);"string"==typeof q&&(q={code:q});var r=q.code,s=q.type,t=o.length?function(a){return o.forEach(function(b){a=b(a)}),a}:null,u={};if(e("array")){if(!t)return JSON.stringify(l)+" + "+r+".join("+JSON.stringify(k+l)+")";u.array=r+".map(function (x) {\n return "+(l?JSON.stringify(l)+" + ":"")+t("x")+";\n}).join("+JSON.stringify(k)+")"}e("object")&&(t||(t=function(a){return a}),u.object="Object.keys("+r+").map(function (key) {\n return "+t("key")+" + "+JSON.stringify(m)+" + "+t(r+"[key]")+";\n}).join("+JSON.stringify(k)+")"),(e("string")||e("number")||e("integer")||e("boolean"))&&(u.plain=t(r));var v;1===Object.keys(u).length?v=u[Object.keys(u)[0]]:(v="",v=u.object&&u.plain?"(typeof "+r+' === "object" ? '+u.object+" : "+u.plain+")":u.object?u.object:u.plain,u.array&&(v="(Array.isArray("+r+") ? "+u.array+" : "+v+")")),n&&(v="("+r+"?"+JSON.stringify(n)+"+"+v+':"")'),f.push(v)}),f.join(" + ")}function h(a){return a.replace(/~/g,"~0").replace(/\//g,"~1")}function i(a){return a.replace(/~1/g,"/").replace(/~0/g,"~")}function j(a){return null==a?[]:a.match(/(^|,)(([^,\\"]|"([^"\\]|\\.)*"?)*)/g).map(function(a){return a.replace(/^,?\s*/,"")})}function k(a){var b=a.match(/^\s*<([^>]*)>/)||null,c={href:b[1]||null},d=a.replace(/^[^>]+>\s*;?/,"");return d.match(/(^|;)(([^;\\"]|"([^"\\]|\\.)*"?)*)/g).map(function(a){a=a.replace(/^\s*(;\s*)?/,"");var b=a.replace(/\=.*/,""),d=a.substring(b.length).replace(/(^\s*=\s*|\s+$)/g,"");if('"'===d.charAt(0))try{d=JSON.parse(d)}catch(e){}c[b]=c[b]||d}),c}function l(a){var b={};return(a.match(/(^\??|&)([^&]+)/g)||[]).forEach(function(a){a=a.substring(1);var c=a.split("=",1)[0],d=a.substring(c.length+1);b[decodeURIComponent(c)]=decodeURIComponent(d)}),b}function m(a){var b=[];for(var c in a)b.push(encodeURIComponent(c)+"="+n(a[c]));return b.length?"?"+b.join("&"):""}function n(a){return encodeURIComponent(a).replace(/%2F/gi,"/")}function o(){}function p(a,b){return T(a,b)}function q(a){this._schemas=a,this._props={},this._patterns={}}function r(a,b){for(var c=a.split("/").slice(1).map(i),d=c.pop(),e=0;e<c.length;e++){var f=c[e];if(!b||"object"!=typeof b){d=null;break}b=b[f]}return{target:b,key:d}}function s(a,c){function d(){a._pokeRootModel(c,n)}function e(){o=null}function f(){if(!--t)for(n.ready=!0;s.length;)s.shift()()}function g(){y={},A={},B={},C=[];for(var a=0;a<x.length;a++)C=C.concat(x[a](w,"",y,A,B))}function l(a,b,c,d){for(var e=d[a]||[],f=y[a]||[],g=[],i=[],j=0;j<e.length;j++)-1===f.indexOf(e[j])&&i.push(e[j]);for(var j=0;j<f.length;j++){var k=f[j];-1===e.indexOf(k)&&g.push(k)}if(g.length||i.length){b.m&&b.m.emit("schemachange",g,i);for(var m in b.c)(null===c||m!==c)&&l(a+"/"+h(m),b.c[m],null,d)}}function m(a){for(var b in a.c){var c=a.c[b];c.m&&c.m.emit("change",""),m(c)}}var n=this;this.dataStore=a,this.storeKey=c,this.state=Date.now();var o=null,p=this.pokeStore=function(){o=o||d()||O(e)||!0};this.url=null,this.http={status:null,headers:{}},this.ready=!0;var s=[];this.whenReady=function(a){return this.ready?O(a):void s.push(a)};var t=0;this.pendingOperation=function(){return this.ready=!1,t++,f};var w=null,x=[],y={},z={},A={},B={},C=[],D=!1;this.reset=function(a,c){t++,x=(c||[]).map(function(a){return t++,"string"==typeof a&&(a=b(n.url||this.dataStore.baseUrl,a)),I.validationErrors(a,f)}),this.ready=1>=t&&!x.length||I.schemasFetched(),this.setPathValue("",a),O(f)};var E={c:{}};this.modelForPath=function(a){for(var b=a.split("/").slice(1).map(i),c=E,d=0;d<b.length;d++){var e=b[d];c=c.c[e]=c.c[e]||{c:{}}}return c.m=c.m||new u(this,a)},this.setPathValue=function(a,b){if(this.state--,p(),a){var c=r(a,w);if(!c.target||"object"!=typeof c.target)return!1;if(c.target[c.key]===b)return!0;"undefined"==typeof b?delete c.target[c.key]:c.target[c.key]=b}else w=b;var d=y;g();for(var e=a.split("/"),f=E,h=1;h<=e.length;h++){var j=e.slice(0,h).join("/"),k=null;if(j!==a&&(k=i(e[h])),l(j,f,k,d),f.m&&f.m.emit("change",a.substring(j.length)),null!==k){if(f=f.c[k],!f)break}else m(f)}return this.ready||D||(D=!0,s.unshift(function(){z={},D=!1;var a=y;g(),l("",E,null,a)})),!0},this.getPathValue=function(a){if(p(),!a)return w;var b=r(a,w);return b.target&&"object"==typeof b.target?b.target[b.key]:void 0},this.getPathSchemas=function(a){return(y[a]||[]).slice(0)},this.getPathSchemaSet=function(a){var b=y[a]||[],c=b.join("\n"),d=b.every(function(a){return"string"==typeof a});if(d)return z[c]=z[c]||new q(b.map(function(a){return U.get(a)}));throw new Error("Non-string schemas not supported yet")},this.getPathLinks=function(a,b){var c=this,d=A[a]||[];return!a&&this.http.headers.link&&(d=d.concat(j(this.http.headers.link).map(k))),d.filter(function(a){return"string"==typeof b&&b!==a.rel?!1:!0}).map(function(a){return new v(c,a)})},this.getPathErrors=function(a,b,c){a=a||"";var d=C.filter(function(b){return b.path==a||!c&&b.path.substring(0,a.length)==a&&"/"==b.path.charAt(a.length)});if(b)for(var e in B)(e==a||!c&&e.substring(0,a.length)==a&&"/"==e.charAt(a.length))&&B[e].forEach(function(a){var b=a.replace(/#.*/,"");d.push($[b]?{code:L.SCHEMA_FETCH_ERROR,path:e,params:{message:$[b].message,status:$[b].httpStatus||null},schema:a}:{code:L.SCHEMA_MISSING,path:e,params:{},schema:a})});return d}}function t(a){return null==a&&(a=""),a+="",a&&"/"!==a.charAt(0)&&(a="/"+h(a)),a}function u(a,b){this._root=a,this._path=b}function v(a,c){this._root=a,this.href=b(a.url,c.href),this.rel=c.rel,this.method=c.method||"GET"}function w(a){var b=Object.keys(Z);if(0===b.length){if(W=V.classes(null,p),V.missing().length)return ab();for(;!a&&_.length;){var c=_.shift();c()}}}function x(a,b){"string"==typeof a&&(b=a,a=null),this.baseUrl=b||(a?a.baseUrl:""),this.parent=a,this.config=a?Object.create(a.config):{keepMs:1e3},this._store=a?Object.create(a._store):{},this._removeTimeouts={}}function y(a){for(var b=a;b.parentNode;)b=b.parentNode;return b===a.ownerDocument}function z(a,b){var c=a.match(/[#\.][^#\.]+/g)||[];return a=a.replace(/[#\.].*/,"")||"span",c.forEach(function(a){"#"===a.charAt(0)?b.id=args.substring(1):b["class"]?b["class"]+=" "+a.substring(1):b["class"]=a.substring(1)}),a||"span"}function A(a,b){var c=Array.prototype.slice.call(arguments,2);"object"!=typeof b&&(c.unshift(b),b=null),b=b||{},a=z(a,b);var d="<"+a;for(var e in b){var f=b[e];"function"==typeof f&&(f=f()),I.is(f)&&(f=f.get()),""===f||f===!0?d+=" "+e.escapeHtml():f&&(d+=" "+e.escapeHtml()+'="'+f.toString().escapeHtml()+'"')}return d+=">"+c.join("")+"</"+a+">"}function B(a,b,c){return bb[b]?bb[b](a,c):null==c?a.removeAttribute(b):void a.setAttribute(b,c)}function C(a,b,c){function d(a){f=f||a,--e||c(a)}var e=1,f=null;if(1===a.nodeType){"a"===a.tagName.toLowerCase()&&(a.hasAttribute("ajax")||a.hasAttribute("data-ajax"))&&b.ajaxLink(a);for(var g=0;g<a.childNodes.length;g++){var h=a.childNodes[g];1===h.nodeType&&(h.hasAttribute(eb)?(e++,b._bindKeyPath(h,h.getAttribute(eb),h.getAttribute(fb),h.getAttribute(gb),d)):(e++,b.unbind(h),C(h,b,d)))}}d()}function D(a,b,c,d,e){function f(a){l=l||a,--k||e(a)}if(1===b.nodeType){for(var g=0;g<b.attributes.length;g++){var h=b.attributes[g].name,i=b.attributes[g].value;a.getAttribute(h)!==i&&B(a,h,i)}for(var j=[],g=0;g<a.attributes.length;g++){var h=a.attributes[g].name;j.push(h)}j.forEach(function(c){b.hasAttribute(c)||B(a,c,null)})}var k=1,l=null,m=c.path;if(!m)return a.nodeValue=b.nodeValue,f(null);for(var n=-1,o=-1,p=1;p<m.length;p++){var q=m[p];if(null!==q){var r=m[p-1];if(null===r){var s=a.childNodes[q+n],t=b.childNodes[p-q+o];k++,D(s,t,c.actions[p-1],d,f)}else if(r===q){n++;var s=a.childNodes[q+n],t=b.childNodes[p-q+o];b.removeChild(t),a.insertBefore(t,s),o--}else{var s=a.childNodes[q+n];a.removeChild(s),n--}}}f()}function E(a,b,c,d){if(a.nodeType===b.nodeType){if(1!==a.nodeType)return{score:.5};if(a.tagName===b.tagName&&("input"!==a.tagName||a.type===b.type)){if(!d&&b.hasAttribute(eb))return a.getAttribute(eb)===b.getAttribute(eb)&&a.getAttribute(fb)===b.getAttribute(fb)&&a.getAttribute(gb)===b.getAttribute(gb)?{score:1}:a.hasAttribute(eb)?{score:.1}:{score:.5};for(var e=1,f=1,g=0;g<a.attributes.length;g++){e++;var h=(a.attributes[g].name,a.attributes[g].value);b.getAttribute(g)===h&&f++}for(var g=0;g<b.attributes.length;g++)a.hasAttribute(b.attributes[g].name)||e++;for(var i=f/e,j=[{score:i,path:[0],actions:[]}],k=[],l=a.childNodes.length,m=b.childNodes.length,n=1,o=l+m+1;o>n;){for(var p=[],q=Math.max(0,n-m);l>=q&&n>=q;q++){var r=a.childNodes[q-1],s=b.childNodes[n-q-1],t={score:-1},u=-1,v=j[q];if(v){var i=0;i>u&&(t={score:v.score+i,path:v.path.concat([q]),actions:v.actions.concat(["add "+s])})}var w=j[q-1];if(w){var i=0;i>u&&(t={score:w.score+i,path:w.path.concat([q]),actions:w.actions.concat(["remove"+r])})}var x=k[q-1];if(x){var y=E(r,s,c)||{score:-1/0};y.score>u&&(t={score:x.score+y.score,path:x.path.concat([null,q]),actions:x.actions.concat(["merge "+r+" -> "+s,y])})}p[q]=t}k=j,j=p.slice(0),p.sort(function(a,b){return b.score-a.score}),j=j.map(function(a){return p.indexOf(a)<c?a:null}),n++}var z=j[l];return z}}}function F(a,c){if(!(this instanceof F))return new F(a,c);var d=this;if(this.registerIndex=c,this.preferDom=!!a.preferDom,("string"==typeof a.canBind||Array.isArray(a.canBind))&&(a.canBind={schema:a.canBind}),"object"==typeof a.canBind){var e=a.canBind;e.schema&&!Array.isArray(e.schema)&&(e.schema=[e.schema]),e.type&&!Array.isArray(e.type)&&(e.type=[e.type]),e.tag&&!Array.isArray(e.tag)&&(e.tag=[e.tag]),this.canBind=function(a,c,d){if(e.tag&&-1===e.tag.indexOf(c))return!1;if(e.type){var f=a.jsonType();if(-1===e.type.indexOf(f))return!1}if(e.schema){var g=a.schemas(),h=a._root.dataStore.baseUrl;if(!e.schema.some(function(a){return a=b(h,a),-1!==g.indexOf(a)}))return!1}return e.filter&&!e.filter(a,c,d)?!1:!0},this.priority=a.priority||0,this.priority+=10*!!e.tag+5*!!e.schema+2*!!e.type}else this.canBind=a.canBind,this.priority=a.priority||0;"function"==typeof a.html?this.html=a.html.bind(a):"string"==typeof a.html&&(this.html=function(){return a.html});var f=a.modelEvents||{};f.change=f.change||function(a,b,c,d){return!d};var g=a.uiEvents||{};this.bindDom=function(a,b,c){var e=function(){return y(c)?void 0:(console.log("Detached from document: ",c),a.unbind(c),clearInterval(h),!0)},h=setInterval(e,1e3),i=a.boundJsonModelEvents={};Object.keys(f).forEach(function(e){var g=f[e],h=i[e]=function(){if(c.boundContext!==a)return d.unbindDom(a,b,c);var e=Array.prototype.slice.call(arguments,0);e=[b,c,a].concat(e);var f=g.apply(this,e);f&&a.bind(b,c)};b.on(e,h)});var j=a.boundUiEvents={};Object.keys(g).forEach(function(e){var f=g[e],h=j[e]=function(){if(c.boundContext!==a)return d.unbindDom(a,b,c);var e=Array.prototype.slice.call(arguments,0);e=[b,c,a].concat(e);var g=f.apply(this,e);g&&a.bind(b,c)};a.ui.on(e,h)}),b.emit("bind",c),j.bind&&j.bind.call(null)},this.unbindDom=function(a,b,c){b.emit("unbind",c),a.boundUiEvents.unbind&&a.boundUiEvents.unbind.call(null);for(var d in a.boundJsonModelEvents){var e=a.boundJsonModelEvents[d];b.off(d,e)}for(var d in a.boundUiEvents){var e=a.boundUiEvents[d];a.ui.off(d,e)}}}function G(a){this._state=0,this._immediateOptions=[],this._concatOptions=[],this._needSort=!1,this.parent=a||{_state:0,_options:function(){return this}.bind([])},this._parentState=a?a.options().length:0}function H(a,b,c){this._bindings=a,this._dataStore=b,this._root=this,this._model=null,this._usedBindings=[],this.ui=this._dataStore.create(c||{}),this.includeDataProperties=!1,this.urlForState=function(a){return"object"==typeof window&&window.location&&"string"==typeof window.location.href&&(a=I.util.url.relative(window.location.href,a)),I.util.url.encodeQuery({json:a})||"?"},this.stateForUrl=function(a){var b=I.util.url.parse(a),c=I.util.url.parseQuery(b.search);return[c.json,{}]}}var I={version:"0.2.24"},J={};J.util={parseUrl:a,resolveUrl:b,isSubUrl:c};var K=J.SchemaStore=function(a){this.schemas=a?Object.create(a.schemas):{},this.missingUrls=a?Object.create(a.missingUrls):{},this.missing=function(b,c){if(void 0===b){if(a){var d=[];for(var e in this.missingUrls)a.missing(e)?d.push(e):delete this.missingUrls[e];return d}return Object.keys(this.missingUrls)}if(this.schemas[b])return!1;var f=b.replace(/#.*/,""),d=!(!this.missingUrls[f]&&f in this.schemas||a&&!a.missing(b));return d&&!c&&(this.missingUrls[f]=!0),d}};K.prototype={child:function(){return new K(this)},add:function(a,b){"object"==typeof a&&(b=a,a=b.id||arguments[1]);var c=a.replace(/#.*/,"");a===c+"#"&&(a=c),b&&(b.id=b.id||a),delete this.missingUrls[c],this.schemas[a]=b,this._searchSchema(b,a)},_searchSchema:function(a,d){if(a&&"object"==typeof a)if(void 0===d?d=a.id:"string"==typeof a.id&&(a.id=d=b(d,a.id)),Array.isArray(a))for(var e=0;e<a.length;e++)this._searchSchema(a[e],d);else{"string"==typeof a.id&&c(d,a.id)&&void 0===this.schemas[a.id]&&(this.schemas[a.id]=a),"string"==typeof a.$ref&&(a.$ref=b(d,a.$ref));for(var f in a)if("enum"!==f)if("object"==typeof a[f])this._searchSchema(a[f],d);else if("$ref"===f){var g=a[f],h=g.replace(/#.*/,"");!h||g in this.schemas||h in this.schemas||(this.missingUrls[h]=!0)}}},resolveRefs:function(a,b){if(a&&void 0!==a.$ref){if(b=b||{},b[a.$ref])return this.createError(L.CIRCULAR_REFERENCE,{urls:Object.keys(b).join(", ")},"","");b[a.$ref]=!0,a=this.get(a.$ref,b)}return a},get:function(a,b,c){var d;if(void 0!==this.schemas[a])return d=this.schemas[a],c?d:this.resolveRefs(d,b);var e=a.replace(/#.*/,""),f=a.substring(e.length+1);if("object"==typeof this.schemas[e]){d=this.schemas[e];var g=decodeURIComponent(f);if(""===g)return c?d:this.resolveRefs(d,b);if("/"!==g.charAt(0))return void 0;for(var h=g.split("/").slice(1),i=0;i<h.length;i++){var j=h[i].replace(/~1/g,"/").replace(/~0/g,"~");if(!d||void 0===d[j])return void 0;d=d[j]}if(void 0!==d)return c?d:this.resolveRefs(d,b)}this.missingUrls[e]=!0}},J.SchemaStore=K;var L=J.ErrorCodes={INVALID_TYPE:0,ENUM_MISMATCH:1,ANY_OF_MISSING:10,ONE_OF_MISSING:11,ONE_OF_MULTIPLE:12,NOT_PASSED:13,NUMBER_MULTIPLE_OF:100,NUMBER_MINIMUM:101,NUMBER_MINIMUM_EXCLUSIVE:102,NUMBER_MAXIMUM:103,NUMBER_MAXIMUM_EXCLUSIVE:104,STRING_LENGTH_SHORT:200,STRING_LENGTH_LONG:201,STRING_PATTERN:202,OBJECT_PROPERTIES_MINIMUM:300,OBJECT_PROPERTIES_MAXIMUM:301,OBJECT_REQUIRED:302,OBJECT_ADDITIONAL_PROPERTIES:303,OBJECT_DEPENDENCY_KEY:304,ARRAY_LENGTH_SHORT:400,ARRAY_LENGTH_LONG:401,ARRAY_UNIQUE:402,ARRAY_ADDITIONAL_ITEMS:403,FORMAT_CUSTOM:500,KEYWORD_CUSTOM:501,CIRCULAR_REFERENCE:600,SCHEMA_MISSING:700,SCHEMA_FETCH_ERROR:701,DOCUMENT_FETCH_ERROR:702,UNKNOWN_PROPERTY:1e3},M=J.uriTemplate=function(a,b){if("function"!=typeof a){var c=a;a=function(a){return f(c,a)}}var d=[],e=b.split("{"),h=e.shift();for(h&&d.push(JSON.stringify(h));e.length;){var i=e.shift(),j=i.split("}")[0];d.push(g(a,j));var k=i.substring(j.length+1);k&&d.push(JSON.stringify(k))}return d.length||d.push('""'),d.join(" + ")},N=J.Generator=function ib(a){return this instanceof ib?(a=a||{},this.schemaStore=a.schemaStore||new K,this.config={directMethods:a.directMethods!==!1,validation:a.validation!==!1,subErrors:a.subErrors!==!1&&!0,unicodeLength:a.unicodeLength!==!1,assignment:a.assignment||!1,linkAssignment:a.linkAssignment||!1,trackMissing:a.trackMissing||!1,classes:a.classes!==!1&&!0},this.classNames={},this.classVars={GeneratedClass:!0},this.aliases={},this.missingMap={},void(this.previouslyHandled={})):new ib(a)};N.prototype={addSchema:function(a,b,c){this._codeInvalid=!0,delete this._code,"object"==typeof a&&(c=b,b=a,a=b&&b.id),a="string"==typeof a?a:Math.random().toString().substring(2)+"anonymous",a=e(a||"");var d=a.replace(/#.*/,"");if(this.previouslyHandled[a])throw new Error("Forcing a re-compute of "+a);return"object"==typeof b?this.schemaStore.add(a,b):(c=c||b,this.missingMap[a]=!0,this.previouslyHandled[d]||(this.missingMap[d]=!0)),this.classNames[a]=c||this.classNames[a]||"",this.classVarForUrl(a),this},missing:function(a){if("string"!=typeof a){var b=Object.keys(this.missingMap);return this.schemaStore.missing().forEach(function(a){-1===b.indexOf(a)&&b.push(a)}),b}var c=a.replace(/#.*/,"");return this.missingMap[a]||!this.previouslyHandled[e(a)]&&!this.previouslyHandled[c]},code:function(){if(!this._codeInvalid&&this._code)return this._code;this._codeInvalid=!1;var a="";a+="function pointerEscape(key) {\n",a+=d('return key.replace(/~/g, "~0").replace(/\\//g, "~1");\n'),a+="}\n",this.config.unicodeLength&&(a+="function unicodeLength(string) {\n",a+=d('return string.replace(/[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g, "_").length;\n'),a+="}\n"),a+='if (superclass && typeof superclass === "object") {\n',a+=d("request = classes;\n"),a+=d("classes = superclass;\n"),a+=d("superclass = null;\n"),a+="}\n",a+="superclass = superclass || function GeneratedClass() {};\n",a+='if (typeof classes === "function") {\n',a+=d("request = classes;\n"),a+=d("classes = null;\n"),a+="}\n",a+='request = request || function ErrorFunc() {throw new Error("No web-request function provided");};\n',a+="classes = classes || {};\n";for(var b={},c=Object.keys(this.aliases).concat(Object.keys(this.classNames)),g=(function(d,e){return b[d]?void 0:d in this.aliases?g(this.aliases[d]):void(e?(b[d]=!0,a+="\n"+this.codeForUrl(d,g)):c.push(d))}.bind(this)),h=0;h<c.length;h++){var i=e(c[h]);this.previouslyHandled[i]||g(i,!0)}for(var i in this.aliases)if(!this.previouslyHandled[i]){this.previouslyHandled[i]=!0;var j=this.aliases[i],k=this.classNameForUrl(i),l=this.classNameForUrl(j);a+="\n/* $ref: "+i.replace(/\*/g,"%2A")+" -> "+j.replace(/\*/g,"%2A")+" */\n",this.config.classes===!1?a+=f("classes",k)+" = {};\n":(a+=f("classes",k)+" = function () {\n",a+=d("return "+f("classes",l)+".apply(this, arguments);\n"),a+="};\n",a+=f("classes",k)+".prototype = Object.create("+f("classes",l)+".prototype);\n"),this.config.validation&&(a+=f("classes",k)+".validate = function (data) {\n",a+=d("return "+f("classes",l)+".validate(data);\n"),a+="};\n",a+="/*"+JSON.stringify(this.config)+"*/\n",a+=f("classes",k)+".validationErrors = function (data, path"+(this.config.assignment?", schemaMap":"")+(this.config.linkAssignment?", linkMap":"")+(this.config.trackMissing?", missing":"")+") {\n",a+=d("return "+f("classes",l)+".validationErrors(data, path"+(this.config.assignment?", schemaMap":"")+(this.config.linkAssignment?", linkMap":"")+(this.config.trackMissing?", missing":"")+");\n"),a+="};\n")}return a+="\nreturn classes;\n",a="function (superclass, classes, request) {\n"+d(a)+"}",this._code=a},classExprForUrl:function(a){return f("classes",this.classNameForUrl(a))},classVarForUrl:function(a,b){this._codeInvalid=!0,"string"!=typeof b&&(b="Class");var c=this.classNames[a]||a;if(c=c.replace(/^[^#?]*[/]/g,"").replace(/[^a-zA-Z0-9]+([a-zA-Z0-9]?)/g,function(a,b){return b.toUpperCase()}),c=c.replace(/^[^a-zA-Z]*/,"")||"anonymous",c=c.charAt(0).toUpperCase()+c.substring(1),!this.classVars[c+b]||this.classVars[c+b]===a)return this.classVars[c+b]=a,c+b;for(var d=2;this.classVars[c+d+b]&&this.classVars[c+d+b]!==a;)d++;return this.classVars[c+d+b]=a,c+d+b},classNameForUrl:function(a){return a=e(a),this.classNames[a]=this.classNames[a]||this.classVarForUrl(a,"")},extendUrl:function(a,b){return-1===a.indexOf("#")&&(a+="#"),b.forEach(function(b){a+="/"+encodeURIComponent(b.toString().replace(/~/g,"~0").replace(/\//g,"~1"))}),a},schemaAcceptsType:function(a,b){return!a.type||a.type===b||Array.isArray(a.type)&&-1!==a.type.indexOf(b)},schemaOnlyAcceptsType:function(a,b){return a.type===b||a.type&&1===a.type.length&&a.type[0]===b},schemaRequiresProperty:function(a,b){return a.required?-1!==a.required.indexOf(b):!1},getFullSchema:function(a,b){if(!a||"string"!=typeof a.$ref)return a;b=b||{};var c=a.$ref;if(b[c])return{description:"ERROR! Recursion"};b[c]=!0;var a=this.schemaStore.get(c,null,!0);return a?(a.id||(a.id=e(c)),this.getFullSchema(a,b)):(this.schemaStore.missing(c)&&(this.missingMap[c]=!0),{description:"Missing schema: "+c,placeholder:!0})},codeForUrl:function(a,b){var c=this.schemaStore.get(a,null,!0);if(c){if("string"==typeof c.$ref)return this.aliases[a]=c.$ref,b(c.$ref),"// skipping "+a+" - will add as reference later\n";this.previouslyHandled[a]=!0,delete this.missingMap[a],a=c.id||a,this.previouslyHandled[a]=!0,delete this.missingMap[a]}else this.schemaStore.missing(a)?this.missingMap[a]=!0:(delete this.missingMap[a],this.previouslyHandled[a]=!0),c={description:"Missing schema: "+a};var e="/* Schema: "+a.replace(/\*/g,"%2A")+" */\n",g=this.classNameForUrl(a),h=this.classVarForUrl(a||"anonymous");if(this.schemaAcceptsType(c,"object")&&this.config.classes!==!1){e+="var "+h+" = "+f("classes",g)+" = function "+h+"(value) {\n";var i="";i+="if (!(this instanceof "+h+")) return new "+h+"(value);\n","default"in c&&(i+="value = value || "+JSON.stringify(c["default"])+";\n");var j=function(a,e,f){if(this.schemaAcceptsType(a,"object")){var g=this.classExprForUrl(e);b(e);var h=[];this.schemaAcceptsType("null")&&h.push(f),this.schemaAcceptsType("array")&&h.push("!Array.isArray("+f+")"),this.schemaOnlyAcceptsType(a,"object")?this.schemaRequiresProperty(c,k)||h.push(f):h.push("typeof "+f+' === "object"'),i+="if ("+h.join(" && ")+") {\n",i+=d(""+f+" = new "+g+"("+f+");\n"),i+="}\n"}}.bind(this);for(var k in c.properties||{}){var l=this.getFullSchema(c.properties[k]);i+="if (typeof "+f("value",k)+' !== "undefined") {\n',i+=d(f("this",k)+" = "+f("value",k)+";\n"),"default"in l&&(i+="} else {\n",i+=d(f("this",k)+" = "+JSON.stringify(l["default"])+";\n")),i+="}\n";var m=l&&l.id||this.extendUrl(a,["properties",k]);j(l,m,f("this",k))}if(c.additionalProperties){if(i+="var keys = Object.keys(value);\n",i+="for (var i = 0; i < keys.length; i++) {\n",i+=d("var key = keys[i];\n"),i+=d("if (!(key in this)) {\n"),i+=d(d("this[key] = value[key];\n")),"object"==typeof c.additionalProperties){var l=this.getFullSchema(c.additionalProperties),m=l&&l.id||this.extendUrl(a,["additionalProperties"]);j(l,m,f("this[key]"))}i+=d("}\n"),i+="}\n"}var n="superclass";i+="\n"+n+".apply(this, arguments);\n",e+=d(i),e+="};\n",e+=h+".prototype = Object.create("+n+".prototype);\n",c.title&&(e+=h+".title = "+JSON.stringify(c.title)+";\n"),c.description&&(e+=h+".description = "+JSON.stringify(c.description)+";\n")}else e+="var "+h+" = "+f("classes",g)+" = {};\n";return e+=h+".schema = "+JSON.stringify(a)+";\n",e+=h+".links = {};\n",(c.links||[]).forEach(function(a){var b=a.rel,g=b.replace(/.*[/#?]/g,"").replace(/[^a-zA-Z0-9]+([a-zA-Z0-9]?)/,function(a,b){return b.toUpperCase()}),i=(a.method||"GET").toUpperCase(),j=a.encType||a.enctype||("GET"===i||"DELETE"===i?"application/x-www-form-urlencoded":"application/json"),k="";k+='if (typeof params === "function") {\n',k+=d("callback = params;\n"),k+=d("params = null;\n"),k+="}\n",k+="var href = "+M(function(a){var b=f("obj",a);return{code:b,type:((c.properties||{})[a]||{}).type}},a.href)+";\n",k+="request({\n",k+=d("href: href,\n"),k+=d("method: "+JSON.stringify(i)+",\n"),k+=d("encType: "+JSON.stringify(j)+",\n"),k+=d("data: params || null\n"),k+="}, callback || function () {});";var l=i.toLowerCase()+g.charAt(0).toUpperCase()+g.substring(1);e+=h+".links["+JSON.stringify(l)+"] = function (obj, params, callback) {\n",e+=d(k),e+="};\n",this.config.directMethods&&this.schemaAcceptsType(c,"object")&&(e+=h+".prototype["+JSON.stringify(l)+"] = function (params, callback) {\n",e+=d("return "+h+".links["+JSON.stringify(l)+"](this, params, callback);\n"),e+="};\n")}.bind(this)),this.config.validation&&(e+=h+".validationErrors = function (value, dataPath"+(this.config.assignment?", schemaMap":"")+(this.config.linkAssignment?", linkMap":"")+(this.config.trackMissing?", missing":"")+") {\n",this.config.assignment&&(e+=d("schemaMap = schemaMap || {};\n")),this.config.linkAssignment&&(e+=d("linkMap = linkMap || {};\n")),e+=d('dataPath = dataPath || "";\n'),e+=d("var errors = [];\n"),e+=d(this.validationCode("value",[],a,c,b,function(a,b){return b?"errors.push("+a+");\n":"errors = errors.concat("+a+");\n"},!1)),e+=d("return errors;\n"),e+="}\n",e+=h+".validate = function (value) {\n",this.config.assignment&&(e+=d("var schemaMap = {};\n")),this.config.linkAssignment&&(e+=d("var linkMap = {};\n")),this.config.trackMissing&&(e+=d("var missing = {};\n")),e+=d("var errors = "+h+'.validationErrors(value, ""'+(this.config.assignment?", schemaMap":"")+(this.config.linkAssignment?", linkMap":"")+(this.config.trackMissing?", missing":"")+");\n"),e+=d("return {valid: !errors.length, errors: errors"+(this.config.assignment?", schemas: schemaMap":"")+(this.config.linkAssignment?", links: linkMap":"")+(this.config.trackMissing?", missing: missing":"")+"};\n"),e+="}\n"),e},validationCode:function(a,b,c,e,g,h,i){var j=e.type||["null","boolean","number","string","object","array"];Array.isArray(j)||(j=[j]);for(var k=function(a){return-1!==j.indexOf(a)},l="dataPath",m=0;m<b.length;m++){var n=b[m];'"'===n[0]&&'"'==l[l.length-1]?l=l.substring(0,l.length-1)+n.substring(1):l+=" + "+n}if(i===!0||i!==!1&&(this.missing(c)||this.schemaAcceptsType(e,"object"))){var o=this.classExprForUrl(c);return g(c),h(o+".validationErrors("+a+", "+l+(this.config.assignment?", schemaMap":"")+(this.config.linkAssignment?", linkMap":"")+(this.config.trackMissing?", missing":"")+")")}var p="",q=JSON.stringify(c);if(this.config.trackMissing&&!this.schemaStore.get(c)&&(p+="if (missing) {\n",p+=d("(missing["+l+"] = missing["+l+"] || []).push("+q+");\n"),p+="}\n"),this.config.assignment&&(p+="if (!schemaMap["+l+"]) {\n",p+=d("schemaMap["+l+"] = ["+q+"];\n"),p+="} else {\n",p+=d("schemaMap["+l+"].push("+q+");\n"),p+="}\n"),this.config.linkAssignment&&Array.isArray(e.links)&&e.links.length&&(p+="linkMap["+l+"] = (linkMap["+l+"] || []).concat([\n",p+=e.links.map(function(b,g){var h=[],i=b.href;if(i=i.replace(/(\{[^\(\}]*)\$([^\}]*\})/g,function(a,b,c){return b+"%73elf"+c}),i=i.replace(/(\{[^\(\}]*)\((([^\)\}]|\)\))*)\)([^\)\}]*\})/g,function(a,b,c,d,e){return c?b+encodeURIComponent(c)+e:b+"%65mpty"+e}),h.push("href: "+M(function(b){return"%73elf"===b?{code:a,type:e.type}:"%65mpty"===b?{code:f(a,""),type:((e.properties||{})[""]||{}).type}:(b=decodeURIComponent(b),{code:f(a,b),type:((e.properties||{})[b]||{}).type})},i)),h.push("rel: "+JSON.stringify(b.rel)),b.method&&h.push("method: "+JSON.stringify(b.method)),b.schema){var j=b.schema.id||this.extendUrl(c,["links",g,"schema"]);h.push("schema: "+JSON.stringify(j))}if(b.targetSchema){var j=b.schema.id||this.extendUrl(c,["links",g,"targetSchema"]);h.push("targetSchema: "+JSON.stringify(j))}return d("{\n"+h.map(d).join(",\n")+"\n}")}.bind(this)).join(",\n"),p+="\n]);\n"),e.allOf&&e.allOf.forEach(function(d,e){var d=this.getFullSchema(d),f=d&&d.id||this.extendUrl(c,["allOf",e]),i=this.validationCode(a,b,f,d,g,h);p+=i}.bind(this)),e.anyOf||e.oneOf){if(this.config.assignment&&(p+="var actualSchemaMap = schemaMap;\n"),this.config.linkAssignment&&(p+="var actualLinkMap = linkMap;\n"),p+="var actualErrors = errors;\n",e.anyOf&&(p+="var anyOfPassCount = 0;\n",this.config.subErrors&&(p+="var anyOfSubErrors = [];\n"),e.anyOf.forEach(function(e,f){p+="errors = [];\n",this.config.assignment&&(p+="schemaMap = {};\n"),this.config.linkAssignment&&(p+="linkMap = {};\n");var e=this.getFullSchema(e),i=e&&e.id||this.extendUrl(c,["anyOf",f]),j=this.validationCode(a,b,i,e,g,h,!0);p+=j,p+="if (!errors.length) {\n",this.config.assignment&&(p+=d("for (var key in schemaMap) {\n"),p+=d(d("actualSchemaMap[key] = (actualSchemaMap[key] || []).concat(schemaMap[key])\n")),p+=d("}\n")),this.config.linkAssignment&&(p+=d("for (var key in linkMap) {\n"),p+=d(d("actualLinkMap[key] = (actualLinkMap[key] || []).concat(linkMap[key])\n")),p+=d("}\n")),p+=d("anyOfPassCount++;\n"),p+="}\n",this.config.subErrors&&(p+="anyOfSubErrors["+f+"] = errors;\n")}.bind(this))),e.oneOf&&(p+="var oneOfPassCount = 0;\n",this.config.subErrors&&(p+="var oneOfSubErrors = [];\n"),e.oneOf.forEach(function(e,f){p+="errors = [];\n",this.config.assignment&&(p+="schemaMap = {};\n"),this.config.linkAssignment&&(p+="linkMap = {};\n");var e=this.getFullSchema(e),i=e&&e.id||this.extendUrl(c,["oneOf",f]),j=this.validationCode(a,b,i,e,g,h,!0);p+=j,p+="if (!errors.length) {\n",this.config.assignment&&(p+=d("if (!oneOfPassCount) {\n"),p+=d(d("for (var key in schemaMap) {\n")),p+=d(d(d("actualSchemaMap[key] = (actualSchemaMap[key] || []).concat(schemaMap[key])\n"))),p+=d(d("}\n")),p+=d("}\n")),this.config.linkAssignment&&(p+=d("if (!oneOfPassCount) {\n"),p+=d(d("for (var key in linkMap) {\n")),p+=d(d(d("actualLinkMap[key] = (actualLinkMap[key] || []).concat(linkMap[key])\n"))),p+=d(d("}\n")),p+=d("}\n")),p+=d("oneOfPassCount++;\n"),p+="}\n",this.config.subErrors&&(p+="oneOfSubErrors["+f+"] = errors;\n")}.bind(this))),this.config.assignment&&(p+="schemaMap = actualSchemaMap;\n"),this.config.linkAssignment&&(p+="linkMap = actualLinkMap;\n"),p+="errors = actualErrors;\n",e.anyOf){var r=this.config.subErrors?"{errors: anyOfSubErrors}":"{}";p+="if (!anyOfPassCount) {\n",p+=d(h("{code: "+JSON.stringify(L.ANY_OF_MISSING)+", params: "+r+", path: "+l+", schema: "+q+"}",!0)),p+="}\n"}if(e.oneOf){var r=this.config.subErrors?"{errors: oneOfSubErrors}":"{}";p+="if (!oneOfPassCount) {\n",p+=d(h("{code: "+JSON.stringify(L.ONE_OF_MISSING)+", params: "+r+", path: "+l+", schema: "+q+"}",!0)),p+="} else if (oneOfPassCount > 1) {\n",p+=d(h("{code: "+JSON.stringify(L.ONE_OF_MULTIPLE)+", params: "+r+", path: "+l+", schema: "+q+"}",!0)),p+="}\n"
}}var s={array:"",object:"",string:"",number:"","boolean":"","null":""};if(this.schemaAcceptsType(e,"array")){var t="";if("maxItems"in e&&(t+="if ("+a+".length > "+JSON.stringify(e.maxItems)+") {\n",t+=d(h("{code: "+JSON.stringify(L.ARRAY_LENGTH_LONG)+", params: {length: "+a+".length, maximum: "+JSON.stringify(e.maxItems)+"}, path:"+l+", schema: "+q+"}",!0)),t+="}\n"),e.minItems&&(t+="if ("+a+".length < "+JSON.stringify(e.minItems)+") {\n",t+=d(h("{code: "+JSON.stringify(L.ARRAY_LENGTH_SHORT)+", params: {length: "+a+".length, minimum: "+JSON.stringify(e.minItems)+"}, path:"+l+", schema: "+q+"}",!0)),t+="}\n"),Array.isArray(e.items)){if(e.items.forEach(function(e,f){var e=this.getFullSchema(e),i=e&&e.id||this.extendUrl(c,["items",f]),j=this.validationCode(a+"["+f+"]",b.concat(['"/0"']),i,e,g,h);t+="if ("+a+".length >= "+JSON.stringify(f)+") {\n",t+=d(j),t+="}\n"}.bind(this)),"additionalItems"in e)if(e.additionalItems){var u=this.getFullSchema(e.additionalItems),v=u&&u.id||this.extendUrl(c,["additionalItems"]),w=this.validationCode(a+"[i]",b.concat(['"/"',"i"]),v,u,g,h);t+="for (var i = "+JSON.stringify(e.items.length)+"; i < "+a+".length; i++) {\n",t+=d(w),t+="}\n"}else t+="if ("+a+".length > "+JSON.stringify(e.items.length)+") {\n",t+=d(h("{code: "+JSON.stringify(L.ARRAY_LENGTH_LONG)+", params: {length: "+a+".length, maximum: "+JSON.stringify(e.items.length)+"}, path:"+l+", schema: "+q+"}",!0)),t+="}\n"}else if("object"==typeof e.items){var u=this.getFullSchema(e.items),v=u&&u.id||this.extendUrl(c,["items"]);t+="for (var i = 0; i < "+a+".length; i++) {\n",t+=d(this.validationCode(a+"[i]",b.concat(['"/"',"i"]),v,u,g,h)),t+="}\n"}s.array+=t}else s.array+=h("{code: "+JSON.stringify(L.INVALID_TYPE)+', params: {type: "array", expected: '+JSON.stringify(j.join(", "))+"}, path: "+l+", schema: "+q+"}",!0);if(k("object")){var x="",y={},z=Object.keys(e.properties||{}).concat(Object.keys(e.dependencies||{})).concat(e.required||[]);if(z.forEach(function(i){if(!y[i]){y[i]=!0;var j=f(a,i),k="";if(e.properties&&e.properties[i]){var m=this.getFullSchema(e.properties[i]),n=m&&m.id||this.extendUrl(c,["properties",i]);k+=this.validationCode(j,b.concat([JSON.stringify("/"+i.replace(/~/g,"~0").replace(/\//g,"~1"))]),n,m,g,h)}if(e.dependencies&&i in e.dependencies)if(Array.isArray(e.dependencies[i])||"string"==typeof e.dependencies[i]){var o=Array.isArray(e.dependencies[i])?e.dependencies[i]:[e.dependencies[i]];o.forEach(function(b){k+="if (!("+JSON.stringify(b)+" in "+a+")) {\n",k+=d(h("{code: "+JSON.stringify(L.OBJECT_DEPENDENCY_KEY)+", params: {key: "+JSON.stringify(i)+", missing: "+JSON.stringify(b)+"}, path:"+l+", schema: "+q+"}",!0)),k+="}\n"})}else{var m=this.getFullSchema(e.dependencies[i]),n=m&&m.id||this.extendUrl(c,["dependencies",i]);k+=this.validationCode(a,b,n,m,g,h)}x+="if ("+JSON.stringify(i)+" in "+a+") {\n",x+=d(k),this.schemaRequiresProperty(e,i)&&(x+="} else {\n",x+=d(h("{code: "+JSON.stringify(L.OBJECT_REQUIRED)+", params: {key: "+JSON.stringify(i)+"}, path:"+l+", schema: "+q+"}",!0))),x+="}\n"}}.bind(this)),(e.patternProperties||"additionalProperties"in e||"maxProperties"in e||"minProperties"in e)&&(x+="var keys = Object.keys("+a+");\n","maxProperties"in e&&(x+="if (keys.length > "+JSON.stringify(e.maxProperties)+") {\n",x+=d(h("{code: "+JSON.stringify(L.OBJECT_PROPERTIES_MAXIMUM)+", params: {propertyCount: keys.length, maximum: "+JSON.stringify(e.maxProperties)+"}, path:"+l+", schema: "+q+"}",!0)),x+="}\n"),"minProperties"in e&&(x+="if (keys.length < "+JSON.stringify(e.minProperties)+") {\n",x+=d(h("{code: "+JSON.stringify(L.OBJECT_PROPERTIES_MINIMUM)+", params: {propertyCount: keys.length, minimum: "+JSON.stringify(e.minProperties)+"}, path:"+l+", schema: "+q+"}",!0)),x+="}\n")),e.patternProperties||"additionalProperties"in e){x+="var knownKeys = {"+Object.keys(e.properties||{}).map(function(a){return JSON.stringify(a)+": true"}).join(", ")+"};\n",x+="for (var i = 0; i < keys.length; i++) {\n",x+=d("var key = keys[i];\n"),e.patternProperties&&"additionalProperties"in e&&(x+=d("var matched = false;\n"));var A=a+"[key]";for(var B in e.patternProperties){var C="/"+B.replace(/\//g,"\\/")+"/",u=this.getFullSchema(e.patternProperties[B]),v=u&&u.id||this.extendUrl(c,["patternProperties",B]);x+=d("if ("+C+".test(key)) {\n"),x+=d(d(this.validationCode(A,b.concat(['"/"',"pointerEscape(key)"]),v,u,g,h))),"additionalProperties"in e&&(x+=d(d("matched = true;\n"))),x+=d("}")}if("additionalProperties"in e){if(x+=d(e.patternProperties?"if (!matched && !knownKeys[key]) {\n":"if (!knownKeys[key]) {\n"),e.additionalProperties){if("object"==typeof e.additionalProperties){var u=this.getFullSchema(e.additionalProperties),v=u&&u.id||this.extendUrl(c,["additionalProperties"]);x+=d(d(this.validationCode(A,b.concat(['"/"',"pointerEscape(key)"]),v,u,g,h)))}}else x+=d(d(h("{code: "+JSON.stringify(L.OBJECT_ADDITIONAL_PROPERTIES)+", params: {key: key}, path:"+l+", schema: "+q+"}",!0)));x+=d("}\n")}x+="}\n"}s.object+=x}else s.object+=h("{code: "+JSON.stringify(L.INVALID_TYPE)+", params: {type: typeof "+a+", expected: "+JSON.stringify(j.join(", "))+"}, path:"+l+", schema: "+q+"}",!0);if(k("string")){var D="",E=a+".length";if(this.config.unicodeLength&&(e.minLength||"maxLength"in e)&&(D+="var stringLength = unicodeLength("+a+");\n",E="stringLength"),e.minLength&&(D+="if ("+E+" < "+JSON.stringify(e.minLength)+") {\n",D+=d(h("{code: "+JSON.stringify(L.STRING_LENGTH_SHORT)+", params: {length: "+E+", minimum: "+JSON.stringify(e.minLength)+"}, path:"+l+", schema: "+q+"}",!0)),D+="}\n"),"maxLength"in e&&(D+="if ("+E+" > "+JSON.stringify(e.maxLength)+") {\n",D+=d(h("{code: "+JSON.stringify(L.STRING_LENGTH_LONG)+", params: {length: "+E+", maximum: "+JSON.stringify(e.maxLength)+"}, path:"+l+", schema: "+q+"}",!0)),D+="}\n"),e.pattern){var C="/"+(e.pattern+"").replace(/\//g,"\\/")+"/";D+="if (!"+C+".test("+a+")) {\n",D+=d(h("{code: "+JSON.stringify(L.STRING_PATTERN)+", params: {pattern: "+JSON.stringify(e.pattern)+"}, path:"+l+", schema: "+q+"}",!0)),D+="}\n"}s.string+=D}else s.string+=h("{code: "+JSON.stringify(L.INVALID_TYPE)+", params: {type: typeof "+a+", expected: "+JSON.stringify(j.join(", "))+"}, path:"+l+", schema: "+q+"}",!0);if(k("number")||k("integer")){var F="",G=e.multipleOf||e.divisibleBy;this.schemaAcceptsType(e,"number")||!isNaN(G)&&G%1===0||(F+="if ("+a+"%1 !== 0) {\n",F+=d(h("{code: "+JSON.stringify(L.INVALID_TYPE)+', params: {type: "number", expected: "integer"}, path:'+l+", schema: "+q+"}",!0)),F+="}\n"),(e.multipleOf||e.divisibleBy)&&(F+="if (("+a+"/"+JSON.stringify(G)+")%1 !== 0) {\n",F+=d(h("{code: "+JSON.stringify(L.NUMBER_MULTIPLE_OF)+", params: {multipleOf: "+JSON.stringify(G)+"}, path:"+l+", schema: "+q+"}",!0)),F+="}\n"),"minimum"in e&&(e.exclusiveMinimum?(F+="if ("+a+" <= "+JSON.stringify(e.minimum)+") {\n",F+=d(h("{code: "+JSON.stringify(L.NUMBER_MINIMUM_EXCLUSIVE)+", params: {value: "+a+", minimum: "+JSON.stringify(e.minimum)+"}, path:"+l+", schema: "+q+"}",!0)),F+="}\n"):(F+="if ("+a+" < "+JSON.stringify(e.minimum)+") {\n",F+=d(h("{code: "+JSON.stringify(L.NUMBER_MINIMUM)+", params: {value: "+a+", minimum: "+JSON.stringify(e.minimum)+"}, path:"+l+", schema: "+q+"}",!0)),F+="}\n")),"maximum"in e&&(e.exclusiveMaximum?(F+="if ("+a+" >= "+JSON.stringify(e.maximum)+") {\n",F+=d(h("{code: "+JSON.stringify(L.NUMBER_MAXIMUM_EXCLUSIVE)+", params: {value: "+a+", maximum: "+JSON.stringify(e.maximum)+"}, path:"+l+", schema: "+q+"}",!0)),F+="}\n"):(F+="if ("+a+" > "+JSON.stringify(e.maximum)+") {\n",F+=d(h("{code: "+JSON.stringify(L.NUMBER_MAXIMUM)+", params: {value: "+a+", maximum: "+JSON.stringify(e.maximum)+"}, path:"+l+", schema: "+q+"}",!0)),F+="}\n")),s.number+=F}else s.number+=h("{code: "+JSON.stringify(L.INVALID_TYPE)+", params: {type: typeof "+a+", expected: "+JSON.stringify(j.join(", "))+"}, path:"+l+", schema: "+q+"}",!0);k("boolean")||(s["boolean"]+=h("{code: "+JSON.stringify(L.INVALID_TYPE)+", params: {type: typeof "+a+", expected: "+JSON.stringify(j.join(", "))+"}, path:"+l+", schema: "+q+"}",!0)),k("null")||(s["null"]+=h("{code: "+JSON.stringify(L.INVALID_TYPE)+', params: {type: "null", expected: '+JSON.stringify(j.join(", "))+"}, path:"+l+", schema: "+q+"}",!0)),p+="if (Array.isArray("+a+")) {\n",p+=d(s.array),p+="} else if ("+a+" == null) {\n",p+=d(s["null"]);var H={};H[s.object]=(H[s.object]||[]).concat(["object"]),H[s.string]=(H[s.string]||[]).concat(["string"]),H[s.number]=(H[s.number]||[]).concat(["number"]),H[s["boolean"]]=(H[s["boolean"]]||[]).concat(["boolean"]);var I=Object.keys(H);return I.sort(function(a,b){return a?b?H[a].length-H[b].length:-1:1}),I.forEach(function(b,c){if(c===I.length-1)b&&(p+="} else {\n");else{var e=H[b].map(function(b){return"typeof "+a+" === "+JSON.stringify(b)}).join(" || ");p+="} else if ("+e+") {\n"}p+=d(b)}),p+="}\n"},classes:function(a,b){if(!this._codeInvalid&&this._classes)return this._classes;var c=this.code();delete this._code;try{var d=new Function("superclass","classes","request","return "+c+"(superclass, classes, request)")}catch(e){throw e.code=c,e}return this._classes=d(a,this._classes,b)}},I.schema2js=J;var L=I.ErrorCodes=J.ErrorCodes,O="object"==typeof process&&"function"==typeof process.nextTick?process.nextTick.bind(process):function(a){setTimeout(a,0)},P=function(a,b,c){"function"==typeof b&&(c=b,b=a,a=null);var d=null,e=null;return function(){var f=this,g=arguments,h=function(){clearTimeout(d),clearTimeout(e),d=e=null,c.apply(f,g)};a&&(e&&clearTimeout(e),e=setTimeout(h,a)),d=d||setTimeout(h,b)}},Q=J.util.parseUrl,b=J.util.resolveUrl,R=function(a,c,d){c=b(a,c);var e=a;if(d||c!==e){var f=Q(e),g=f.protocol+f.authority,h=a.replace(/[#?].*/g,"").replace(/\/$/,"");return d||c.substring(0,h.length)!==h?c.substring(0,g.length)===g&&(c=c.substring(g.length)):c=c.substring(h.length),c}};I.util={pointerEscape:h,pointerUnescape:i,splitHeader:j,parseLink:k,url:{parse:Q,resolve:b,relative:R,parseQuery:l,encodeQuery:m,encodeQueryComponent:n},timer:{asap:O,wait:P}},o.prototype={on:function(a,b){return this._events=this._events||{},this._events[a]=this._events[a]||[],this._events[a].push(b),this.emit("newListener",a,b),this},once:function(a,b){var c=function(){this.off(a,c),b.apply(this,arguments)};return this.on(a,c)},off:function(a,b){if(b){if(a){this._events=this._events||{},this._events[a]=this._events[a]||[];var c=this._events[a].indexOf(b);-1!==c&&this._events[a].splice(c,1),this.emit("removeListener",a,b)}}else if(a){for(var d=this._events&&this._events[a]||[];d.length;)this.emit("removeListener",a,d.shift());this._events[a]=[]}else for(a in this._events||{})this.off(a);return this},removeListener:function(a,b){if("function"!=typeof b)throw new Error("Listener must be function");return this.off(a,b)},emit:function(a){var b=Array.prototype.slice.call(arguments,1);if(this._events&&this._events[a]){for(var c=this._events[a].slice();c.length;){var d=c.shift();d.apply(this,b)}return!0}return!1}},o.prototype.addListener=o.prototype.on,o.prototype.removeAllListeners=o.prototype.off,o.addMethods=function(a){for(var b in o.prototype)a[b]=o.prototype[b];return a},I.EventEmitter=o;var S=function(a){throw new Error("Requests not enabled - try JsonModel.setRequestFunction(func):\n"+JSON.stringify(a))},T=S;I.setRequestFunction=function(a){T=a||S};var U,V,W,X={classes:!1,assignment:!0,linkAssignment:!0,trackMissing:!0,schemaStore:U,directMethods:!1},Y=I.clean=function(a){if(a)return ab(function(){Y(),a()});$={},Z={};var b=Object.create(X);b.schemaStore=U=I.schemaStore=new J.SchemaStore,V=new J.Generator(b),W=V.classes(null,p),I.setRequestFunction(null)};Y(),I.validator=function(a,b){b=b||function(){};var c=function(a){return function(b){var c={},d={},e={},f=a(b,"",c,d,e);return{valid:!f.length,errors:f,schemas:c,links:d,missing:e}}},d=c(I.validationErrors(a,function(a){b(a,d)}));return d},I.validationErrors=function(a,b){if(b=b||function(){},"string"==typeof a){V.missing(a)&&V.addSchema(a);var c=V.classNameForUrl(a),d=function(b,d,e,f,g){return W[c]?W[c].validationErrors(b,d,e,f,g):(e&&(e[""]=e[""]||[],e[""].push(a)),g&&(g[""]=g[""]||[],g[""].push(a)),[])};return ab(function(){b(null,d)}),d}var e=new J.Generator(X),f="AnonymousSchema";e.addSchema(a,f);var g=e.classes(),d=g[f].validationErrors,h=e.missing();return h.forEach(function(a){V.missing(a)&&V.addSchema(a)}),ab(function(){h.forEach(function(a){var b=V.classNameForUrl(a);g[e.classNameForUrl(a)]=W[b]}),b(null,d)}),h.forEach(function(a){var b=V.classNameForUrl(a);W[b]&&(g[e.classNameForUrl(a)]=W[b])}),d},q.prototype={_cache:function(a,b){return this[a]=function(){return b},b},_cacheArray:function(a,b){return this[a]=function(){return b.slice(0)},b.slice(0)},titles:function(){return this._cacheArray("titles",this._schemas.map(function(a){return a.title}))},knownKeys:function(){function a(a){c[a]||(c[a]=!0,b.push(a))}var b=[],c={};return this._schemas.forEach(function(b){(b.propertyOrder||[]).forEach(a),(b.required||[]).forEach(a);for(var c in b.properties||{})a(c)}),b},prop:function(a){if(this._props[a])return this._props[a];for(var b=[],c=0;c<this._schemas.length;c++){var d=this._schemas[c],e=!1;if(d.properties&&d.properties[a]&&(b.push(d.properties[a]),e=!0),d.patternProperties)for(var f in patternProperties){var g=this._patterns[f]=this._patterns[f]||new RegExp(f);g.test(a)&&(b.push(d.patternProperties[f]),e=!0)}if(!e&&"additionalProperties"in d&&!d.additionalProperties){b=[!1];break}}return this._props[a]=new q(b)},item:function(){for(var a=[],b=!1,c=0;c<this._schemas.length;c++){var d=this._schemas[c];if(d.items){if(Array.isArray(d.items))throw b=!0,new Error("array tuples not supported yet");a.push(d.items)}}if(b)throw new Error("Array tuples not supported yet");return this._cache("item",new q(a))}},s.prototype={},u.prototype={url:function(){return this._root.url+(this._path&&"#"+encodeURI(this._path))},resolveUrl:function(a){return b(this._root.url,a)},relativeUrl:function(a,b){return R(this._root.url,a,b)},httpStatus:function(){return this._root.http.status},httpHeaders:function(a,b){"boolean"==typeof a&&(b=a,a=null);var c=this._root.http.headers,d={};for(var e in c)d[e]=b?j(c[e]):c[e],a&&a(e,d[e]);return d},httpHeader:function(a,b){var c=this._root.http.headers[a.toLowerCase()]||null;return b?j(c):c},ready:function(){return this._root.ready},whenReady:function(a){this._root.whenReady(a.bind(null,null,this))},get:function(a){return this._root.getPathValue(this._path+t(a))},set:function(a,b){return arguments.length<2&&(b=a,a=""),this._root.setPathValue(this._path+t(a),b)},up:function(a){"number"!=typeof a&&(a=1);var b=this._path.split("/");return b=b.slice(0,b.length-a),this._root.modelForPath(b.join("/"))},path:function(a){return this._root.modelForPath(this._path+t(a))},pointer:function(){return this._path},length:function(a){var b=this.get(a);return Array.isArray(b)?b.length:0},item:function(a){return this._root.modelForPath(this._path+"/"+h(a+""))},items:function(a){for(var b=this.length(),c=0;b>c;c++)a(this.item(c),c);return this},map:function(a){var b=[];return this.items(function(c,d){var e=a(c,d);"undefined"!=typeof e&&b.push(e)}),b},keys:function(a){var b=this.get(a);return!b||Array.isArray(b)||"object"!=typeof b?[]:Object.keys(b)},has:function(a){return"undefined"!==this.jsonType(a)},prop:function(a){return this._root.modelForPath(this._path+"/"+h(a+""))},props:function(a,b){"function"==typeof a&&(b=a,a=null),a=a||this.keys();for(var c=0;c<a.length;c++)b(this.prop(a[c]),a[c],c);return this},mapProps:function(a,b){if("function"==typeof a){var c={};return this.props(function(b,d,e){var f=a(b,d,e);"undefined"!=typeof f&&(c[d]=f)}),c}for(var c=[],d=0;d<a.length;d++){var e=b(this.prop(a[d]),a[d],d);"undefined"!=typeof e&&c.push(e)}return c},schemas:function(a){return this._root.getPathSchemas(this._path+t(a))},schemaSet:function(a){return this._root.getPathSchemaSet(this._path+t(a))},links:function(a){return this._root.getPathLinks(this._path,a)},link:function(a,b){return this.links(a)[b||0]||null},hasSchema:function(a,b){return"string"!=typeof b&&(b=a,a=null),-1!==this.schemas(a).indexOf(b)},errors:function(a,b,c){return a===!0||a===!1?(c=b,b=a,a=""):null==a&&(a=""),a+="",a&&"/"!==a.charAt(0)&&(a="/"+h(a)),this._root.getPathErrors(this._path+a,b,c)},jsonType:function(a){var b=this.get(a);return void 0===b?"undefined":null===b?"null":Array.isArray(b)?"array":typeof b},toJSON:function(){return this.get()}},o.addMethods(u.prototype),v.prototype={open:function(a,b){return"function"==typeof a&&(b=a,a=null),this._root.dataStore.open(this,b)}};var Z={},$={},_=[];I.schemasFetched=function(){return!V.missing().length};var ab=I.whenSchemasFetched=function(a){a&&_.push(a),V.missing().forEach(function(a){var b=a.replace(/#.*/,"");return U.missing(a)&&U.missing(b)?(a=b,void(Z[a]||(Z[a]=!0,p({method:"GET",url:a},function(b,c,d){delete Z[a],b?("undefined"!=typeof console&&console.error&&console.error("Error fetching "+a+":",b),b.httpStatus=b.httpStatus||d,$[a]=b,V.addSchema(a,null)):V.addSchema(a,c||null),w()})))):w(!0)}),w(!0),O(w)};x.prototype={normParams:function(a){return"string"==typeof a?this.normParams({url:a}):{url:b(this.baseUrl,a.url||a.href).replace(/#.*/,""),fragment:(a.url||a.href).replace(/[^#]*#?/,""),method:(a.method||"GET").toUpperCase(),headers:a.headers||{},targetSchema:a.targetSchema||a.hint?[a.targetSchema||a.hint]:[]}},_pokeRootModel:function(a,b){var c=this;return this._store[a]=this._store[a]||b,clearTimeout(this._removeTimeouts[a]),this._removeTimeouts[a]=setTimeout(function(){delete c._store[a],delete c._removeTimeouts[a]},this.config.keepMs),b},_getRootModel:function(a,b){return this._store[a]?this._store[a]:b?this._store[a]=this._pokeRootModel(a,new s(this,a)):null},_keyForParams:function(a){return a.method+" "+a.url},open:function(a,b){if(a=this.normParams(a),a.fragment&&"/"!==a.fragment.charAt(0))throw new Error("Non-pointer fragments not currently supported: #"+a.fragment);var c=this._keyForParams(a),d=this._getRootModel(c),e=this._getRootModel(c,!0);e.url=a.url;var f=e.modelForPath(a.fragment||"");if(d)return console.log("Cached:",c),b&&f.whenReady(b),f;var g=e.pendingOperation();return p(a,function(c,d,h,i){var l=[],m={};for(var n in i||{})m[n.toLowerCase()]=i[n]+"";j(m.link).forEach(function(a){var a=k(a);"describedby"===a.rel.toLowerCase()&&l.push(a.href)}),l.length||c||(l=[],a.targetSchema&&l.push(a.targetSchema)),e.reset("undefined"!=typeof d?d:null,l),e.http={status:h||null,headers:m},g(),b&&f.whenReady(function(){b(c,f)})}),f},create:function(a,b,c,d){Array.isArray(b)&&(d=c,c=b,b=null),"function"==typeof b?(d=b,b=c=null):"function"==typeof c&&(d=c,c=null),"string"!=typeof b&&(b="tmp://"+Math.random().toString().substring(2)),("string"==typeof c||c&&"object"==typeof c&&!Array.isArray(c))&&(c=[c]),c=c||[];var e=this.normParams(b);if(e.fragment)throw new Error("URL fragments not allowed in create()");var f=this._keyForParams(e),g=this._getRootModel(f,!0),h=g.modelForPath("");return g.url=e.url,g.reset(a,c),g.http={status:null,headers:{}},d&&h.whenReady(d),h}},I.dataStore=new x,"undefined"!=typeof window&&window&&window.location&&"string"==typeof window.location.href&&(I.dataStore.baseUrl=window.location.href),I.open=function(a,b,c){return I.dataStore.open(a,b,c)},I.create=function(a,b,c,d){return I.dataStore.create(a,b,c,d)},I.extend=function(a){Object.keys(a).forEach(function(b){u.prototype[b]=a[b]})},I.is=function(a){return a instanceof u},"function"==typeof XMLHttpRequest&&I.setRequestFunction(function(a,b){if("GET"!==a.method)throw new Error("Only GET supported for now");var c=new XMLHttpRequest;try{c.open(a.method,a.url,!0,a.user,a.password)}catch(d){return O(function(){b(d)})}c.responseType="text",c.onreadystatechange=function(){if(4===c.readyState){var a=null;(c.status<200||c.status>299)&&(a=new Error(c.status+" "+c.statusText));var d={};c.getAllResponseHeaders().split(/\r?\n/g).forEach(function(a){if(a){var b=/^([^\:\s]+)\s*\:\s*(.*)$/.exec(a);if(!b)throw new Error("Failed header parse:",JSON.stringify(a));var c=b[1].toLowerCase(),e=b[2];d[c]=e.length>1?e:e[0]}});var e=c.responseText;try{e=JSON.parse(e)}catch(f){a=a||f}b(a,e,c.status,d)}};for(var e in a.headers)c.setRequestHeader(e,a.headers[e]);c.send()});var O=I.util.timer.asap,b=I.util.url.resolve,Q=I.util.url.parse;I.util.tag=A;var bb={"class":function(a,b){null===b?(a.className="",a.removeAttribute("class")):a.setAttribute("class",a.className=b||"")}};F.prototype={},G.prototype={_options:function(){return this.parent._state!==this._parentState&&(this._concatOptions=this._immediateOptions.concat(this.parent._options()),this._needSort=!0,this._parentState=this.parent._state),this._needSort&&(this._needSort=!1,this._concatOptions.sort(function(a,b){return b.priority-a.priority||b.registerIndex-a.registerIndex})),this._concatOptions},addHtml:function(a,b,c){var d=Object.create(c||{});return d.canBind=a,d.html=b,this.add(d)},add:function(a){return this._state++,this._immediateOptions.push(new F(a,this._state)),this._parentState=null,this},select:function(a,b,c,d){for(var e=this._options(),f=(a.schemas(),0);f<e.length;f++){var g=e[f];if(g.canBind(a,b,c)&&-1===d.indexOf(g))return g}}},"function"==typeof require&&"undefined"!=typeof module&&(G.prototype.include=function(a){var b=require("path");if("string"==typeof a)try{a=require(b.resolve(a))}catch(c){a=require(a)}(a.js||[]).forEach(function(a){this.includeJs(a)}),(a.css||[]).forEach(function(a){this.includeCss(a)})},G.prototype.includeDir=function(a){var b=(require("path"),require("fs"),this),c=require("fs").readdirSync(a);c.sort(),c.forEach(function(c){/\.js$/i.test(c)?b.includeJs(a+"/"+c):/\.css$/i.test(c)&&b.includeCss(a+"/"+c)})},G.prototype.includeCss=function(a){var b=require("fs").readFileSync(a,{encoding:"utf-8"});b="/*** "+require("path").basename(a)+" ***/\n\n"+b,this._includeCss=((this._includeCss||"")+"\n\n"+b).replace(/^(\r?\n)*/g,"").replace(/(\r?\n)*$/g,"")},G.prototype.includeJs=function(a){var b=require("path");"."===a.charAt(0)&&(a=b.join(process.cwd(),a));var c=[];["bindings","JsonModel"].forEach(function(a){if(a in global){var b=global[a];c.push(function(){global[a]=b})}else c.push(function(){delete global[a]})}),global.bindings=this,global.JsonModel=I,require(b.resolve(a));var d=require("fs").readFileSync(a,{encoding:"utf-8"});for(d="/*** "+b.basename(a)+" ***/\n\n"+d,this._includeJs=((this._includeJs||"")+"\n\n"+d).replace(/^(\r?\n)*/g,"").replace(/(\r?\n)*$/g,"");c.length;)c.pop()()},G.prototype.bundleJs=function(a){var b=a?"":"(function (JsonModel, bindings) {\n\n",c=a?"":"\n\n})(JsonModel, JsonModel.bindings);",d=this._includeJs||"";return"function"==typeof this.parent.bundleJs&&(d=this.parent.bundleJs(!0)+(d?"\n\n":"")+d),b+d+c},I.bundleJs=function(a,b){"boolean"==typeof a&&(b=a,a=null),a=a||I.bindings;var c=["/json-model.js"].map(function(a){var b="/*** "+a+" ***/\n\n";return b+=require("fs").readFileSync(__dirname+a,{encoding:"utf-8"})});if(c.push(a.bundleJs()),b){var d='/*** CSS ***/\n\n(function (css) {\n var style = document.createElement("style");\n style.appendChild(document.createTextNode(css));\n document.head.appendChild(style);\n})';c.push(d+"("+JSON.stringify(this.bundleCss())+")")}return c.join("\n\n")},G.prototype.bundleCss=function(){var a=this._includeCss||"";return"function"==typeof this.parent.bundleCss&&(a=this.parent.bundleCss(!0)+(a?"\n\n":"")+a),a},I.bundleCss=function(a){return a=a||I.bindings,a.bundleCss()}),I.bindings=new G,I.navigateTo=function(a){a=I.util.url.resolve(window.location.href,a);var b=I.util.url.relative(window.location.href,a);return b===a?void(window.location.href=a):void("object"==typeof history&&"function"==typeof history.pushState?history.pushState(null,null,b):window.location.href="#"+encodeURI(b).replace(/#/g,"%23"))};var cb=["<JM--","-->"],db=/\u003cJM--(.*?)-->/g,eb="data-JMstoreKey",fb="data-JMpath",gb="data-JMuipath",hb="data-JMrevision";return H.prototype={_subContext:function(a,b,c,d){var e=Object.create(this._root);return e._model=a,e._usedBindings=[b],this._model===a&&(e._usedBindings=this._usedBindings.concat(e._usedBindings)),c=(c||"")+"",e.ui=this.ui.path(c),"object"!==e.ui.jsonType()&&e.ui.set("",{}),e.includeDataProperties=d||this.includeDataProperties,e},monitorLocation:function(a){var c=this,d=new I.EventEmitter,e=function(){return window.location.href},f=null,g=!1,h=!0,i=function(){if(!g){var i=e();if(i!==f){f=i;var j=i.replace(/^[^#]*/,"").substring(1);j=decodeURIComponent(j);var k=b(i.replace(/#.*/,""),j);console.log("New URL:",k);var l=c.stateForUrl(k),m=l[0],n=l[1]||{};console.log("New state:",m,n),m?(g=!0,d.emit("change",m,n,h),c.ui=c._dataStore.create(n),c.bind(m,a,function(){d.emit("change-done",m,n),g=!1})):(d.emit("ui",n),c.ui.set("",n)),h=!1}}};"object"==typeof history&&"function"==typeof history.pushState&&(window.onpopstate=i);setInterval(i,100);return d},navigateTo:function(a){I.navigateTo(a)},ajaxLink:function(a){var b=this;a.onclick=a.onclick||function(c){var d=a.getAttribute("href");return"string"==typeof d?(b.navigateTo(d),c.preventDefault(),!1):void 0}},selectBinding:function(a,b,c){return a===this._model?this._bindings.select(a,b,c,this._usedBindings):this._bindings.select(a,b,c,[])},errorHtml:function(a){return'<span class="error">Error: '+a.message.escapeHtml()+"</span>"},_renderInnerHtml:function(a,b,c,d,e){var f=this,g=b.html(a,c,d,this,function(a,b){if(a)return e(a,b);if("undefined"!=typeof g)throw new Error("Renderer must either return HTML string or call the callback, but not both");f.expandHtml(b,e)});"undefined"!=typeof g&&f.expandHtml(g,e)},_renderHtml:function(a,b,c,d,e){var f=this;b=b||"span",c=c||{};var g=function(){var g=f.selectBinding(a,b,c),h=f._subContext(a,g,d);h._renderInnerHtml(a,g,b,c,function(a,d){"undefined"!=typeof d&&(d=A(b,c,d)),e(a,d)})};a.ready()?g():a.whenReady(g)},expandHtml:function(a,b){var c=this;"string"!=typeof a&&(a+=""),a.asyncReplace(db,function(b,d,e){try{d=JSON.parse(d)}catch(f){return console.error(d,a),e(f)}d.tag=d.tag||"span",d.attrs=d.attrs||{},d.ui=d.ui||"";var g=c._dataStore._getRootModel(d.key);if(!g){var h=new Error("Missing from data store: "+d.key),i=c.errorHtml(h,d.tag,d.attrs);return e(h,A(d.tag,d.attrs,i))}var j=g.modelForPath(d.path);c.includeDataProperties&&(d.attrs[eb]=d.key,d.attrs[fb]=d.path,d.attrs[gb]=d.ui,d.attrs[hb]=g.state),c._renderHtml(j,d.tag,d.attrs,d.ui,e)},b)},_updateDom:function(a,b,c,d){function e(e,k){var l=(k+"").replace(db,function(a,b){try{b=JSON.parse(b)}catch(c){return e=e||c,i.errorHtml(c)}return b.tag=b.tag||"span",b.attrs=b.attrs||{},b.attrs[eb]=b.key,b.attrs[fb]=b.path,b.attrs[gb]=b.ui,A(b.tag,b.attrs)});"html"!==b&&"body"!==b&&(l='<span class="debug">'+i._usedBindings.length+" bindings used "+i.ui._path+"</span>"+l);var m=a.cloneNode(!1);m.innerHTML=l,i._coerceDom(a,m,null,function(i){if(a.pendingDomUpdate=!1,j===g._root.state)d(e||i);else{console.log("Model changed during rendering: "+g.url());var l=h.html(g,b,c,f,function(g,h){return h===k?d(e||i):(console.log("Re-rendering"),f._updateDom(a,b,c,d))});if("undefined"!=typeof l)return l===k?d(e||i):(console.log("Re-rendering"),f._updateDom(a,b,c,d))}})}if(a.pendingDomUpdate)return d(null);var f=this,g=a.boundJsonModel,h=a.boundBinding,i=a.boundContext;a.pendingDomUpdate=!0;var j=g._root.state,k=h.html(g,b,c,this,e);"undefined"!=typeof k&&e(null,k)},_renderDom:function(a,b,c,d){var e=this;y(b)||(console.log("Not attached to document:",b),O(function(){d(new Error("Not attached to document"))}));for(var f=b.tagName.toLowerCase(),g={},h=0;h<b.attributes.length;h++){var i=b.attributes[h];g[i.name]=i.value}a.whenReady(function(){function h(c){C(b,k,function(h){return j.bindDom(k,a,b),i!==a._root.state?(console.log("Model changed during initial render:",a.url()),e._updateDom(b,f,g,d)):void d(c||h)})}var i=a._root.state,j=e.selectBinding(a,f,g),k=e._subContext(a,j,c,!0);if(b.boundJsonModel){if(a===b.boundJsonModel)return e._updateDom(b,f,g,d);e.unbind(b)}if(b.boundJsonModel=a,b.boundBinding=j,b.boundContext=k,j.preferDom)return void a.whenReady(function(){e._updateDom(b,f,g,function(c){return j.bindDom(k,a,b),i!==a._root.state?(console.log("Model changed during initial render:",a.url()),e._updateDom(b,f,g,d)):void d(c)})});if(b.hasAttribute(eb)){var l=e._dataStore._getRootModel(b.getAttribute(eb));if(l){var m=l.modelForPath(b.getAttribute(fb));if(a===m){var n=l.state+"";if(n===b.getAttribute(hb))return h(null)}}}k._renderInnerHtml(a,j,f,g,function(a,c){c='<span class="debug">DOM/HTML render</span>'+c,b.innerHTML=c,h(a)})})},_coerceDom:function(a,b,c,d){var e=this;c=c||3;var f=E(a,b,c,!0);D(a,b,f,this,function(b){C(a,e,function(a){d(b||a)})})},_bindKeyPath:function(a,b,c,d,e){var f=this._dataStore._getRootModel(b);if(!f)return e(new Error("Model missing during bind sweep: "+b));var g=f.modelForPath(c);this.bind(g,a,d,e)},bind:function(a,b,c,d){"function"==typeof c&&(d=c,c=null),c=c||null;I.is(a)||(a=this._dataStore.open(a)),"string"==typeof b&&(b=document.getElementById(b)),d=d||function(){},this._renderDom(a,b,c,d)},unbind:function(a){a.boundJsonModel&&(a.boundBinding.unbindDom(a.boundContext,a.boundJsonModel,a),delete a.boundJsonModel,delete a.boundBinding,delete a.boundContext)}},H.placeholder=function(a,b,c,d){return a._root.pokeStore(),cb.join(JSON.stringify({key:a._root.storeKey,path:a._path,tag:b,attrs:c,ui:d}))},I.context=new H(I.bindings,I.dataStore),String.prototype.escapeHtml=function(){return this.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")},String.prototype.asyncReplace=function(a,b,c){var d=this,e=null,f={},g=1,h=function(){if(!--g){var b=d.replace(a,function(a){var b=arguments[arguments.length-2],c=b+"-"+a.length;return f[c]});c(e,b)}};return d.replace(a,function(a){g++;var c=arguments[arguments.length-2],d=c+"-"+a.length,i=Array.prototype.slice.call(arguments,0,b.length-1);i.push(function(a,c){return a?(e=e||a,f[d]=c||"",b=function(a){a(null,"")},h()):(f[d]=c,void h())}),b.apply(null,i)}),O(h),this},I.extend({getHtml:function(a){var b=this.get(a);return null==b&&(b=""),"function"==typeof b.toJSON&&(b=b.toJSON()),"object"==typeof b&&(b=JSON.stringify(b)),(b+"").escapeHtml()},getHtmlCss:function(a){var b=this.get(a);return null==b&&(b=""),(b+"").escapeHtml().replace(/;/g,",")},html:function(a,b,c){return"object"!=typeof b&&(c=b,b=void 0),b=b||{},a=z(a||"",b),H.placeholder(this,a,b,c)}}),I.bindings.add({priority:-1/0,canBind:function(a,b,c){return"value"in c?void 0:!0},html:function(a){return a.getHtml()}}),I.bindings.add({canBind:function(a,b,c){return"textarea"===b||"input"===b&&"text"===c.type?!0:void 0}}),I});
//# sourceMappingURL=json-model.min.js.map