1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704 |
-
-
-
-
- (function (window, Object, Array, Error, JSON, undefined ) {
-
-
-
-
-
-
- var partialComplete = varArgs(function( fn, args ) {
-
-
-
-
-
- var numBoundArgs = args.length;
-
- return varArgs(function( callArgs ) {
-
- for (var i = 0; i < callArgs.length; i++) {
- args[numBoundArgs + i] = callArgs[i];
- }
-
- args.length = numBoundArgs + callArgs.length;
-
- return fn.apply(this, args);
- });
- }),
-
-
- compose = varArgs(function(fns) {
-
- var fnsList = arrayAsList(fns);
-
- function next(params, curFn) {
- return [apply(params, curFn)];
- }
-
- return varArgs(function(startParams){
-
- return foldR(next, startParams, fnsList)[0];
- });
- });
-
-
- function compose2(f1, f2){
- return function(){
- return f1.call(this,f2.apply(this,arguments));
- }
- }
-
-
- function attr(key) {
- return function(o) { return o[key]; };
- }
-
-
- var lazyUnion = varArgs(function(fns) {
-
- return varArgs(function(params){
-
- var maybeValue;
-
- for (var i = 0; i < len(fns); i++) {
-
- maybeValue = apply(params, fns[i]);
-
- if( maybeValue ) {
- return maybeValue;
- }
- }
- });
- });
-
-
-
-
-
- function apply(args, fn) {
- return fn.apply(undefined, args);
- }
-
-
- function varArgs(fn){
-
- var numberOfFixedArguments = fn.length -1,
- slice = Array.prototype.slice;
-
-
- if( numberOfFixedArguments == 0 ) {
-
-
- return function(){
- return fn.call(this, slice.call(arguments));
- }
-
- } else if( numberOfFixedArguments == 1 ) {
-
-
- return function(){
- return fn.call(this, arguments[0], slice.call(arguments, 1));
- }
- }
-
-
-
-
-
-
- var argsHolder = Array(fn.length);
-
- return function(){
-
- for (var i = 0; i < numberOfFixedArguments; i++) {
- argsHolder[i] = arguments[i];
- }
-
- argsHolder[numberOfFixedArguments] =
- slice.call(arguments, numberOfFixedArguments);
-
- return fn.apply( this, argsHolder);
- }
- }
-
-
-
- function flip(fn){
- return function(a, b){
- return fn(b,a);
- }
- }
-
-
-
- function lazyIntersection(fn1, fn2) {
-
- return function (param) {
-
- return fn1(param) && fn2(param);
- };
- }
-
-
- function noop(){}
-
-
- function always(){return true}
-
-
- function functor(val){
- return function(){
- return val;
- }
- }
-
-
-
-
-
- function isOfType(T, maybeSomething){
- return maybeSomething && maybeSomething.constructor === T;
- }
-
- var len = attr('length'),
- isString = partialComplete(isOfType, String);
-
-
- function defined( value ) {
- return value !== undefined;
- }
-
-
- function hasAllProperties(fieldList, o) {
-
- return (o instanceof Object)
- &&
- all(function (field) {
- return (field in o);
- }, fieldList);
- }
-
- function cons(x, xs) {
-
-
-
-
- return [x,xs];
- }
-
-
- var emptyList = null,
-
-
- head = attr(0),
-
-
- tail = attr(1);
-
-
-
- function arrayAsList(inputArray){
-
- return reverseList(
- inputArray.reduce(
- flip(cons),
- emptyList
- )
- );
- }
-
-
- var list = varArgs(arrayAsList);
-
-
- function listAsArray(list){
-
- return foldR( function(arraySoFar, listItem){
-
- arraySoFar.unshift(listItem);
- return arraySoFar;
-
- }, [], list );
-
- }
-
-
- function map(fn, list) {
-
- return list
- ? cons(fn(head(list)), map(fn,tail(list)))
- : emptyList
- ;
- }
-
-
- function foldR(fn, startValue, list) {
-
- return list
- ? fn(foldR(fn, startValue, tail(list)), head(list))
- : startValue
- ;
- }
-
-
- function foldR1(fn, list) {
-
- return tail(list)
- ? fn(foldR1(fn, tail(list)), head(list))
- : head(list)
- ;
- }
-
-
-
- function without(list, test, removedFn) {
-
- return withoutInner(list, removedFn || noop);
-
- function withoutInner(subList, removedFn) {
- return subList
- ? ( test(head(subList))
- ? (removedFn(head(subList)), tail(subList))
- : cons(head(subList), withoutInner(tail(subList), removedFn))
- )
- : emptyList
- ;
- }
- }
-
-
- function all(fn, list) {
-
- return !list ||
- ( fn(head(list)) && all(fn, tail(list)) );
- }
-
-
- function applyEach(fnList, args) {
-
- if( fnList ) {
- head(fnList).apply(null, args);
-
- applyEach(tail(fnList), args);
- }
- }
-
-
- function reverseList(list){
-
-
-
- function reverseInner( list, reversedAlready ) {
- if( !list ) {
- return reversedAlready;
- }
-
- return reverseInner(tail(list), cons(head(list), reversedAlready))
- }
-
- return reverseInner(list, emptyList);
- }
-
- function first(test, list) {
- return list &&
- (test(head(list))
- ? head(list)
- : first(test,tail(list)));
- }
-
-
-
- function clarinet(eventBus) {
- "use strict";
-
- var
-
- emitSaxKey = eventBus(SAX_KEY).emit,
- emitValueOpen = eventBus(SAX_VALUE_OPEN).emit,
- emitValueClose = eventBus(SAX_VALUE_CLOSE).emit,
- emitFail = eventBus(FAIL_EVENT).emit,
-
- MAX_BUFFER_LENGTH = 64 * 1024
- , stringTokenPattern = /[\\"\n]/g
- , _n = 0
-
-
- , BEGIN = _n++
- , VALUE = _n++
- , OPEN_OBJECT = _n++
- , CLOSE_OBJECT = _n++
- , OPEN_ARRAY = _n++
- , CLOSE_ARRAY = _n++
- , STRING = _n++
- , OPEN_KEY = _n++
- , CLOSE_KEY = _n++
- , TRUE = _n++
- , TRUE2 = _n++
- , TRUE3 = _n++
- , FALSE = _n++
- , FALSE2 = _n++
- , FALSE3 = _n++
- , FALSE4 = _n++
- , NULL = _n++
- , NULL2 = _n++
- , NULL3 = _n++
- , NUMBER_DECIMAL_POINT = _n++
- , NUMBER_DIGIT = _n
-
-
- , bufferCheckPosition = MAX_BUFFER_LENGTH
- , latestError
- , c
- , p
- , textNode = ""
- , numberNode = ""
- , slashed = false
- , closed = false
- , state = BEGIN
- , stack = []
- , unicodeS = null
- , unicodeI = 0
- , depth = 0
- , position = 0
- , column = 0
- , line = 1
- ;
-
- function checkBufferLength () {
-
- var maxActual = 0;
-
- if (textNode.length > MAX_BUFFER_LENGTH) {
- emitError("Max buffer length exceeded: textNode");
- maxActual = Math.max(maxActual, textNode.length);
- }
- if (numberNode.length > MAX_BUFFER_LENGTH) {
- emitError("Max buffer length exceeded: numberNode");
- maxActual = Math.max(maxActual, numberNode.length);
- }
-
- bufferCheckPosition = (MAX_BUFFER_LENGTH - maxActual)
- + position;
- }
-
- eventBus(STREAM_DATA).on(handleData);
-
-
-
- eventBus(STREAM_END).on(handleStreamEnd);
-
- function emitError (errorString) {
- if (textNode) {
- emitValueOpen(textNode);
- emitValueClose();
- textNode = "";
- }
-
- latestError = Error(errorString + "\nLn: "+line+
- "\nCol: "+column+
- "\nChr: "+c);
-
- emitFail(errorReport(undefined, undefined, latestError));
- }
-
- function handleStreamEnd() {
- if( state == BEGIN ) {
-
-
-
-
-
-
-
-
-
-
-
-
-
- emitValueOpen({});
- emitValueClose();
-
- closed = true;
- return;
- }
-
- if (state !== VALUE || depth !== 0)
- emitError("Unexpected end");
-
- if (textNode) {
- emitValueOpen(textNode);
- emitValueClose();
- textNode = "";
- }
-
- closed = true;
- }
-
- function whitespace(c){
- return c == '\r' || c == '\n' || c == ' ' || c == '\t';
- }
-
- function handleData (chunk) {
-
-
-
-
- if (latestError)
- return;
-
- if (closed) {
- return emitError("Cannot write after close");
- }
-
- var i = 0;
- c = chunk[0];
-
- while (c) {
- p = c;
- c = chunk[i++];
- if(!c) break;
-
- position ++;
- if (c == "\n") {
- line ++;
- column = 0;
- } else column ++;
- switch (state) {
-
- case BEGIN:
- if (c === "{") state = OPEN_OBJECT;
- else if (c === "[") state = OPEN_ARRAY;
- else if (!whitespace(c))
- return emitError("Non-whitespace before {[.");
- continue;
-
- case OPEN_KEY:
- case OPEN_OBJECT:
- if (whitespace(c)) continue;
- if(state === OPEN_KEY) stack.push(CLOSE_KEY);
- else {
- if(c === '}') {
- emitValueOpen({});
- emitValueClose();
- state = stack.pop() || VALUE;
- continue;
- } else stack.push(CLOSE_OBJECT);
- }
- if(c === '"')
- state = STRING;
- else
- return emitError("Malformed object key should start with \" ");
- continue;
-
- case CLOSE_KEY:
- case CLOSE_OBJECT:
- if (whitespace(c)) continue;
-
- if(c===':') {
- if(state === CLOSE_OBJECT) {
- stack.push(CLOSE_OBJECT);
-
- if (textNode) {
-
-
- emitValueOpen({});
- emitSaxKey(textNode);
- textNode = "";
- }
- depth++;
- } else {
- if (textNode) {
- emitSaxKey(textNode);
- textNode = "";
- }
- }
- state = VALUE;
- } else if (c==='}') {
- if (textNode) {
- emitValueOpen(textNode);
- emitValueClose();
- textNode = "";
- }
- emitValueClose();
- depth--;
- state = stack.pop() || VALUE;
- } else if(c===',') {
- if(state === CLOSE_OBJECT)
- stack.push(CLOSE_OBJECT);
- if (textNode) {
- emitValueOpen(textNode);
- emitValueClose();
- textNode = "";
- }
- state = OPEN_KEY;
- } else
- return emitError('Bad object');
- continue;
-
- case OPEN_ARRAY:
- case VALUE:
- if (whitespace(c)) continue;
- if(state===OPEN_ARRAY) {
- emitValueOpen([]);
- depth++;
- state = VALUE;
- if(c === ']') {
- emitValueClose();
- depth--;
- state = stack.pop() || VALUE;
- continue;
- } else {
- stack.push(CLOSE_ARRAY);
- }
- }
- if(c === '"') state = STRING;
- else if(c === '{') state = OPEN_OBJECT;
- else if(c === '[') state = OPEN_ARRAY;
- else if(c === 't') state = TRUE;
- else if(c === 'f') state = FALSE;
- else if(c === 'n') state = NULL;
- else if(c === '-') {
- numberNode += c;
- } else if(c==='0') {
- numberNode += c;
- state = NUMBER_DIGIT;
- } else if('123456789'.indexOf(c) !== -1) {
- numberNode += c;
- state = NUMBER_DIGIT;
- } else
- return emitError("Bad value");
- continue;
-
- case CLOSE_ARRAY:
- if(c===',') {
- stack.push(CLOSE_ARRAY);
- if (textNode) {
- emitValueOpen(textNode);
- emitValueClose();
- textNode = "";
- }
- state = VALUE;
- } else if (c===']') {
- if (textNode) {
- emitValueOpen(textNode);
- emitValueClose();
- textNode = "";
- }
- emitValueClose();
- depth--;
- state = stack.pop() || VALUE;
- } else if (whitespace(c))
- continue;
- else
- return emitError('Bad array');
- continue;
-
- case STRING:
-
- var starti = i-1;
-
- STRING_BIGLOOP: while (true) {
-
-
- while (unicodeI > 0) {
- unicodeS += c;
- c = chunk.charAt(i++);
- if (unicodeI === 4) {
-
- textNode += String.fromCharCode(parseInt(unicodeS, 16));
- unicodeI = 0;
- starti = i-1;
- } else {
- unicodeI++;
- }
-
- if (!c) break STRING_BIGLOOP;
- }
- if (c === '"' && !slashed) {
- state = stack.pop() || VALUE;
- textNode += chunk.substring(starti, i-1);
- if(!textNode) {
- emitValueOpen("");
- emitValueClose();
- }
- break;
- }
- if (c === '\\' && !slashed) {
- slashed = true;
- textNode += chunk.substring(starti, i-1);
- c = chunk.charAt(i++);
- if (!c) break;
- }
- if (slashed) {
- slashed = false;
- if (c === 'n') { textNode += '\n'; }
- else if (c === 'r') { textNode += '\r'; }
- else if (c === 't') { textNode += '\t'; }
- else if (c === 'f') { textNode += '\f'; }
- else if (c === 'b') { textNode += '\b'; }
- else if (c === 'u') {
-
- unicodeI = 1;
- unicodeS = '';
- } else {
- textNode += c;
- }
- c = chunk.charAt(i++);
- starti = i-1;
- if (!c) break;
- else continue;
- }
-
- stringTokenPattern.lastIndex = i;
- var reResult = stringTokenPattern.exec(chunk);
- if (!reResult) {
- i = chunk.length+1;
- textNode += chunk.substring(starti, i-1);
- break;
- }
- i = reResult.index+1;
- c = chunk.charAt(reResult.index);
- if (!c) {
- textNode += chunk.substring(starti, i-1);
- break;
- }
- }
- continue;
-
- case TRUE:
- if (!c) continue;
- if (c==='r') state = TRUE2;
- else
- return emitError( 'Invalid true started with t'+ c);
- continue;
-
- case TRUE2:
- if (!c) continue;
- if (c==='u') state = TRUE3;
- else
- return emitError('Invalid true started with tr'+ c);
- continue;
-
- case TRUE3:
- if (!c) continue;
- if(c==='e') {
- emitValueOpen(true);
- emitValueClose();
- state = stack.pop() || VALUE;
- } else
- return emitError('Invalid true started with tru'+ c);
- continue;
-
- case FALSE:
- if (!c) continue;
- if (c==='a') state = FALSE2;
- else
- return emitError('Invalid false started with f'+ c);
- continue;
-
- case FALSE2:
- if (!c) continue;
- if (c==='l') state = FALSE3;
- else
- return emitError('Invalid false started with fa'+ c);
- continue;
-
- case FALSE3:
- if (!c) continue;
- if (c==='s') state = FALSE4;
- else
- return emitError('Invalid false started with fal'+ c);
- continue;
-
- case FALSE4:
- if (!c) continue;
- if (c==='e') {
- emitValueOpen(false);
- emitValueClose();
- state = stack.pop() || VALUE;
- } else
- return emitError('Invalid false started with fals'+ c);
- continue;
-
- case NULL:
- if (!c) continue;
- if (c==='u') state = NULL2;
- else
- return emitError('Invalid null started with n'+ c);
- continue;
-
- case NULL2:
- if (!c) continue;
- if (c==='l') state = NULL3;
- else
- return emitError('Invalid null started with nu'+ c);
- continue;
-
- case NULL3:
- if (!c) continue;
- if(c==='l') {
- emitValueOpen(null);
- emitValueClose();
- state = stack.pop() || VALUE;
- } else
- return emitError('Invalid null started with nul'+ c);
- continue;
-
- case NUMBER_DECIMAL_POINT:
- if(c==='.') {
- numberNode += c;
- state = NUMBER_DIGIT;
- } else
- return emitError('Leading zero not followed by .');
- continue;
-
- case NUMBER_DIGIT:
- if('0123456789'.indexOf(c) !== -1) numberNode += c;
- else if (c==='.') {
- if(numberNode.indexOf('.')!==-1)
- return emitError('Invalid number has two dots');
- numberNode += c;
- } else if (c==='e' || c==='E') {
- if(numberNode.indexOf('e')!==-1 ||
- numberNode.indexOf('E')!==-1 )
- return emitError('Invalid number has two exponential');
- numberNode += c;
- } else if (c==="+" || c==="-") {
- if(!(p==='e' || p==='E'))
- return emitError('Invalid symbol in number');
- numberNode += c;
- } else {
- if (numberNode) {
- emitValueOpen(parseFloat(numberNode));
- emitValueClose();
- numberNode = "";
- }
- i--;
- state = stack.pop() || VALUE;
- }
- continue;
-
- default:
- return emitError("Unknown state: " + state);
- }
- }
- if (position >= bufferCheckPosition)
- checkBufferLength();
- }
- }
-
-
-
- function ascentManager(oboeBus, handlers){
- "use strict";
-
- var listenerId = {},
- ascent;
-
- function stateAfter(handler) {
- return function(param){
- ascent = handler( ascent, param);
- }
- }
-
- for( var eventName in handlers ) {
-
- oboeBus(eventName).on(stateAfter(handlers[eventName]), listenerId);
- }
-
- oboeBus(NODE_SWAP).on(function(newNode) {
-
- var oldHead = head(ascent),
- key = keyOf(oldHead),
- ancestors = tail(ascent),
- parentNode;
-
- if( ancestors ) {
- parentNode = nodeOf(head(ancestors));
- parentNode[key] = newNode;
- }
- });
-
- oboeBus(NODE_DROP).on(function() {
-
- var oldHead = head(ascent),
- key = keyOf(oldHead),
- ancestors = tail(ascent),
- parentNode;
-
- if( ancestors ) {
- parentNode = nodeOf(head(ancestors));
-
- delete parentNode[key];
- }
- });
-
- oboeBus(ABORTING).on(function(){
-
- for( var eventName in handlers ) {
- oboeBus(eventName).un(listenerId);
- }
- });
- }
-
-
-
-
- function parseResponseHeaders(headerStr) {
- var headers = {};
-
- headerStr && headerStr.split('\u000d\u000a')
- .forEach(function(headerPair){
-
-
-
- var index = headerPair.indexOf('\u003a\u0020');
-
- headers[headerPair.substring(0, index)]
- = headerPair.substring(index + 2);
- });
-
- return headers;
- }
-
-
- function isCrossOrigin(pageLocation, ajaxHost) {
-
-
-
- function defaultPort(protocol) {
- return {'http:':80, 'https:':443}[protocol];
- }
-
- function portOf(location) {
-
-
-
- return location.port || defaultPort(location.protocol||pageLocation.protocol);
- }
-
-
-
-
-
- return !!( (ajaxHost.protocol && (ajaxHost.protocol != pageLocation.protocol)) ||
- (ajaxHost.host && (ajaxHost.host != pageLocation.host)) ||
- (ajaxHost.host && (portOf(ajaxHost) != portOf(pageLocation)))
- );
- }
-
-
- function parseUrlOrigin(url) {
-
-
-
-
-
-
-
-
-
-
-
-
- var URL_HOST_PATTERN = /(\w+:)?(?:\/\/)([\w.-]+)?(?::(\d+))?\/?/,
-
-
-
-
-
- urlHostMatch = URL_HOST_PATTERN.exec(url) || [];
-
- return {
- protocol: urlHostMatch[1] || '',
- host: urlHostMatch[2] || '',
- port: urlHostMatch[3] || ''
- };
- }
-
- function httpTransport(){
- return new XMLHttpRequest();
- }
-
-
- function streamingHttp(oboeBus, xhr, method, url, data, headers, withCredentials) {
-
- "use strict";
-
- var emitStreamData = oboeBus(STREAM_DATA).emit,
- emitFail = oboeBus(FAIL_EVENT).emit,
- numberOfCharsAlreadyGivenToCallback = 0,
- stillToSendStartEvent = true;
-
-
-
- oboeBus( ABORTING ).on( function(){
-
-
-
-
- xhr.onreadystatechange = null;
-
- xhr.abort();
- });
-
-
-
- function handleProgress() {
-
- var textSoFar = xhr.responseText,
- newText = textSoFar.substr(numberOfCharsAlreadyGivenToCallback);
-
-
-
-
-
- if( newText ) {
- emitStreamData( newText );
- }
-
- numberOfCharsAlreadyGivenToCallback = len(textSoFar);
- }
-
-
- if('onprogress' in xhr){
- xhr.onprogress = handleProgress;
- }
-
- xhr.onreadystatechange = function() {
-
- function sendStartIfNotAlready() {
-
-
-
- try{
- stillToSendStartEvent && oboeBus( HTTP_START ).emit(
- xhr.status,
- parseResponseHeaders(xhr.getAllResponseHeaders()) );
- stillToSendStartEvent = false;
- } catch(e){}
- }
-
- switch( xhr.readyState ) {
-
- case 2:
- case 3:
- return sendStartIfNotAlready();
-
- case 4:
- sendStartIfNotAlready();
-
-
- var successful = String(xhr.status)[0] == 2;
-
- if( successful ) {
-
-
-
-
-
-
- handleProgress();
-
- oboeBus(STREAM_END).emit();
- } else {
-
- emitFail( errorReport(
- xhr.status,
- xhr.responseText
- ));
- }
- }
- };
-
- try{
-
- xhr.open(method, url, true);
-
- for( var headerName in headers ){
- xhr.setRequestHeader(headerName, headers[headerName]);
- }
-
- if( !isCrossOrigin(window.location, parseUrlOrigin(url)) ) {
- xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
- }
-
- xhr.withCredentials = withCredentials;
-
- xhr.send(data);
-
- } catch( e ) {
-
-
-
-
-
-
-
- window.setTimeout(
- partialComplete(emitFail, errorReport(undefined, undefined, e))
- , 0
- );
- }
- }
-
- var jsonPathSyntax = (function() {
-
- var
-
-
-
- regexDescriptor = function regexDescriptor(regex) {
- return regex.exec.bind(regex);
- }
-
-
-
- , jsonPathClause = varArgs(function( componentRegexes ) {
-
-
-
-
- componentRegexes.unshift(/^/);
-
- return regexDescriptor(
- RegExp(
- componentRegexes.map(attr('source')).join('')
- )
- );
- })
-
- , possiblyCapturing = /(\$?)/
- , namedNode = /([\w-_]+|\*)/
- , namePlaceholder = /()/
- , nodeInArrayNotation = /\["([^"]+)"\]/
- , numberedNodeInArrayNotation = /\[(\d+|\*)\]/
- , fieldList = /{([\w ]*?)}/
- , optionalFieldList = /(?:{([\w ]*?)})?/
-
-
-
- , jsonPathNamedNodeInObjectNotation = jsonPathClause(
- possiblyCapturing,
- namedNode,
- optionalFieldList
- )
-
-
- , jsonPathNamedNodeInArrayNotation = jsonPathClause(
- possiblyCapturing,
- nodeInArrayNotation,
- optionalFieldList
- )
-
-
- , jsonPathNumberedNodeInArrayNotation = jsonPathClause(
- possiblyCapturing,
- numberedNodeInArrayNotation,
- optionalFieldList
- )
-
-
- , jsonPathPureDuckTyping = jsonPathClause(
- possiblyCapturing,
- namePlaceholder,
- fieldList
- )
-
-
- , jsonPathDoubleDot = jsonPathClause(/\.\./)
-
-
- , jsonPathDot = jsonPathClause(/\./)
-
-
- , jsonPathBang = jsonPathClause(
- possiblyCapturing,
- /!/
- )
-
- // nada!
- , emptyString = jsonPathClause(/$/)
-
- ;
-
-
-
-
- return function (fn){
- return fn(
- lazyUnion(
- jsonPathNamedNodeInObjectNotation
- , jsonPathNamedNodeInArrayNotation
- , jsonPathNumberedNodeInArrayNotation
- , jsonPathPureDuckTyping
- )
- , jsonPathDoubleDot
- , jsonPathDot
- , jsonPathBang
- , emptyString
- );
- };
-
- }());
-
- function namedNode(key, node) {
- return {key:key, node:node};
- }
-
-
- var keyOf = attr('key');
-
-
- var nodeOf = attr('node');
-
-
-
-
-
- var ROOT_PATH = {};
-
-
-
- function incrementalContentBuilder( oboeBus ) {
-
- var emitNodeOpened = oboeBus(NODE_OPENED).emit,
- emitNodeClosed = oboeBus(NODE_CLOSED).emit,
- emitRootOpened = oboeBus(ROOT_PATH_FOUND).emit,
- emitRootClosed = oboeBus(ROOT_NODE_FOUND).emit;
-
- function arrayIndicesAreKeys( possiblyInconsistentAscent, newDeepestNode) {
-
-
-
-
- var parentNode = nodeOf( head( possiblyInconsistentAscent));
-
- return isOfType( Array, parentNode)
- ?
- keyFound( possiblyInconsistentAscent,
- len(parentNode),
- newDeepestNode
- )
- :
-
- possiblyInconsistentAscent
- ;
- }
-
- function nodeOpened( ascent, newDeepestNode ) {
-
- if( !ascent ) {
-
- emitRootOpened( newDeepestNode);
-
- return keyFound( ascent, ROOT_PATH, newDeepestNode);
- }
-
-
-
- var arrayConsistentAscent = arrayIndicesAreKeys( ascent, newDeepestNode),
- ancestorBranches = tail( arrayConsistentAscent),
- previouslyUnmappedName = keyOf( head( arrayConsistentAscent));
-
- appendBuiltContent(
- ancestorBranches,
- previouslyUnmappedName,
- newDeepestNode
- );
-
- return cons(
- namedNode( previouslyUnmappedName, newDeepestNode ),
- ancestorBranches
- );
- }
-
-
-
-
- function appendBuiltContent( ancestorBranches, key, node ){
-
- nodeOf( head( ancestorBranches))[key] = node;
- }
-
-
-
-
- function keyFound(ascent, newDeepestName, maybeNewDeepestNode) {
-
- if( ascent ) {
-
-
-
- appendBuiltContent( ascent, newDeepestName, maybeNewDeepestNode );
- }
-
- var ascentWithNewPath = cons(
- namedNode( newDeepestName,
- maybeNewDeepestNode),
- ascent
- );
-
- emitNodeOpened( ascentWithNewPath);
-
- return ascentWithNewPath;
- }
-
-
-
-
- function nodeClosed( ascent ) {
-
- emitNodeClosed( ascent);
-
- return tail( ascent) ||
-
-
- emitRootClosed(nodeOf(head(ascent)));
- }
-
- var contentBuilderHandlers = {};
- contentBuilderHandlers[SAX_VALUE_OPEN] = nodeOpened;
- contentBuilderHandlers[SAX_VALUE_CLOSE] = nodeClosed;
- contentBuilderHandlers[SAX_KEY] = keyFound;
- return contentBuilderHandlers;
- }
-
-
-
-
- var jsonPathCompiler = jsonPathSyntax(function (pathNodeSyntax,
- doubleDotSyntax,
- dotSyntax,
- bangSyntax,
- emptySyntax ) {
-
- var CAPTURING_INDEX = 1;
- var NAME_INDEX = 2;
- var FIELD_LIST_INDEX = 3;
-
- var headKey = compose2(keyOf, head),
- headNode = compose2(nodeOf, head);
-
-
-
- function nameClause(previousExpr, detection ) {
-
- var name = detection[NAME_INDEX],
-
- matchesName = ( !name || name == '*' )
- ? always
- : function(ascent){return headKey(ascent) == name};
-
-
- return lazyIntersection(matchesName, previousExpr);
- }
-
-
-
- function duckTypeClause(previousExpr, detection) {
-
- var fieldListStr = detection[FIELD_LIST_INDEX];
-
- if (!fieldListStr)
- return previousExpr;
-
- var hasAllrequiredFields = partialComplete(
- hasAllProperties,
- arrayAsList(fieldListStr.split(/\W+/))
- ),
-
- isMatch = compose2(
- hasAllrequiredFields,
- headNode
- );
-
- return lazyIntersection(isMatch, previousExpr);
- }
-
-
-
- function capture( previousExpr, detection ) {
-
-
- var capturing = !!detection[CAPTURING_INDEX];
-
- if (!capturing)
- return previousExpr;
-
- return lazyIntersection(previousExpr, head);
-
- }
-
-
-
- function skip1(previousExpr) {
-
-
- if( previousExpr == always ) {
-
-
- return always;
- }
-
-
-
- function notAtRoot(ascent){
- return headKey(ascent) != ROOT_PATH;
- }
-
- return lazyIntersection(
-
-
- notAtRoot,
-
-
-
- compose2(previousExpr, tail)
- );
-
- }
-
-
-
- function skipMany(previousExpr) {
-
- if( previousExpr == always ) {
-
-
- return always;
- }
-
- var
-
-
-
- terminalCaseWhenArrivingAtRoot = rootExpr(),
- terminalCaseWhenPreviousExpressionIsSatisfied = previousExpr,
- recursiveCase = skip1(function(ascent) {
- return cases(ascent);
- }),
-
- cases = lazyUnion(
- terminalCaseWhenArrivingAtRoot
- , terminalCaseWhenPreviousExpressionIsSatisfied
- , recursiveCase
- );
-
- return cases;
- }
-
-
-
- function rootExpr() {
-
- return function(ascent){
- return headKey(ascent) == ROOT_PATH;
- };
- }
-
-
-
- function statementExpr(lastClause) {
-
- return function(ascent) {
-
-
- var exprMatch = lastClause(ascent);
-
- return exprMatch === true ? head(ascent) : exprMatch;
- };
- }
-
-
-
- function expressionsReader( exprs, parserGeneratedSoFar, detection ) {
-
-
-
-
-
- return foldR(
- function( parserGeneratedSoFar, expr ){
-
- return expr(parserGeneratedSoFar, detection);
- },
- parserGeneratedSoFar,
- exprs
- );
-
- }
-
-
-
- function generateClauseReaderIfTokenFound (
-
- tokenDetector, clauseEvaluatorGenerators,
-
- jsonPath, parserGeneratedSoFar, onSuccess) {
-
- var detected = tokenDetector(jsonPath);
-
- if(detected) {
- var compiledParser = expressionsReader(
- clauseEvaluatorGenerators,
- parserGeneratedSoFar,
- detected
- ),
-
- remainingUnparsedJsonPath = jsonPath.substr(len(detected[0]));
-
- return onSuccess(remainingUnparsedJsonPath, compiledParser);
- }
- }
-
-
-
- function clauseMatcher(tokenDetector, exprs) {
-
- return partialComplete(
- generateClauseReaderIfTokenFound,
- tokenDetector,
- exprs
- );
- }
-
-
-
- var clauseForJsonPath = lazyUnion(
-
- clauseMatcher(pathNodeSyntax , list( capture,
- duckTypeClause,
- nameClause,
- skip1 ))
-
- , clauseMatcher(doubleDotSyntax , list( skipMany))
-
-
-
-
- , clauseMatcher(dotSyntax , list() )
-
- , clauseMatcher(bangSyntax , list( capture,
- rootExpr))
-
- , clauseMatcher(emptySyntax , list( statementExpr))
-
- , function (jsonPath) {
- throw Error('"' + jsonPath + '" could not be tokenised')
- }
- );
-
-
-
-
- function returnFoundParser(_remainingJsonPath, compiledParser){
- return compiledParser
- }
-
-
-
- function compileJsonPathToFunction( uncompiledJsonPath,
- parserGeneratedSoFar ) {
-
-
-
- var onFind = uncompiledJsonPath
- ? compileJsonPathToFunction
- : returnFoundParser;
-
- return clauseForJsonPath(
- uncompiledJsonPath,
- parserGeneratedSoFar,
- onFind
- );
- }
-
-
-
- return function(jsonPath){
-
- try {
-
- return compileJsonPathToFunction(jsonPath, always);
-
- } catch( e ) {
- throw Error( 'Could not compile "' + jsonPath +
- '" because ' + e.message
- );
- }
- }
-
- });
-
-
- function singleEventPubSub(eventType, newListener, removeListener){
-
-
-
- var listenerTupleList,
- listenerList;
-
- function hasId(id){
- return function(tuple) {
- return tuple.id == id;
- };
- }
-
- return {
-
-
-
- on:function( listener, listenerId ) {
-
- var tuple = {
- listener: listener
- , id: listenerId || listener
-
- };
-
- if( newListener ) {
- newListener.emit(eventType, listener, tuple.id);
- }
-
- listenerTupleList = cons( tuple, listenerTupleList );
- listenerList = cons( listener, listenerList );
-
- return this;
- },
-
- emit:function () {
- applyEach( listenerList, arguments );
- },
-
- un: function( listenerId ) {
-
- var removed;
-
- listenerTupleList = without(
- listenerTupleList,
- hasId(listenerId),
- function(tuple){
- removed = tuple;
- }
- );
-
- if( removed ) {
- listenerList = without( listenerList, function(listener){
- return listener == removed.listener;
- });
-
- if( removeListener ) {
- removeListener.emit(eventType, removed.listener, removed.id);
- }
- }
- },
-
- listeners: function(){
-
- return listenerList;
- },
-
- hasListener: function(listenerId){
- var test = listenerId? hasId(listenerId) : always;
-
- return defined(first( test, listenerTupleList));
- }
- };
- }
-
- function pubSub(){
-
- var singles = {},
- newListener = newSingle('newListener'),
- removeListener = newSingle('removeListener');
-
- function newSingle(eventName) {
- return singles[eventName] = singleEventPubSub(
- eventName,
- newListener,
- removeListener
- );
- }
-
-
- function pubSubInstance( eventName ){
-
- return singles[eventName] || newSingle( eventName );
- }
-
-
- ['emit', 'on', 'un'].forEach(function(methodName){
-
- pubSubInstance[methodName] = varArgs(function(eventName, parameters){
- apply( parameters, pubSubInstance( eventName )[methodName]);
- });
- });
-
- return pubSubInstance;
- }
-
-
-
- var
-
- _S = 1,
-
-
- NODE_OPENED = _S++,
-
-
- NODE_CLOSED = _S++,
-
-
- NODE_SWAP = _S++,
- NODE_DROP = _S++,
-
- FAIL_EVENT = 'fail',
-
- ROOT_NODE_FOUND = _S++,
- ROOT_PATH_FOUND = _S++,
-
- HTTP_START = 'start',
- STREAM_DATA = 'data',
- STREAM_END = 'end',
- ABORTING = _S++,
-
-
- SAX_KEY = _S++,
- SAX_VALUE_OPEN = _S++,
- SAX_VALUE_CLOSE = _S++;
-
- function errorReport(statusCode, body, error) {
- try{
- var jsonBody = JSON.parse(body);
- }catch(e){}
-
- return {
- statusCode:statusCode,
- body:body,
- jsonBody:jsonBody,
- thrown:error
- };
- }
-
-
-
- function patternAdapter(oboeBus, jsonPathCompiler) {
-
- var predicateEventMap = {
- node:oboeBus(NODE_CLOSED)
- , path:oboeBus(NODE_OPENED)
- };
-
- function emitMatchingNode(emitMatch, node, ascent) {
-
-
-
- var descent = reverseList(ascent);
-
- emitMatch(
- node,
-
-
-
- listAsArray(tail(map(keyOf,descent))),
- listAsArray(map(nodeOf, descent))
- );
- }
-
-
-
- function addUnderlyingListener( fullEventName, predicateEvent, compiledJsonPath ){
-
- var emitMatch = oboeBus(fullEventName).emit;
-
- predicateEvent.on( function (ascent) {
-
- var maybeMatchingMapping = compiledJsonPath(ascent);
-
-
-
- if (maybeMatchingMapping !== false) {
-
- emitMatchingNode(
- emitMatch,
- nodeOf(maybeMatchingMapping),
- ascent
- );
- }
- }, fullEventName);
-
- oboeBus('removeListener').on( function(removedEventName){
-
-
-
-
- if( removedEventName == fullEventName ) {
-
- if( !oboeBus(removedEventName).listeners( )) {
- predicateEvent.un( fullEventName );
- }
- }
- });
- }
-
- oboeBus('newListener').on( function(fullEventName){
-
- var match = /(node|path):(.*)/.exec(fullEventName);
-
- if( match ) {
- var predicateEvent = predicateEventMap[match[1]];
-
- if( !predicateEvent.hasListener( fullEventName) ) {
-
- addUnderlyingListener(
- fullEventName,
- predicateEvent,
- jsonPathCompiler( match[2] )
- );
- }
- }
- })
-
- }
-
-
- function instanceApi(oboeBus, contentSource){
-
- var oboeApi,
- fullyQualifiedNamePattern = /^(node|path):./,
- rootNodeFinishedEvent = oboeBus(ROOT_NODE_FOUND),
- emitNodeDrop = oboeBus(NODE_DROP).emit,
- emitNodeSwap = oboeBus(NODE_SWAP).emit,
-
-
-
- addListener = varArgs(function( eventId, parameters ){
-
- if( oboeApi[eventId] ) {
-
-
-
-
- apply(parameters, oboeApi[eventId]);
- } else {
-
-
-
- var event = oboeBus(eventId),
- listener = parameters[0];
-
- if( fullyQualifiedNamePattern.test(eventId) ) {
-
-
-
- addForgettableCallback(event, listener);
- } else {
-
-
-
- event.on( listener);
- }
- }
-
- return oboeApi;
- }),
-
-
-
- removeListener = function( eventId, p2, p3 ){
-
- if( eventId == 'done' ) {
-
- rootNodeFinishedEvent.un(p2);
-
- } else if( eventId == 'node' || eventId == 'path' ) {
-
-
- oboeBus.un(eventId + ':' + p2, p3);
- } else {
-
-
-
-
-
- var listener = p2;
-
- oboeBus(eventId).un(listener);
- }
-
- return oboeApi;
- };
-
-
-
- function addProtectedCallback(eventName, callback) {
- oboeBus(eventName).on(protectedCallback(callback), callback);
- return oboeApi;
- }
-
-
-
- function addForgettableCallback(event, callback, listenerId) {
-
-
-
- listenerId = listenerId || callback;
-
- var safeCallback = protectedCallback(callback);
-
- event.on( function() {
-
- var discard = false;
-
- oboeApi.forget = function(){
- discard = true;
- };
-
- apply( arguments, safeCallback );
-
- delete oboeApi.forget;
-
- if( discard ) {
- event.un(listenerId);
- }
- }, listenerId);
-
- return oboeApi;
- }
-
-
-
- function protectedCallback( callback ) {
- return function() {
- try{
- return callback.apply(oboeApi, arguments);
- }catch(e) {
-
-
- oboeBus(FAIL_EVENT).emit( errorReport(undefined, undefined, e));
- }
- }
- }
-
-
-
- function fullyQualifiedPatternMatchEvent(type, pattern) {
- return oboeBus(type + ':' + pattern);
- }
-
- function wrapCallbackToSwapNodeIfSomethingReturned( callback ) {
- return function() {
- var returnValueFromCallback = callback.apply(this, arguments);
-
- if( defined(returnValueFromCallback) ) {
-
- if( returnValueFromCallback == oboe.drop ) {
- emitNodeDrop();
- } else {
- emitNodeSwap(returnValueFromCallback);
- }
- }
- }
- }
-
- function addSingleNodeOrPathListener(eventId, pattern, callback) {
-
- var effectiveCallback;
-
- if( eventId == 'node' ) {
- effectiveCallback = wrapCallbackToSwapNodeIfSomethingReturned(callback);
- } else {
- effectiveCallback = callback;
- }
-
- addForgettableCallback(
- fullyQualifiedPatternMatchEvent(eventId, pattern),
- effectiveCallback,
- callback
- );
- }
-
-
-
- function addMultipleNodeOrPathListeners(eventId, listenerMap) {
-
- for( var pattern in listenerMap ) {
- addSingleNodeOrPathListener(eventId, pattern, listenerMap[pattern]);
- }
- }
-
-
-
- function addNodeOrPathListenerApi( eventId, jsonPathOrListenerMap, callback ){
-
- if( isString(jsonPathOrListenerMap) ) {
- addSingleNodeOrPathListener(eventId, jsonPathOrListenerMap, callback);
-
- } else {
- addMultipleNodeOrPathListeners(eventId, jsonPathOrListenerMap);
- }
-
- return oboeApi;
- }
-
-
-
-
- oboeBus(ROOT_PATH_FOUND).on( function(rootNode) {
- oboeApi.root = functor(rootNode);
- });
-
-
-
- oboeBus(HTTP_START).on( function(_statusCode, headers) {
-
- oboeApi.header = function(name) {
- return name ? headers[name]
- : headers
- ;
- }
- });
-
-
-
- return oboeApi = {
- on : addListener,
- addListener : addListener,
- removeListener : removeListener,
- emit : oboeBus.emit,
-
- node : partialComplete(addNodeOrPathListenerApi, 'node'),
- path : partialComplete(addNodeOrPathListenerApi, 'path'),
-
- done : partialComplete(addForgettableCallback, rootNodeFinishedEvent),
- start : partialComplete(addProtectedCallback, HTTP_START ),
-
-
-
- fail : oboeBus(FAIL_EVENT).on,
-
-
- abort : oboeBus(ABORTING).emit,
-
-
- header : noop,
- root : noop,
-
- source : contentSource
- };
- }
-
-
-
-
- function wire (httpMethodName, contentSource, body, headers, withCredentials){
-
- var oboeBus = pubSub();
-
-
-
-
-
- if( contentSource ) {
-
- streamingHttp( oboeBus,
- httpTransport(),
- httpMethodName,
- contentSource,
- body,
- headers,
- withCredentials
- );
- }
-
- clarinet(oboeBus);
-
- ascentManager(oboeBus, incrementalContentBuilder(oboeBus));
-
- patternAdapter(oboeBus, jsonPathCompiler);
-
- return instanceApi(oboeBus, contentSource);
- }
-
- function applyDefaults( passthrough, url, httpMethodName, body, headers, withCredentials, cached ){
-
- headers = headers ?
-
-
-
- JSON.parse(JSON.stringify(headers))
- : {};
-
- if( body ) {
- if( !isString(body) ) {
-
-
-
- body = JSON.stringify(body);
-
-
- headers['Content-Type'] = headers['Content-Type'] || 'application/json';
- }
- } else {
- body = null;
- }
-
-
- function modifiedUrl(baseUrl, cached) {
-
- if( cached === false ) {
-
- if( baseUrl.indexOf('?') == -1 ) {
- baseUrl += '?';
- } else {
- baseUrl += '&';
- }
-
- baseUrl += '_=' + new Date().getTime();
- }
- return baseUrl;
- }
-
- return passthrough( httpMethodName || 'GET', modifiedUrl(url, cached), body, headers, withCredentials || false );
- }
-
-
- function oboe(arg1) {
-
-
-
-
-
-
-
- var nodeStreamMethodNames = list('resume', 'pause', 'pipe'),
- isStream = partialComplete(
- hasAllProperties
- , nodeStreamMethodNames
- );
-
- if( arg1 ) {
- if (isStream(arg1) || isString(arg1)) {
-
-
-
-
-
- return applyDefaults(
- wire,
- arg1
- );
-
- } else {
-
-
-
-
- return applyDefaults(
- wire,
- arg1.url,
- arg1.method,
- arg1.body,
- arg1.headers,
- arg1.withCredentials,
- arg1.cached
- );
-
- }
- } else {
-
-
- return wire();
- }
- }
-
-
- oboe.drop = function() {
- return oboe.drop;
- };
-
-
- if ( typeof define === "function" && define.amd ) {
- define( "oboe", [], function () { return oboe; } );
- } else if (typeof exports === 'object') {
- module.exports = oboe;
- } else {
- window.oboe = oboe;
- }
- })((function(){
-
-
- try {
- return window;
- } catch (e) {
- return self;
- }
- }()), Object, Array, Error, JSON);
|