12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841184218431844184518461847184818491850185118521853185418551856185718581859186018611862186318641865186618671868186918701871187218731874187518761877187818791880188118821883188418851886188718881889189018911892189318941895189618971898189919001901190219031904190519061907190819091910191119121913191419151916191719181919192019211922192319241925192619271928192919301931193219331934193519361937193819391940194119421943194419451946194719481949195019511952195319541955195619571958195919601961196219631964196519661967196819691970197119721973197419751976197719781979198019811982198319841985198619871988198919901991199219931994199519961997199819992000200120022003200420052006200720082009201020112012201320142015201620172018201920202021202220232024202520262027202820292030203120322033203420352036203720382039204020412042204320442045204620472048204920502051205220532054205520562057205820592060206120622063206420652066206720682069207020712072207320742075207620772078207920802081208220832084208520862087208820892090209120922093209420952096209720982099210021012102210321042105210621072108210921102111211221132114211521162117211821192120212121222123212421252126212721282129213021312132213321342135213621372138213921402141214221432144214521462147214821492150215121522153215421552156215721582159216021612162216321642165216621672168216921702171217221732174217521762177217821792180218121822183218421852186218721882189219021912192219321942195219621972198219922002201220222032204220522062207220822092210221122122213221422152216221722182219222022212222222322242225222622272228222922302231223222332234223522362237223822392240224122422243224422452246224722482249225022512252225322542255225622572258225922602261226222632264226522662267226822692270227122722273227422752276227722782279228022812282228322842285228622872288228922902291229222932294229522962297229822992300230123022303230423052306230723082309231023112312231323142315231623172318231923202321232223232324232523262327232823292330233123322333233423352336233723382339234023412342234323442345234623472348234923502351235223532354235523562357235823592360236123622363236423652366236723682369237023712372237323742375237623772378237923802381238223832384238523862387238823892390239123922393239423952396239723982399240024012402240324042405240624072408240924102411241224132414241524162417241824192420242124222423242424252426242724282429243024312432243324342435243624372438243924402441244224432444244524462447244824492450245124522453245424552456245724582459246024612462246324642465246624672468246924702471247224732474247524762477247824792480248124822483248424852486248724882489249024912492249324942495249624972498249925002501250225032504250525062507250825092510251125122513251425152516251725182519252025212522252325242525252625272528252925302531253225332534253525362537253825392540254125422543254425452546254725482549255025512552255325542555255625572558255925602561256225632564256525662567256825692570257125722573257425752576257725782579258025812582258325842585258625872588258925902591259225932594259525962597259825992600260126022603260426052606260726082609261026112612261326142615261626172618261926202621262226232624262526262627262826292630263126322633263426352636263726382639264026412642264326442645264626472648264926502651265226532654265526562657265826592660266126622663266426652666266726682669267026712672267326742675267626772678267926802681268226832684268526862687268826892690269126922693269426952696 |
- var $jscomp = $jscomp || {};
- $jscomp.scope = {};
- $jscomp.ASSUME_ES5 = false;
- $jscomp.ASSUME_NO_NATIVE_MAP = false;
- $jscomp.ASSUME_NO_NATIVE_SET = false;
- $jscomp.defineProperty = $jscomp.ASSUME_ES5 || typeof Object.defineProperties == 'function' ? Object.defineProperty : function(target, property, descriptor) {
- descriptor = descriptor;
- if (target == Array.prototype || target == Object.prototype) {
- return;
- }
- target[property] = descriptor.value;
- };
- $jscomp.getGlobal = function(maybeGlobal) {
- return typeof window != 'undefined' && window === maybeGlobal ? maybeGlobal : typeof global != 'undefined' && global != null ? global : maybeGlobal;
- };
- $jscomp.global = $jscomp.getGlobal(this);
- $jscomp.polyfill = function(target, polyfill, fromLang, toLang) {
- if (!polyfill) {
- return;
- }
- var obj = $jscomp.global;
- var split = target.split('.');
- for (var i = 0; i < split.length - 1; i++) {
- var key = split[i];
- if (!(key in obj)) {
- obj[key] = {};
- }
- obj = obj[key];
- }
- var property = split[split.length - 1];
- var orig = obj[property];
- var impl = polyfill(orig);
- if (impl == orig || impl == null) {
- return;
- }
- $jscomp.defineProperty(obj, property, {configurable:true, writable:true, value:impl});
- };
- $jscomp.polyfill('Array.prototype.copyWithin', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(target, start, opt_end) {
- var len = this.length;
- target = Number(target);
- start = Number(start);
- opt_end = Number(opt_end != null ? opt_end : len);
- if (target < start) {
- opt_end = Math.min(opt_end, len);
- while (start < opt_end) {
- if (start in this) {
- this[target++] = this[start++];
- } else {
- delete this[target++];
- start++;
- }
- }
- } else {
- opt_end = Math.min(opt_end, len + start - target);
- target += opt_end - start;
- while (opt_end > start) {
- if (--opt_end in this) {
- this[--target] = this[opt_end];
- } else {
- delete this[target];
- }
- }
- }
- return this;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.SYMBOL_PREFIX = 'jscomp_symbol_';
- $jscomp.initSymbol = function() {
- $jscomp.initSymbol = function() {
- };
- if (!$jscomp.global['Symbol']) {
- $jscomp.global['Symbol'] = $jscomp.Symbol;
- }
- };
- $jscomp.Symbol = function() {
- var counter = 0;
- function Symbol(opt_description) {
- return $jscomp.SYMBOL_PREFIX + (opt_description || '') + counter++;
- }
- return Symbol;
- }();
- $jscomp.initSymbolIterator = function() {
- $jscomp.initSymbol();
- var symbolIterator = $jscomp.global['Symbol'].iterator;
- if (!symbolIterator) {
- symbolIterator = $jscomp.global['Symbol'].iterator = $jscomp.global['Symbol']('iterator');
- }
- if (typeof Array.prototype[symbolIterator] != 'function') {
- $jscomp.defineProperty(Array.prototype, symbolIterator, {configurable:true, writable:true, value:function() {
- return $jscomp.arrayIterator(this);
- }});
- }
- $jscomp.initSymbolIterator = function() {
- };
- };
- $jscomp.arrayIterator = function(array) {
- var index = 0;
- return $jscomp.iteratorPrototype(function() {
- if (index < array.length) {
- return {done:false, value:array[index++]};
- } else {
- return {done:true};
- }
- });
- };
- $jscomp.iteratorPrototype = function(next) {
- $jscomp.initSymbolIterator();
- var iterator = {next:next};
- iterator[$jscomp.global['Symbol'].iterator] = function() {
- return this;
- };
- return iterator;
- };
- $jscomp.iteratorFromArray = function(array, transform) {
- $jscomp.initSymbolIterator();
- if (array instanceof String) {
- array = array + '';
- }
- var i = 0;
- var iter = {next:function() {
- if (i < array.length) {
- var index = i++;
- return {value:transform(index, array[index]), done:false};
- }
- iter.next = function() {
- return {done:true, value:void 0};
- };
- return iter.next();
- }};
- iter[Symbol.iterator] = function() {
- return iter;
- };
- return iter;
- };
- $jscomp.polyfill('Array.prototype.entries', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function() {
- return $jscomp.iteratorFromArray(this, function(i, v) {
- return [i, v];
- });
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Array.prototype.fill', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(value, opt_start, opt_end) {
- var length = this.length || 0;
- if (opt_start < 0) {
- opt_start = Math.max(0, length + opt_start);
- }
- if (opt_end == null || opt_end > length) {
- opt_end = length;
- }
- opt_end = Number(opt_end);
- if (opt_end < 0) {
- opt_end = Math.max(0, length + opt_end);
- }
- for (var i = Number(opt_start || 0); i < opt_end; i++) {
- this[i] = value;
- }
- return this;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.findInternal = function(array, callback, thisArg) {
- if (array instanceof String) {
- array = String(array);
- }
- var len = array.length;
- for (var i = 0; i < len; i++) {
- var value = array[i];
- if (callback.call(thisArg, value, i, array)) {
- return {i:i, v:value};
- }
- }
- return {i:-1, v:void 0};
- };
- $jscomp.polyfill('Array.prototype.find', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(callback, opt_thisArg) {
- return $jscomp.findInternal(this, callback, opt_thisArg).v;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Array.prototype.findIndex', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(callback, opt_thisArg) {
- return $jscomp.findInternal(this, callback, opt_thisArg).i;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Array.from', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(arrayLike, opt_mapFn, opt_thisArg) {
- $jscomp.initSymbolIterator();
- opt_mapFn = opt_mapFn != null ? opt_mapFn : function(x) {
- return x;
- };
- var result = [];
- var iteratorFunction = arrayLike[Symbol.iterator];
- if (typeof iteratorFunction == 'function') {
- arrayLike = iteratorFunction.call(arrayLike);
- var next;
- var k = 0;
- while (!(next = arrayLike.next()).done) {
- result.push(opt_mapFn.call(opt_thisArg, next.value, k++));
- }
- } else {
- var len = arrayLike.length;
- for (var i = 0; i < len; i++) {
- result.push(opt_mapFn.call(opt_thisArg, arrayLike[i], i));
- }
- }
- return result;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Object.is', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(left, right) {
- if (left === right) {
- return left !== 0 || 1 / left === 1 / right;
- } else {
- return left !== left && right !== right;
- }
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Array.prototype.includes', function(orig) {
- if (orig) {
- return orig;
- }
- var includes = function(searchElement, opt_fromIndex) {
- var array = this;
- if (array instanceof String) {
- array = String(array);
- }
- var len = array.length;
- var i = opt_fromIndex || 0;
- if (i < 0) {
- i = Math.max(i + len, 0);
- }
- for (; i < len; i++) {
- var element = array[i];
- if (element === searchElement || Object.is(element, searchElement)) {
- return true;
- }
- }
- return false;
- };
- return includes;
- }, 'es7', 'es3');
- $jscomp.polyfill('Array.prototype.keys', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function() {
- return $jscomp.iteratorFromArray(this, function(i) {
- return i;
- });
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Array.of', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(var_args) {
- return Array.from(arguments);
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Array.prototype.values', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function() {
- return $jscomp.iteratorFromArray(this, function(k, v) {
- return v;
- });
- };
- return polyfill;
- }, 'es8', 'es3');
- $jscomp.makeIterator = function(iterable) {
- $jscomp.initSymbolIterator();
- var iteratorFunction = iterable[Symbol.iterator];
- return iteratorFunction ? iteratorFunction.call(iterable) : $jscomp.arrayIterator(iterable);
- };
- $jscomp.FORCE_POLYFILL_PROMISE = false;
- $jscomp.polyfill('Promise', function(NativePromise) {
- if (NativePromise && !$jscomp.FORCE_POLYFILL_PROMISE) {
- return NativePromise;
- }
- function AsyncExecutor() {
- this.batch_ = null;
- }
- AsyncExecutor.prototype.asyncExecute = function(f) {
- if (this.batch_ == null) {
- this.batch_ = [];
- this.asyncExecuteBatch_();
- }
- this.batch_.push(f);
- return this;
- };
- AsyncExecutor.prototype.asyncExecuteBatch_ = function() {
- var self = this;
- this.asyncExecuteFunction(function() {
- self.executeBatch_();
- });
- };
- var nativeSetTimeout = $jscomp.global['setTimeout'];
- AsyncExecutor.prototype.asyncExecuteFunction = function(f) {
- nativeSetTimeout(f, 0);
- };
- AsyncExecutor.prototype.executeBatch_ = function() {
- while (this.batch_ && this.batch_.length) {
- var executingBatch = this.batch_;
- this.batch_ = [];
- for (var i = 0; i < executingBatch.length; ++i) {
- var f = executingBatch[i];
- executingBatch[i] = null;
- try {
- f();
- } catch (error) {
- this.asyncThrow_(error);
- }
- }
- }
- this.batch_ = null;
- };
- AsyncExecutor.prototype.asyncThrow_ = function(exception) {
- this.asyncExecuteFunction(function() {
- throw exception;
- });
- };
- var PromiseState = {PENDING:0, FULFILLED:1, REJECTED:2};
- var PolyfillPromise = function(executor) {
- this.state_ = PromiseState.PENDING;
- this.result_ = undefined;
- this.onSettledCallbacks_ = [];
- var resolveAndReject = this.createResolveAndReject_();
- try {
- executor(resolveAndReject.resolve, resolveAndReject.reject);
- } catch (e) {
- resolveAndReject.reject(e);
- }
- };
- PolyfillPromise.prototype.createResolveAndReject_ = function() {
- var thisPromise = this;
- var alreadyCalled = false;
- function firstCallWins(method) {
- return function(x) {
- if (!alreadyCalled) {
- alreadyCalled = true;
- method.call(thisPromise, x);
- }
- };
- }
- return {resolve:firstCallWins(this.resolveTo_), reject:firstCallWins(this.reject_)};
- };
- PolyfillPromise.prototype.resolveTo_ = function(value) {
- if (value === this) {
- this.reject_(new TypeError('A Promise cannot resolve to itself'));
- } else {
- if (value instanceof PolyfillPromise) {
- this.settleSameAsPromise_(value);
- } else {
- if (isObject(value)) {
- this.resolveToNonPromiseObj_(value);
- } else {
- this.fulfill_(value);
- }
- }
- }
- };
- PolyfillPromise.prototype.resolveToNonPromiseObj_ = function(obj) {
- var thenMethod = undefined;
- try {
- thenMethod = obj.then;
- } catch (error) {
- this.reject_(error);
- return;
- }
- if (typeof thenMethod == 'function') {
- this.settleSameAsThenable_(thenMethod, obj);
- } else {
- this.fulfill_(obj);
- }
- };
- function isObject(value) {
- switch(typeof value) {
- case 'object':
- return value != null;
- case 'function':
- return true;
- default:
- return false;
- }
- }
- PolyfillPromise.prototype.reject_ = function(reason) {
- this.settle_(PromiseState.REJECTED, reason);
- };
- PolyfillPromise.prototype.fulfill_ = function(value) {
- this.settle_(PromiseState.FULFILLED, value);
- };
- PolyfillPromise.prototype.settle_ = function(settledState, valueOrReason) {
- if (this.state_ != PromiseState.PENDING) {
- throw new Error('Cannot settle(' + settledState + ', ' + valueOrReason + '): Promise already settled in state' + this.state_);
- }
- this.state_ = settledState;
- this.result_ = valueOrReason;
- this.executeOnSettledCallbacks_();
- };
- PolyfillPromise.prototype.executeOnSettledCallbacks_ = function() {
- if (this.onSettledCallbacks_ != null) {
- for (var i = 0; i < this.onSettledCallbacks_.length; ++i) {
- asyncExecutor.asyncExecute(this.onSettledCallbacks_[i]);
- }
- this.onSettledCallbacks_ = null;
- }
- };
- var asyncExecutor = new AsyncExecutor;
- PolyfillPromise.prototype.settleSameAsPromise_ = function(promise) {
- var methods = this.createResolveAndReject_();
- promise.callWhenSettled_(methods.resolve, methods.reject);
- };
- PolyfillPromise.prototype.settleSameAsThenable_ = function(thenMethod, thenable) {
- var methods = this.createResolveAndReject_();
- try {
- thenMethod.call(thenable, methods.resolve, methods.reject);
- } catch (error) {
- methods.reject(error);
- }
- };
- PolyfillPromise.prototype.then = function(onFulfilled, onRejected) {
- var resolveChild;
- var rejectChild;
- var childPromise = new PolyfillPromise(function(resolve, reject) {
- resolveChild = resolve;
- rejectChild = reject;
- });
- function createCallback(paramF, defaultF) {
- if (typeof paramF == 'function') {
- return function(x) {
- try {
- resolveChild(paramF(x));
- } catch (error) {
- rejectChild(error);
- }
- };
- } else {
- return defaultF;
- }
- }
- this.callWhenSettled_(createCallback(onFulfilled, resolveChild), createCallback(onRejected, rejectChild));
- return childPromise;
- };
- PolyfillPromise.prototype['catch'] = function(onRejected) {
- return this.then(undefined, onRejected);
- };
- PolyfillPromise.prototype.callWhenSettled_ = function(onFulfilled, onRejected) {
- var thisPromise = this;
- function callback() {
- switch(thisPromise.state_) {
- case PromiseState.FULFILLED:
- onFulfilled(thisPromise.result_);
- break;
- case PromiseState.REJECTED:
- onRejected(thisPromise.result_);
- break;
- default:
- throw new Error('Unexpected state: ' + thisPromise.state_);
- }
- }
- if (this.onSettledCallbacks_ == null) {
- asyncExecutor.asyncExecute(callback);
- } else {
- this.onSettledCallbacks_.push(callback);
- }
- };
- function resolvingPromise(opt_value) {
- if (opt_value instanceof PolyfillPromise) {
- return opt_value;
- } else {
- return new PolyfillPromise(function(resolve, reject) {
- resolve(opt_value);
- });
- }
- }
- PolyfillPromise['resolve'] = resolvingPromise;
- PolyfillPromise['reject'] = function(opt_reason) {
- return new PolyfillPromise(function(resolve, reject) {
- reject(opt_reason);
- });
- };
- PolyfillPromise['race'] = function(thenablesOrValues) {
- return new PolyfillPromise(function(resolve, reject) {
- var iterator = $jscomp.makeIterator(thenablesOrValues);
- for (var iterRec = iterator.next(); !iterRec.done; iterRec = iterator.next()) {
- resolvingPromise(iterRec.value).callWhenSettled_(resolve, reject);
- }
- });
- };
- PolyfillPromise['all'] = function(thenablesOrValues) {
- var iterator = $jscomp.makeIterator(thenablesOrValues);
- var iterRec = iterator.next();
- if (iterRec.done) {
- return resolvingPromise([]);
- } else {
- return new PolyfillPromise(function(resolveAll, rejectAll) {
- var resultsArray = [];
- var unresolvedCount = 0;
- function onFulfilled(i) {
- return function(ithResult) {
- resultsArray[i] = ithResult;
- unresolvedCount--;
- if (unresolvedCount == 0) {
- resolveAll(resultsArray);
- }
- };
- }
- do {
- resultsArray.push(undefined);
- unresolvedCount++;
- resolvingPromise(iterRec.value).callWhenSettled_(onFulfilled(resultsArray.length - 1), rejectAll);
- iterRec = iterator.next();
- } while (!iterRec.done);
- });
- }
- };
- return PolyfillPromise;
- }, 'es6', 'es3');
- $jscomp.polyfill('Promise.prototype.finally', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(onFinally) {
- return this.then(function(value) {
- var promise = Promise.resolve(onFinally());
- return promise.then(function() {
- return value;
- });
- }, function(reason) {
- var promise = Promise.resolve(onFinally());
- return promise.then(function() {
- throw reason;
- });
- });
- };
- return polyfill;
- }, 'es9', 'es3');
- $jscomp.underscoreProtoCanBeSet = function() {
- var x = {a:true};
- var y = {};
- try {
- y.__proto__ = x;
- return y.a;
- } catch (e) {
- }
- return false;
- };
- $jscomp.setPrototypeOf = typeof Object.setPrototypeOf == 'function' ? Object.setPrototypeOf : $jscomp.underscoreProtoCanBeSet() ? function(target, proto) {
- target.__proto__ = proto;
- if (target.__proto__ !== proto) {
- throw new TypeError(target + ' is not extensible');
- }
- return target;
- } : null;
- $jscomp.generator = {};
- $jscomp.generator.ensureIteratorResultIsObject_ = function(result) {
- if (result instanceof Object) {
- return;
- }
- throw new TypeError('Iterator result ' + result + ' is not an object');
- };
- $jscomp.generator.Context = function() {
- this.isRunning_ = false;
- this.yieldAllIterator_ = null;
- this.yieldResult = undefined;
- this.nextAddress = 1;
- this.catchAddress_ = 0;
- this.finallyAddress_ = 0;
- this.abruptCompletion_ = null;
- this.finallyContexts_ = null;
- };
- $jscomp.generator.Context.prototype.start_ = function() {
- if (this.isRunning_) {
- throw new TypeError('Generator is already running');
- }
- this.isRunning_ = true;
- };
- $jscomp.generator.Context.prototype.stop_ = function() {
- this.isRunning_ = false;
- };
- $jscomp.generator.Context.prototype.jumpToErrorHandler_ = function() {
- this.nextAddress = this.catchAddress_ || this.finallyAddress_;
- };
- $jscomp.generator.Context.prototype.next_ = function(value) {
- this.yieldResult = value;
- };
- $jscomp.generator.Context.prototype.throw_ = function(e) {
- this.abruptCompletion_ = {exception:e, isException:true};
- this.jumpToErrorHandler_();
- };
- $jscomp.generator.Context.prototype['return'] = function(value) {
- this.abruptCompletion_ = {'return':value};
- this.nextAddress = this.finallyAddress_;
- };
- $jscomp.generator.Context.prototype.jumpThroughFinallyBlocks = function(nextAddress) {
- this.abruptCompletion_ = {jumpTo:nextAddress};
- this.nextAddress = this.finallyAddress_;
- };
- $jscomp.generator.Context.prototype.yield = function(value, resumeAddress) {
- this.nextAddress = resumeAddress;
- return {value:value};
- };
- $jscomp.generator.Context.prototype.yieldAll = function(iterable, resumeAddress) {
- var iterator = $jscomp.makeIterator(iterable);
- var result = iterator.next();
- $jscomp.generator.ensureIteratorResultIsObject_(result);
- if (result.done) {
- this.yieldResult = result.value;
- this.nextAddress = resumeAddress;
- return;
- }
- this.yieldAllIterator_ = iterator;
- return this.yield(result.value, resumeAddress);
- };
- $jscomp.generator.Context.prototype.jumpTo = function(nextAddress) {
- this.nextAddress = nextAddress;
- };
- $jscomp.generator.Context.prototype.jumpToEnd = function() {
- this.nextAddress = 0;
- };
- $jscomp.generator.Context.prototype.setCatchFinallyBlocks = function(catchAddress, finallyAddress) {
- this.catchAddress_ = catchAddress;
- if (finallyAddress != undefined) {
- this.finallyAddress_ = finallyAddress;
- }
- };
- $jscomp.generator.Context.prototype.setFinallyBlock = function(finallyAddress) {
- this.catchAddress_ = 0;
- this.finallyAddress_ = finallyAddress || 0;
- };
- $jscomp.generator.Context.prototype.leaveTryBlock = function(nextAddress, catchAddress) {
- this.nextAddress = nextAddress;
- this.catchAddress_ = catchAddress || 0;
- };
- $jscomp.generator.Context.prototype.enterCatchBlock = function(nextCatchBlockAddress) {
- this.catchAddress_ = nextCatchBlockAddress || 0;
- var exception = this.abruptCompletion_.exception;
- this.abruptCompletion_ = null;
- return exception;
- };
- $jscomp.generator.Context.prototype.enterFinallyBlock = function(nextCatchAddress, nextFinallyAddress, finallyDepth) {
- if (!finallyDepth) {
- this.finallyContexts_ = [this.abruptCompletion_];
- } else {
- this.finallyContexts_[finallyDepth] = this.abruptCompletion_;
- }
- this.catchAddress_ = nextCatchAddress || 0;
- this.finallyAddress_ = nextFinallyAddress || 0;
- };
- $jscomp.generator.Context.prototype.leaveFinallyBlock = function(nextAddress, finallyDepth) {
- var preservedContext = this.finallyContexts_.splice(finallyDepth || 0)[0];
- var abruptCompletion = this.abruptCompletion_ = this.abruptCompletion_ || preservedContext;
- if (abruptCompletion) {
- if (abruptCompletion.isException) {
- return this.jumpToErrorHandler_();
- }
- if (abruptCompletion.jumpTo != undefined && this.finallyAddress_ < abruptCompletion.jumpTo) {
- this.nextAddress = abruptCompletion.jumpTo;
- this.abruptCompletion_ = null;
- } else {
- this.nextAddress = this.finallyAddress_;
- }
- } else {
- this.nextAddress = nextAddress;
- }
- };
- $jscomp.generator.Context.prototype.forIn = function(object) {
- return new $jscomp.generator.Context.PropertyIterator(object);
- };
- $jscomp.generator.Context.PropertyIterator = function(object) {
- this.object_ = object;
- this.properties_ = [];
- for (var property in object) {
- this.properties_.push(property);
- }
- this.properties_.reverse();
- };
- $jscomp.generator.Context.PropertyIterator.prototype.getNext = function() {
- while (this.properties_.length > 0) {
- var property = this.properties_.pop();
- if (property in this.object_) {
- return property;
- }
- }
- return null;
- };
- $jscomp.generator.Engine_ = function(program) {
- this.context_ = new $jscomp.generator.Context;
- this.program_ = program;
- };
- $jscomp.generator.Engine_.prototype.next_ = function(value) {
- this.context_.start_();
- if (this.context_.yieldAllIterator_) {
- return this.yieldAllStep_(this.context_.yieldAllIterator_.next, value, this.context_.next_);
- }
- this.context_.next_(value);
- return this.nextStep_();
- };
- $jscomp.generator.Engine_.prototype.return_ = function(value) {
- this.context_.start_();
- var yieldAllIterator = this.context_.yieldAllIterator_;
- if (yieldAllIterator) {
- var returnFunction = 'return' in yieldAllIterator ? yieldAllIterator['return'] : function(v) {
- return {value:v, done:true};
- };
- return this.yieldAllStep_(returnFunction, value, this.context_['return']);
- }
- this.context_['return'](value);
- return this.nextStep_();
- };
- $jscomp.generator.Engine_.prototype.throw_ = function(exception) {
- this.context_.start_();
- if (this.context_.yieldAllIterator_) {
- return this.yieldAllStep_(this.context_.yieldAllIterator_['throw'], exception, this.context_.next_);
- }
- this.context_.throw_(exception);
- return this.nextStep_();
- };
- $jscomp.generator.Engine_.prototype.yieldAllStep_ = function(action, value, nextAction) {
- try {
- var result = action.call(this.context_.yieldAllIterator_, value);
- $jscomp.generator.ensureIteratorResultIsObject_(result);
- if (!result.done) {
- this.context_.stop_();
- return result;
- }
- var resultValue = result.value;
- } catch (e) {
- this.context_.yieldAllIterator_ = null;
- this.context_.throw_(e);
- return this.nextStep_();
- }
- this.context_.yieldAllIterator_ = null;
- nextAction.call(this.context_, resultValue);
- return this.nextStep_();
- };
- $jscomp.generator.Engine_.prototype.nextStep_ = function() {
- while (this.context_.nextAddress) {
- try {
- var yieldValue = this.program_(this.context_);
- if (yieldValue) {
- this.context_.stop_();
- return {value:yieldValue.value, done:false};
- }
- } catch (e) {
- this.context_.yieldResult = undefined;
- this.context_.throw_(e);
- }
- }
- this.context_.stop_();
- if (this.context_.abruptCompletion_) {
- var abruptCompletion = this.context_.abruptCompletion_;
- this.context_.abruptCompletion_ = null;
- if (abruptCompletion.isException) {
- throw abruptCompletion.exception;
- }
- return {value:abruptCompletion['return'], done:true};
- }
- return {value:undefined, done:true};
- };
- $jscomp.generator.Generator_ = function(engine) {
- this.next = function(opt_value) {
- return engine.next_(opt_value);
- };
- this['throw'] = function(exception) {
- return engine.throw_(exception);
- };
- this['return'] = function(value) {
- return engine.return_(value);
- };
- $jscomp.initSymbolIterator();
- this[Symbol.iterator] = function() {
- return this;
- };
- };
- $jscomp.generator.createGenerator = function(generator, program) {
- var result = new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(program));
- if ($jscomp.setPrototypeOf) {
- $jscomp.setPrototypeOf(result, generator.prototype);
- }
- return result;
- };
- $jscomp.asyncExecutePromiseGenerator = function(generator) {
- function passValueToGenerator(value) {
- return generator.next(value);
- }
- function passErrorToGenerator(error) {
- return generator['throw'](error);
- }
- return new Promise(function(resolve, reject) {
- function handleGeneratorRecord(genRec) {
- if (genRec.done) {
- resolve(genRec.value);
- } else {
- Promise.resolve(genRec.value).then(passValueToGenerator, passErrorToGenerator).then(handleGeneratorRecord, reject);
- }
- }
- handleGeneratorRecord(generator.next());
- });
- };
- $jscomp.asyncExecutePromiseGeneratorFunction = function(generatorFunction) {
- return $jscomp.asyncExecutePromiseGenerator(generatorFunction());
- };
- $jscomp.asyncExecutePromiseGeneratorProgram = function(program) {
- return $jscomp.asyncExecutePromiseGenerator(new $jscomp.generator.Generator_(new $jscomp.generator.Engine_(program)));
- };
- $jscomp.checkEs6ConformanceViaProxy = function() {
- try {
- var proxied = {};
- var proxy = Object.create(new $jscomp.global['Proxy'](proxied, {'get':function(target, key, receiver) {
- return target == proxied && key == 'q' && receiver == proxy;
- }}));
- return proxy['q'] === true;
- } catch (err) {
- return false;
- }
- };
- $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS = false;
- $jscomp.ES6_CONFORMANCE = $jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS && $jscomp.checkEs6ConformanceViaProxy();
- $jscomp.owns = function(obj, prop) {
- return Object.prototype.hasOwnProperty.call(obj, prop);
- };
- $jscomp.polyfill('WeakMap', function(NativeWeakMap) {
- function isConformant() {
- if (!NativeWeakMap || !Object.seal) {
- return false;
- }
- try {
- var x = Object.seal({});
- var y = Object.seal({});
- var map = new NativeWeakMap([[x, 2], [y, 3]]);
- if (map.get(x) != 2 || map.get(y) != 3) {
- return false;
- }
- map['delete'](x);
- map.set(y, 4);
- return !map.has(x) && map.get(y) == 4;
- } catch (err) {
- return false;
- }
- }
- if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {
- if (NativeWeakMap && $jscomp.ES6_CONFORMANCE) {
- return NativeWeakMap;
- }
- } else {
- if (isConformant()) {
- return NativeWeakMap;
- }
- }
- var prop = '$jscomp_hidden_' + Math.random();
- function insert(target) {
- if (!$jscomp.owns(target, prop)) {
- var obj = {};
- $jscomp.defineProperty(target, prop, {value:obj});
- }
- }
- function patch(name) {
- var prev = Object[name];
- if (prev) {
- Object[name] = function(target) {
- insert(target);
- return prev(target);
- };
- }
- }
- patch('freeze');
- patch('preventExtensions');
- patch('seal');
- var index = 0;
- var PolyfillWeakMap = function(opt_iterable) {
- this.id_ = (index += Math.random() + 1).toString();
- if (opt_iterable) {
- $jscomp.initSymbol();
- $jscomp.initSymbolIterator();
- var iter = $jscomp.makeIterator(opt_iterable);
- var entry;
- while (!(entry = iter.next()).done) {
- var item = entry.value;
- this.set(item[0], item[1]);
- }
- }
- };
- PolyfillWeakMap.prototype.set = function(key, value) {
- insert(key);
- if (!$jscomp.owns(key, prop)) {
- throw new Error('WeakMap key fail: ' + key);
- }
- key[prop][this.id_] = value;
- return this;
- };
- PolyfillWeakMap.prototype.get = function(key) {
- return $jscomp.owns(key, prop) ? key[prop][this.id_] : undefined;
- };
- PolyfillWeakMap.prototype.has = function(key) {
- return $jscomp.owns(key, prop) && $jscomp.owns(key[prop], this.id_);
- };
- PolyfillWeakMap.prototype['delete'] = function(key) {
- if (!$jscomp.owns(key, prop) || !$jscomp.owns(key[prop], this.id_)) {
- return false;
- }
- return delete key[prop][this.id_];
- };
- return PolyfillWeakMap;
- }, 'es6', 'es3');
- $jscomp.MapEntry = function() {
- this.previous;
- this.next;
- this.head;
- this.key;
- this.value;
- };
- $jscomp.polyfill('Map', function(NativeMap) {
- function isConformant() {
- if ($jscomp.ASSUME_NO_NATIVE_MAP || !NativeMap || typeof NativeMap != 'function' || !NativeMap.prototype.entries || typeof Object.seal != 'function') {
- return false;
- }
- try {
- NativeMap = NativeMap;
- var key = Object.seal({x:4});
- var map = new NativeMap($jscomp.makeIterator([[key, 's']]));
- if (map.get(key) != 's' || map.size != 1 || map.get({x:4}) || map.set({x:4}, 't') != map || map.size != 2) {
- return false;
- }
- var iter = map.entries();
- var item = iter.next();
- if (item.done || item.value[0] != key || item.value[1] != 's') {
- return false;
- }
- item = iter.next();
- if (item.done || item.value[0].x != 4 || item.value[1] != 't' || !iter.next().done) {
- return false;
- }
- return true;
- } catch (err) {
- return false;
- }
- }
- if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {
- if (NativeMap && $jscomp.ES6_CONFORMANCE) {
- return NativeMap;
- }
- } else {
- if (isConformant()) {
- return NativeMap;
- }
- }
- $jscomp.initSymbol();
- $jscomp.initSymbolIterator();
- var idMap = new WeakMap;
- var PolyfillMap = function(opt_iterable) {
- this.data_ = {};
- this.head_ = createHead();
- this.size = 0;
- if (opt_iterable) {
- var iter = $jscomp.makeIterator(opt_iterable);
- var entry;
- while (!(entry = iter.next()).done) {
- var item = entry.value;
- this.set(item[0], item[1]);
- }
- }
- };
- PolyfillMap.prototype.set = function(key, value) {
- key = key === 0 ? 0 : key;
- var r = maybeGetEntry(this, key);
- if (!r.list) {
- r.list = this.data_[r.id] = [];
- }
- if (!r.entry) {
- r.entry = {next:this.head_, previous:this.head_.previous, head:this.head_, key:key, value:value};
- r.list.push(r.entry);
- this.head_.previous.next = r.entry;
- this.head_.previous = r.entry;
- this.size++;
- } else {
- r.entry.value = value;
- }
- return this;
- };
- PolyfillMap.prototype['delete'] = function(key) {
- var r = maybeGetEntry(this, key);
- if (r.entry && r.list) {
- r.list.splice(r.index, 1);
- if (!r.list.length) {
- delete this.data_[r.id];
- }
- r.entry.previous.next = r.entry.next;
- r.entry.next.previous = r.entry.previous;
- r.entry.head = null;
- this.size--;
- return true;
- }
- return false;
- };
- PolyfillMap.prototype.clear = function() {
- this.data_ = {};
- this.head_ = this.head_.previous = createHead();
- this.size = 0;
- };
- PolyfillMap.prototype.has = function(key) {
- return !!maybeGetEntry(this, key).entry;
- };
- PolyfillMap.prototype.get = function(key) {
- var entry = maybeGetEntry(this, key).entry;
- return entry && entry.value;
- };
- PolyfillMap.prototype.entries = function() {
- return makeIterator(this, function(entry) {
- return [entry.key, entry.value];
- });
- };
- PolyfillMap.prototype.keys = function() {
- return makeIterator(this, function(entry) {
- return entry.key;
- });
- };
- PolyfillMap.prototype.values = function() {
- return makeIterator(this, function(entry) {
- return entry.value;
- });
- };
- PolyfillMap.prototype.forEach = function(callback, opt_thisArg) {
- var iter = this.entries();
- var item;
- while (!(item = iter.next()).done) {
- var entry = item.value;
- callback.call(opt_thisArg, entry[1], entry[0], this);
- }
- };
- PolyfillMap.prototype[Symbol.iterator] = PolyfillMap.prototype.entries;
- var maybeGetEntry = function(map, key) {
- var id = getId(key);
- var list = map.data_[id];
- if (list && $jscomp.owns(map.data_, id)) {
- for (var index = 0; index < list.length; index++) {
- var entry = list[index];
- if (key !== key && entry.key !== entry.key || key === entry.key) {
- return {id:id, list:list, index:index, entry:entry};
- }
- }
- }
- return {id:id, list:list, index:-1, entry:undefined};
- };
- var makeIterator = function(map, func) {
- var entry = map.head_;
- return $jscomp.iteratorPrototype(function() {
- if (entry) {
- while (entry.head != map.head_) {
- entry = entry.previous;
- }
- while (entry.next != entry.head) {
- entry = entry.next;
- return {done:false, value:func(entry)};
- }
- entry = null;
- }
- return {done:true, value:void 0};
- });
- };
- var createHead = function() {
- var head = {};
- head.previous = head.next = head.head = head;
- return head;
- };
- var mapIndex = 0;
- var getId = function(obj) {
- var type = obj && typeof obj;
- if (type == 'object' || type == 'function') {
- obj = obj;
- if (!idMap.has(obj)) {
- var id = '' + ++mapIndex;
- idMap.set(obj, id);
- return id;
- }
- return idMap.get(obj);
- }
- return 'p_' + obj;
- };
- return PolyfillMap;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.acosh', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- return Math.log(x + Math.sqrt(x * x - 1));
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.asinh', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- if (x === 0) {
- return x;
- }
- var y = Math.log(Math.abs(x) + Math.sqrt(x * x + 1));
- return x < 0 ? -y : y;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.log1p', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- if (x < 0.25 && x > -0.25) {
- var y = x;
- var d = 1;
- var z = x;
- var zPrev = 0;
- var s = 1;
- while (zPrev != z) {
- y *= x;
- s *= -1;
- z = (zPrev = z) + s * y / ++d;
- }
- return z;
- }
- return Math.log(1 + x);
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.atanh', function(orig) {
- if (orig) {
- return orig;
- }
- var log1p = Math.log1p;
- var polyfill = function(x) {
- x = Number(x);
- return (log1p(x) - log1p(-x)) / 2;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.cbrt', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- if (x === 0) {
- return x;
- }
- x = Number(x);
- var y = Math.pow(Math.abs(x), 1 / 3);
- return x < 0 ? -y : y;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.clz32', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x) >>> 0;
- if (x === 0) {
- return 32;
- }
- var result = 0;
- if ((x & 4294901760) === 0) {
- x <<= 16;
- result += 16;
- }
- if ((x & 4278190080) === 0) {
- x <<= 8;
- result += 8;
- }
- if ((x & 4026531840) === 0) {
- x <<= 4;
- result += 4;
- }
- if ((x & 3221225472) === 0) {
- x <<= 2;
- result += 2;
- }
- if ((x & 2147483648) === 0) {
- result++;
- }
- return result;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.cosh', function(orig) {
- if (orig) {
- return orig;
- }
- var exp = Math.exp;
- var polyfill = function(x) {
- x = Number(x);
- return (exp(x) + exp(-x)) / 2;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.expm1', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- if (x < .25 && x > -.25) {
- var y = x;
- var d = 1;
- var z = x;
- var zPrev = 0;
- while (zPrev != z) {
- y *= x / ++d;
- z = (zPrev = z) + y;
- }
- return z;
- }
- return Math.exp(x) - 1;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.hypot', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x, y, var_args) {
- x = Number(x);
- y = Number(y);
- var i, z, sum;
- var max = Math.max(Math.abs(x), Math.abs(y));
- for (i = 2; i < arguments.length; i++) {
- max = Math.max(max, Math.abs(arguments[i]));
- }
- if (max > 1e100 || max < 1e-100) {
- if (!max) {
- return max;
- }
- x = x / max;
- y = y / max;
- sum = x * x + y * y;
- for (i = 2; i < arguments.length; i++) {
- z = Number(arguments[i]) / max;
- sum += z * z;
- }
- return Math.sqrt(sum) * max;
- } else {
- sum = x * x + y * y;
- for (i = 2; i < arguments.length; i++) {
- z = Number(arguments[i]);
- sum += z * z;
- }
- return Math.sqrt(sum);
- }
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.imul', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(a, b) {
- a = Number(a);
- b = Number(b);
- var ah = a >>> 16 & 65535;
- var al = a & 65535;
- var bh = b >>> 16 & 65535;
- var bl = b & 65535;
- var lh = ah * bl + al * bh << 16 >>> 0;
- return al * bl + lh | 0;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.log10', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- return Math.log(x) / Math.LN10;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.log2', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- return Math.log(x) / Math.LN2;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.sign', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- return x === 0 || isNaN(x) ? x : x > 0 ? 1 : -1;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.sinh', function(orig) {
- if (orig) {
- return orig;
- }
- var exp = Math.exp;
- var polyfill = function(x) {
- x = Number(x);
- if (x === 0) {
- return x;
- }
- return (exp(x) - exp(-x)) / 2;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.tanh', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- if (x === 0) {
- return x;
- }
- var y = Math.exp(-2 * Math.abs(x));
- var z = (1 - y) / (1 + y);
- return x < 0 ? -z : z;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Math.trunc', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- x = Number(x);
- if (isNaN(x) || x === Infinity || x === -Infinity || x === 0) {
- return x;
- }
- var y = Math.floor(Math.abs(x));
- return x < 0 ? -y : y;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.EPSILON', function(orig) {
- return Math.pow(2, -52);
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.MAX_SAFE_INTEGER', function() {
- return 9007199254740991;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.MIN_SAFE_INTEGER', function() {
- return -9007199254740991;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.isFinite', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- if (typeof x !== 'number') {
- return false;
- }
- return !isNaN(x) && x !== Infinity && x !== -Infinity;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.isInteger', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- if (!Number.isFinite(x)) {
- return false;
- }
- return x === Math.floor(x);
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.isNaN', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- return typeof x === 'number' && isNaN(x);
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.isSafeInteger', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(x) {
- return Number.isInteger(x) && Math.abs(x) <= Number.MAX_SAFE_INTEGER;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.parseFloat', function(orig) {
- return orig || parseFloat;
- }, 'es6', 'es3');
- $jscomp.polyfill('Number.parseInt', function(orig) {
- return orig || parseInt;
- }, 'es6', 'es3');
- $jscomp.assign = typeof Object.assign == 'function' ? Object.assign : function(target, var_args) {
- for (var i = 1; i < arguments.length; i++) {
- var source = arguments[i];
- if (!source) {
- continue;
- }
- for (var key in source) {
- if ($jscomp.owns(source, key)) {
- target[key] = source[key];
- }
- }
- }
- return target;
- };
- $jscomp.polyfill('Object.assign', function(orig) {
- return orig || $jscomp.assign;
- }, 'es6', 'es3');
- $jscomp.polyfill('Object.entries', function(orig) {
- if (orig) {
- return orig;
- }
- var entries = function(obj) {
- var result = [];
- for (var key in obj) {
- if ($jscomp.owns(obj, key)) {
- result.push([key, obj[key]]);
- }
- }
- return result;
- };
- return entries;
- }, 'es8', 'es3');
- $jscomp.polyfill('Object.getOwnPropertySymbols', function(orig) {
- if (orig) {
- return orig;
- }
- return function() {
- return [];
- };
- }, 'es6', 'es5');
- $jscomp.polyfill('Reflect.ownKeys', function(orig) {
- if (orig) {
- return orig;
- }
- var symbolPrefix = 'jscomp_symbol_';
- function isSymbol(key) {
- return key.substring(0, symbolPrefix.length) == symbolPrefix;
- }
- var polyfill = function(target) {
- var keys = [];
- var names = Object.getOwnPropertyNames(target);
- var symbols = Object.getOwnPropertySymbols(target);
- for (var i = 0; i < names.length; i++) {
- (isSymbol(names[i]) ? symbols : keys).push(names[i]);
- }
- return keys.concat(symbols);
- };
- return polyfill;
- }, 'es6', 'es5');
- $jscomp.polyfill('Object.getOwnPropertyDescriptors', function(orig) {
- if (orig) {
- return orig;
- }
- var getOwnPropertyDescriptors = function(obj) {
- var result = {};
- var keys = Reflect.ownKeys(obj);
- for (var i = 0; i < keys.length; i++) {
- result[keys[i]] = Object.getOwnPropertyDescriptor(obj, keys[i]);
- }
- return result;
- };
- return getOwnPropertyDescriptors;
- }, 'es8', 'es5');
- $jscomp.polyfill('Object.setPrototypeOf', function(orig) {
- return orig || $jscomp.setPrototypeOf;
- }, 'es6', 'es5');
- $jscomp.polyfill('Object.values', function(orig) {
- if (orig) {
- return orig;
- }
- var values = function(obj) {
- var result = [];
- for (var key in obj) {
- if ($jscomp.owns(obj, key)) {
- result.push(obj[key]);
- }
- }
- return result;
- };
- return values;
- }, 'es8', 'es3');
- $jscomp.polyfill('Reflect.apply', function(orig) {
- if (orig) {
- return orig;
- }
- var apply = Function.prototype.apply;
- var polyfill = function(target, thisArg, argList) {
- return apply.call(target, thisArg, argList);
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.objectCreate = $jscomp.ASSUME_ES5 || typeof Object.create == 'function' ? Object.create : function(prototype) {
- var ctor = function() {
- };
- ctor.prototype = prototype;
- return new ctor;
- };
- $jscomp.construct = function() {
- function reflectConstructWorks() {
- function Base() {
- }
- function Derived() {
- }
- new Base;
- Reflect.construct(Base, [], Derived);
- return new Base instanceof Base;
- }
- if (typeof Reflect != 'undefined' && Reflect.construct) {
- if (reflectConstructWorks()) {
- return Reflect.construct;
- }
- var brokenConstruct = Reflect.construct;
- var patchedConstruct = function(target, argList, opt_newTarget) {
- var out = brokenConstruct(target, argList);
- if (opt_newTarget) {
- Reflect.setPrototypeOf(out, opt_newTarget.prototype);
- }
- return out;
- };
- return patchedConstruct;
- }
- function construct(target, argList, opt_newTarget) {
- if (opt_newTarget === undefined) {
- opt_newTarget = target;
- }
- var proto = opt_newTarget.prototype || Object.prototype;
- var obj = $jscomp.objectCreate(proto);
- var apply = Function.prototype.apply;
- var out = apply.call(target, obj, argList);
- return out || obj;
- }
- return construct;
- }();
- $jscomp.polyfill('Reflect.construct', function(orig) {
- return $jscomp.construct;
- }, 'es6', 'es3');
- $jscomp.polyfill('Reflect.defineProperty', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(target, propertyKey, attributes) {
- try {
- Object.defineProperty(target, propertyKey, attributes);
- var desc = Object.getOwnPropertyDescriptor(target, propertyKey);
- if (!desc) {
- return false;
- }
- return desc.configurable === (attributes.configurable || false) && desc.enumerable === (attributes.enumerable || false) && ('value' in desc ? desc.value === attributes.value && desc.writable === (attributes.writable || false) : desc.get === attributes.get && desc.set === attributes.set);
- } catch (err) {
- return false;
- }
- };
- return polyfill;
- }, 'es6', 'es5');
- $jscomp.polyfill('Reflect.deleteProperty', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(target, propertyKey) {
- if (!$jscomp.owns(target, propertyKey)) {
- return true;
- }
- try {
- return delete target[propertyKey];
- } catch (err) {
- return false;
- }
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Reflect.getOwnPropertyDescriptor', function(orig) {
- return orig || Object.getOwnPropertyDescriptor;
- }, 'es6', 'es5');
- $jscomp.polyfill('Reflect.getPrototypeOf', function(orig) {
- return orig || Object.getPrototypeOf;
- }, 'es6', 'es5');
- $jscomp.findDescriptor = function(target, propertyKey) {
- var obj = target;
- while (obj) {
- var property = Reflect.getOwnPropertyDescriptor(obj, propertyKey);
- if (property) {
- return property;
- }
- obj = Reflect.getPrototypeOf(obj);
- }
- return undefined;
- };
- $jscomp.polyfill('Reflect.get', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(target, propertyKey, opt_receiver) {
- if (arguments.length <= 2) {
- return target[propertyKey];
- }
- var property = $jscomp.findDescriptor(target, propertyKey);
- if (property) {
- return property.get ? property.get.call(opt_receiver) : property.value;
- }
- return undefined;
- };
- return polyfill;
- }, 'es6', 'es5');
- $jscomp.polyfill('Reflect.has', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(target, propertyKey) {
- return propertyKey in target;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Reflect.isExtensible', function(orig) {
- if (orig) {
- return orig;
- }
- if ($jscomp.ASSUME_ES5 || typeof Object.isExtensible == 'function') {
- return Object.isExtensible;
- }
- return function() {
- return true;
- };
- }, 'es6', 'es3');
- $jscomp.polyfill('Reflect.preventExtensions', function(orig) {
- if (orig) {
- return orig;
- }
- if (!($jscomp.ASSUME_ES5 || typeof Object.preventExtensions == 'function')) {
- return function() {
- return false;
- };
- }
- var polyfill = function(target) {
- Object.preventExtensions(target);
- return !Object.isExtensible(target);
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('Reflect.set', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(target, propertyKey, value, opt_receiver) {
- var property = $jscomp.findDescriptor(target, propertyKey);
- if (!property) {
- if (Reflect.isExtensible(target)) {
- target[propertyKey] = value;
- return true;
- }
- return false;
- }
- if (property.set) {
- property.set.call(arguments.length > 3 ? opt_receiver : target, value);
- return true;
- } else {
- if (property.writable && !Object.isFrozen(target)) {
- target[propertyKey] = value;
- return true;
- }
- }
- return false;
- };
- return polyfill;
- }, 'es6', 'es5');
- $jscomp.polyfill('Reflect.setPrototypeOf', function(orig) {
- if (orig) {
- return orig;
- } else {
- if ($jscomp.setPrototypeOf) {
- var setPrototypeOf = $jscomp.setPrototypeOf;
- var polyfill = function(target, proto) {
- try {
- setPrototypeOf(target, proto);
- return true;
- } catch (e) {
- return false;
- }
- };
- return polyfill;
- } else {
- return null;
- }
- }
- }, 'es6', 'es5');
- $jscomp.polyfill('Set', function(NativeSet) {
- function isConformant() {
- if ($jscomp.ASSUME_NO_NATIVE_SET || !NativeSet || typeof NativeSet != 'function' || !NativeSet.prototype.entries || typeof Object.seal != 'function') {
- return false;
- }
- try {
- NativeSet = NativeSet;
- var value = Object.seal({x:4});
- var set = new NativeSet($jscomp.makeIterator([value]));
- if (!set.has(value) || set.size != 1 || set.add(value) != set || set.size != 1 || set.add({x:4}) != set || set.size != 2) {
- return false;
- }
- var iter = set.entries();
- var item = iter.next();
- if (item.done || item.value[0] != value || item.value[1] != value) {
- return false;
- }
- item = iter.next();
- if (item.done || item.value[0] == value || item.value[0].x != 4 || item.value[1] != item.value[0]) {
- return false;
- }
- return iter.next().done;
- } catch (err) {
- return false;
- }
- }
- if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {
- if (NativeSet && $jscomp.ES6_CONFORMANCE) {
- return NativeSet;
- }
- } else {
- if (isConformant()) {
- return NativeSet;
- }
- }
- $jscomp.initSymbol();
- $jscomp.initSymbolIterator();
- var PolyfillSet = function(opt_iterable) {
- this.map_ = new Map;
- if (opt_iterable) {
- var iter = $jscomp.makeIterator(opt_iterable);
- var entry;
- while (!(entry = iter.next()).done) {
- var item = entry.value;
- this.add(item);
- }
- }
- this.size = this.map_.size;
- };
- PolyfillSet.prototype.add = function(value) {
- value = value === 0 ? 0 : value;
- this.map_.set(value, value);
- this.size = this.map_.size;
- return this;
- };
- PolyfillSet.prototype['delete'] = function(value) {
- var result = this.map_['delete'](value);
- this.size = this.map_.size;
- return result;
- };
- PolyfillSet.prototype.clear = function() {
- this.map_.clear();
- this.size = 0;
- };
- PolyfillSet.prototype.has = function(value) {
- return this.map_.has(value);
- };
- PolyfillSet.prototype.entries = function() {
- return this.map_.entries();
- };
- PolyfillSet.prototype.values = function() {
- return this.map_.values();
- };
- PolyfillSet.prototype.keys = PolyfillSet.prototype.values;
- PolyfillSet.prototype[Symbol.iterator] = PolyfillSet.prototype.values;
- PolyfillSet.prototype.forEach = function(callback, opt_thisArg) {
- var set = this;
- this.map_.forEach(function(value) {
- return callback.call(opt_thisArg, value, value, set);
- });
- };
- return PolyfillSet;
- }, 'es6', 'es3');
- $jscomp.checkStringArgs = function(thisArg, arg, func) {
- if (thisArg == null) {
- throw new TypeError("The 'this' value for String.prototype." + func + ' must not be null or undefined');
- }
- if (arg instanceof RegExp) {
- throw new TypeError('First argument to String.prototype.' + func + ' must not be a regular expression');
- }
- return thisArg + '';
- };
- $jscomp.polyfill('String.prototype.codePointAt', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(position) {
- var string = $jscomp.checkStringArgs(this, null, 'codePointAt');
- var size = string.length;
- position = Number(position) || 0;
- if (!(position >= 0 && position < size)) {
- return void 0;
- }
- position = position | 0;
- var first = string.charCodeAt(position);
- if (first < 55296 || first > 56319 || position + 1 === size) {
- return first;
- }
- var second = string.charCodeAt(position + 1);
- if (second < 56320 || second > 57343) {
- return first;
- }
- return (first - 55296) * 1024 + second + 9216;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('String.prototype.endsWith', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(searchString, opt_position) {
- var string = $jscomp.checkStringArgs(this, searchString, 'endsWith');
- searchString = searchString + '';
- if (opt_position === void 0) {
- opt_position = string.length;
- }
- var i = Math.max(0, Math.min(opt_position | 0, string.length));
- var j = searchString.length;
- while (j > 0 && i > 0) {
- if (string[--i] != searchString[--j]) {
- return false;
- }
- }
- return j <= 0;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('String.fromCodePoint', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(var_args) {
- var result = '';
- for (var i = 0; i < arguments.length; i++) {
- var code = Number(arguments[i]);
- if (code < 0 || code > 1114111 || code !== Math.floor(code)) {
- throw new RangeError('invalid_code_point ' + code);
- }
- if (code <= 65535) {
- result += String.fromCharCode(code);
- } else {
- code -= 65536;
- result += String.fromCharCode(code >>> 10 & 1023 | 55296);
- result += String.fromCharCode(code & 1023 | 56320);
- }
- }
- return result;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('String.prototype.includes', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(searchString, opt_position) {
- var string = $jscomp.checkStringArgs(this, searchString, 'includes');
- return string.indexOf(searchString, opt_position || 0) !== -1;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.polyfill('String.prototype.repeat', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(copies) {
- var string = $jscomp.checkStringArgs(this, null, 'repeat');
- if (copies < 0 || copies > 1342177279) {
- throw new RangeError('Invalid count value');
- }
- copies = copies | 0;
- var result = '';
- while (copies) {
- if (copies & 1) {
- result += string;
- }
- if (copies >>>= 1) {
- string += string;
- }
- }
- return result;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.stringPadding = function(padString, padLength) {
- var padding = padString !== undefined ? String(padString) : ' ';
- if (!(padLength > 0) || !padding) {
- return '';
- }
- var repeats = Math.ceil(padLength / padding.length);
- return padding.repeat(repeats).substring(0, padLength);
- };
- $jscomp.polyfill('String.prototype.padEnd', function(orig) {
- if (orig) {
- return orig;
- }
- var padEnd = function(targetLength, opt_padString) {
- var string = $jscomp.checkStringArgs(this, null, 'padStart');
- var padLength = targetLength - string.length;
- return string + $jscomp.stringPadding(opt_padString, padLength);
- };
- return padEnd;
- }, 'es8', 'es3');
- $jscomp.polyfill('String.prototype.padStart', function(orig) {
- if (orig) {
- return orig;
- }
- var padStart = function(targetLength, opt_padString) {
- var string = $jscomp.checkStringArgs(this, null, 'padStart');
- var padLength = targetLength - string.length;
- return $jscomp.stringPadding(opt_padString, padLength) + string;
- };
- return padStart;
- }, 'es8', 'es3');
- $jscomp.polyfill('String.prototype.startsWith', function(orig) {
- if (orig) {
- return orig;
- }
- var polyfill = function(searchString, opt_position) {
- var string = $jscomp.checkStringArgs(this, searchString, 'startsWith');
- searchString = searchString + '';
- var strLen = string.length;
- var searchLen = searchString.length;
- var i = Math.max(0, Math.min(opt_position | 0, string.length));
- var j = 0;
- while (j < searchLen && i < strLen) {
- if (string[i++] != searchString[j++]) {
- return false;
- }
- }
- return j >= searchLen;
- };
- return polyfill;
- }, 'es6', 'es3');
- $jscomp.arrayFromIterator = function(iterator) {
- var i;
- var arr = [];
- while (!(i = iterator.next()).done) {
- arr.push(i.value);
- }
- return arr;
- };
- $jscomp.arrayFromIterable = function(iterable) {
- if (iterable instanceof Array) {
- return iterable;
- } else {
- return $jscomp.arrayFromIterator($jscomp.makeIterator(iterable));
- }
- };
- $jscomp.inherits = function(childCtor, parentCtor) {
- childCtor.prototype = $jscomp.objectCreate(parentCtor.prototype);
- childCtor.prototype.constructor = childCtor;
- if ($jscomp.setPrototypeOf) {
- var setPrototypeOf = $jscomp.setPrototypeOf;
- setPrototypeOf(childCtor, parentCtor);
- } else {
- for (var p in parentCtor) {
- if (p == 'prototype') {
- continue;
- }
- if (Object.defineProperties) {
- var descriptor = Object.getOwnPropertyDescriptor(parentCtor, p);
- if (descriptor) {
- Object.defineProperty(childCtor, p, descriptor);
- }
- } else {
- childCtor[p] = parentCtor[p];
- }
- }
- }
- childCtor.superClass_ = parentCtor.prototype;
- };
- $jscomp.polyfill('WeakSet', function(NativeWeakSet) {
- function isConformant() {
- if (!NativeWeakSet || !Object.seal) {
- return false;
- }
- try {
- var x = Object.seal({});
- var y = Object.seal({});
- var set = new NativeWeakSet([x]);
- if (!set.has(x) || set.has(y)) {
- return false;
- }
- set['delete'](x);
- set.add(y);
- return !set.has(x) && set.has(y);
- } catch (err) {
- return false;
- }
- }
- if ($jscomp.USE_PROXY_FOR_ES6_CONFORMANCE_CHECKS) {
- if (NativeWeakSet && $jscomp.ES6_CONFORMANCE) {
- return NativeWeakSet;
- }
- } else {
- if (isConformant()) {
- return NativeWeakSet;
- }
- }
- var PolyfillWeakSet = function(opt_iterable) {
- this.map_ = new WeakMap;
- if (opt_iterable) {
- $jscomp.initSymbol();
- $jscomp.initSymbolIterator();
- var iter = $jscomp.makeIterator(opt_iterable);
- var entry;
- while (!(entry = iter.next()).done) {
- var item = entry.value;
- this.add(item);
- }
- }
- };
- PolyfillWeakSet.prototype.add = function(elem) {
- this.map_.set(elem, true);
- return this;
- };
- PolyfillWeakSet.prototype.has = function(elem) {
- return this.map_.has(elem);
- };
- PolyfillWeakSet.prototype['delete'] = function(elem) {
- return this.map_['delete'](elem);
- };
- return PolyfillWeakSet;
- }, 'es6', 'es3');
- try {
- if (Array.prototype.values.toString().indexOf('[native code]') == -1) {
- delete Array.prototype.values;
- }
- } catch (e) {
- }
- Ext.define('Ext.google.ux.Client', {extend:'Ext.Mixin', mixins:['Ext.mixin.Mashup'], requiredScripts:['//apis.google.com/js/client.js?onload\x3d_ext_google_ux_client_initialize_'], statics:{getApiVersion:function(api) {
- var library = this.libraries[api];
- return library && library.state == 2 ? library.version : null;
- }}, mixinConfig:{extended:function(baseClass, derivedClass, classBody) {
- this.load(classBody.googleApis);
- }}, onClassMixedIn:function(cls) {
- this.load(cls.prototype.googleApis);
- }, privates:{statics:{initialized:false, blocked:false, loading:0, libraries:{}, load:function(apis) {
- var libraries = this.libraries, version, library;
- if (!Ext.isObject(apis)) {
- return;
- }
- Ext.Object.each(apis, function(api, cfg) {
- version = cfg.version || 'v1';
- library = libraries[api];
- if (!Ext.isDefined(library)) {
- libraries[api] = {version:version, state:0};
- } else {
- if (library.version !== version) {
- Ext.log.error('Google API: failed to load version "' + version + '" of the', '"' + api + '" API: "' + library.version + '" already loaded.');
- }
- }
- });
- this.refresh();
- }, refresh:function() {
- var me = this;
- if (!me.initialized) {
- return;
- }
- if (!me.blocked) {
- Ext.env.Ready.block();
- me.blocked = true;
- }
- Ext.Object.each(me.libraries, function(api, library) {
- if (library.state == 0) {
- library.state = 1;
- gapi.client.load(api, library.version, function() {
- library.state = 2;
- if (!--me.loading) {
- me.refresh();
- }
- });
- }
- if (library.state == 1) {
- me.loading++;
- }
- });
- if (!me.loading && me.blocked) {
- Ext.env.Ready.unblock();
- me.blocked = false;
- }
- }, initialize:function() {
- this.initialized = true;
- this.refresh();
- }}}});
- _ext_google_ux_client_initialize_ = function() {
- gapi.auth.init(function() {
- Ext.google.ux.Client.initialize();
- });
- };
- Ext.define('Ext.google.data.AbstractProxy', {extend:'Ext.data.proxy.Server', mixins:['Ext.google.ux.Client'], batchActions:false, reader:{type:'json', rootProperty:'items', messageProperty:'error'}, doRequest:function(operation) {
- var me = this, request = me.buildRequest(operation), writer = me.getWriter(), error = false;
- if (writer && operation.allowWrite()) {
- request = writer.write(request);
- }
- me.execute(me.buildApiRequests(request)).then(function(response) {
- me.processApiResponse(operation, request, response);
- });
- return request;
- }, buildUrl:function(request) {
- return '';
- }, privates:{execute:function(requests) {
- requests = [].concat(requests);
- var results = [];
- return Ext.Array.reduce(requests, function(sequence, r) {
- return sequence.then(function() {
- return r.then(function(result) {
- results.push(result);
- });
- });
- }, Ext.Deferred.resolved()).then(function() {
- return {result:results};
- });
- }, processApiResponse:function(operation, request, responses) {
- var error = false, results = [];
- Ext.each(Object.keys(responses.result), function(index) {
- var result = responses.result[index].result;
- if (result.error) {
- error = result.error.message;
- return false;
- }
- results.push(result);
- });
- this.processResponse(true, operation, request, {results:error ? [] : results, success:!error, error:error});
- }, sanitizeItems:function(items) {
- var results = [], ids = [];
- Ext.Array.each(items, function(item) {
- if (!Ext.Array.contains(ids, item.id)) {
- results.push(item);
- ids.push(item.id);
- }
- }, this, true);
- return results;
- }}});
- Ext.define('Ext.google.data.EventsProxy', {extend:'Ext.google.data.AbstractProxy', alias:'proxy.google-events', googleApis:{'calendar':{version:'v3'}}, buildApiRequests:function(request) {
- var me = this, action = request.getAction();
- switch(action) {
- case 'read':
- return me.buildReadApiRequests(request);
- case 'create':
- return me.buildCreateApiRequests(request);
- case 'update':
- return me.buildUpdateApiRequests(request);
- case 'destroy':
- return me.buildDestroyApiRequests(request);
- default:
- Ext.raise('unsupported request: events.' + action);
- return null;
- }
- }, extractResponseData:function(response) {
- var me = this, data = me.callParent(arguments), items = [];
- Ext.each(data.results, function(result) {
- switch(result.kind) {
- case 'calendar#events':
- items = items.concat(result.items.map(me.fromApiEvent.bind(me)));
- break;
- case 'calendar#event':
- items.push(me.fromApiEvent(result));
- break;
- default:
- break;
- }
- });
- return {items:me.sanitizeItems(items), success:data.success, error:data.error};
- }, privates:{toApiEvent:function(data, allDay) {
- var res = {};
- Ext.Object.each(data, function(key, value) {
- var dateTime = null, date = null;
- switch(key) {
- case 'calendarId':
- case 'description':
- res[key] = value;
- break;
- case 'id':
- res.eventId = value;
- break;
- case 'title':
- res.summary = value;
- break;
- case 'startDate':
- case 'endDate':
- if (allDay) {
- date = new Date(value);
- date.setHours(0, -date.getTimezoneOffset());
- date = Ext.Date.format(date, 'Y-m-d');
- } else {
- dateTime = Ext.Date.format(new Date(value), 'c');
- }
- res[key.slice(0, -4)] = {date:date, dateTime:dateTime};
- break;
- default:
- break;
- }
- });
- return res;
- }, fromApiEvent:function(data) {
- var res = {allDay:true};
- Ext.Object.each(data, function(key, value) {
- var date, offset, allDay;
- switch(key) {
- case 'id':
- case 'description':
- res[key] = value;
- break;
- case 'summary':
- res.title = value;
- break;
- case 'start':
- case 'end':
- date = Ext.Date.parse(value.dateTime || value.date, 'C');
- offset = date.getTimezoneOffset();
- allDay = !!value.date;
- if (allDay && offset !== 0) {
- date.setHours(0, -offset);
- }
- res[key + 'Date'] = date;
- res.allDay = res.allDay && allDay;
- break;
- default:
- break;
- }
- });
- return res;
- }, buildReadApiRequests:function(request) {
- var rparams = request.getParams(), start = new Date(rparams.startDate), end = new Date(rparams.endDate), requests = [], next;
- while (start < end) {
- next = Ext.Date.add(start, Ext.Date.MONTH, 3);
- if (next > end) {
- next = end;
- }
- requests.push(gapi.client.calendar.events.list({calendarId:rparams.calendar, timeMin:Ext.Date.format(start, 'C'), timeMax:Ext.Date.format(next, 'C'), singleEvents:true, maxResults:2500}));
- start = next;
- }
- return requests;
- }, buildCreateApiRequests:function(request) {
- var record = request.getRecords()[0];
- return gapi.client.calendar.events.insert(this.toApiEvent(request.getJsonData(), record.get('allDay')));
- }, buildUpdateApiRequests:function(request) {
- var record = request.getRecords()[0], params = this.toApiEvent(request.getJsonData(), record.get('allDay')), prevCalendarId = record.getModified('calendarId'), currCalendarId = record.get('calendarId'), eventId = record.getId(), requests = [];
- params.calendarId = currCalendarId;
- params.eventId = eventId;
- if (prevCalendarId && prevCalendarId !== currCalendarId) {
- requests.push(gapi.client.calendar.events.move({destination:currCalendarId, calendarId:prevCalendarId, eventId:eventId}));
- }
- if (Object.keys(params).length > 2) {
- requests.push(gapi.client.calendar.events.patch(params));
- }
- return requests;
- }, buildDestroyApiRequests:function(request) {
- var record = request.getRecords()[0];
- data = request.getJsonData();
- data.calendarId = data.calendarId || record.get('calendarId') || record.getPrevious('calendarId');
- return gapi.client.calendar.events['delete']({'calendarId':data.calendarId, 'eventId':data.id});
- }}});
- Ext.define('Ext.google.data.CalendarsProxy', {extend:'Ext.google.data.AbstractProxy', alias:'proxy.google-calendars', requires:['Ext.google.data.EventsProxy'], googleApis:{'calendar':{version:'v3'}}, buildApiRequests:function(request) {
- var me = this, action = request.getAction();
- switch(action) {
- case 'read':
- return me.buildReadApiRequests(request);
- case 'update':
- return me.buildUpdateApiRequests(request);
- default:
- Ext.raise('unsupported request: calendars.' + action);
- return null;
- }
- }, extractResponseData:function(response) {
- var me = this, data = me.callParent(arguments), items = [];
- Ext.each(data.results, function(result) {
- switch(result.kind) {
- case 'calendar#calendarList':
- items = items.concat(result.items.map(me.fromApiCalendar.bind(me)));
- break;
- default:
- break;
- }
- });
- return {items:me.sanitizeItems(items), success:data.success, error:data.error};
- }, privates:{toApiCalendar:function(data) {
- var res = {};
- Ext.Object.each(data, function(key, value) {
- switch(key) {
- case 'id':
- res.calendarId = value;
- break;
- case 'hidden':
- res.selected = !value;
- break;
- default:
- break;
- }
- });
- return res;
- }, fromApiCalendar:function(data) {
- var record = {hidden:!data.selected, editable:false, eventStore:{autoSync:true, proxy:{type:'google-events', resourceTypes:'events'}}};
- Ext.Object.each(data, function(key, value) {
- switch(key) {
- case 'id':
- case 'description':
- record[key] = value;
- break;
- case 'backgroundColor':
- record.color = value;
- break;
- case 'summary':
- record.title = value;
- break;
- case 'accessRole':
- record.editable = value == 'owner' || value == 'writer';
- break;
- default:
- break;
- }
- });
- return record;
- }, buildReadApiRequests:function(request) {
- return gapi.client.calendar.calendarList.list();
- }, buildUpdateApiRequests:function(request) {
- var data = this.toApiCalendar(request.getJsonData());
- return gapi.client.calendar.calendarList.patch(data);
- }}});
- Ext.define('Ext.ux.google.Api', {mixins:['Ext.mixin.Mashup'], requiredScripts:['//www.google.com/jsapi'], statics:{loadedModules:{}}, onClassExtended:function(cls, data, hooks) {
- var onBeforeClassCreated = hooks.onBeforeCreated, Api = this;
- hooks.onBeforeCreated = function(cls, data) {
- var me = this, apis = [], requiresGoogle = Ext.Array.from(data.requiresGoogle), loadedModules = Api.loadedModules, remaining = 0, callback = function() {
- if (!--remaining) {
- onBeforeClassCreated.call(me, cls, data, hooks);
- }
- Ext.env.Ready.unblock();
- }, api, i, length;
- length = requiresGoogle.length;
- for (i = 0; i < length; ++i) {
- if (Ext.isString(api = requiresGoogle[i])) {
- apis.push({api:api});
- } else {
- if (Ext.isObject(api)) {
- apis.push(Ext.apply({}, api));
- }
- }
- }
- Ext.each(apis, function(api) {
- var name = api.api, version = String(api.version || '1.x'), module = loadedModules[name];
- if (!module) {
- ++remaining;
- Ext.env.Ready.block();
- loadedModules[name] = module = [callback].concat(api.callback || []);
- delete api.api;
- delete api.version;
- if (!window.google) {
- Ext.raise("'google' is not defined.");
- return false;
- }
- google.load(name, version, Ext.applyIf({callback:function() {
- loadedModules[name] = true;
- for (var n = module.length; n-- > 0;) {
- module[n]();
- }
- }}, api));
- } else {
- if (module !== true) {
- module.push(callback);
- }
- }
- });
- if (!remaining) {
- onBeforeClassCreated.call(me, cls, data, hooks);
- }
- };
- }});
- Ext.define('Ext.ux.google.Map', {extend:'Ext.Container', xtype:['map', 'google-map'], alternateClassName:'Ext.Map', requires:['Ext.util.Geolocation'], mixins:['Ext.mixin.Mashup'], requires:['Ext.data.StoreManager'], requiredScripts:['//maps.googleapis.com/maps/api/js{options}'], isMap:true, config:{useCurrentLocation:false, map:null, geo:null, mapOptions:{}, mapListeners:null, markers:null, markerTemplate:{title:'{title}', position:'{position}', animation:'{animation}', clickable:'{clickable}', draggable:'{draggable}',
- visible:'{visible}'}}, baseCls:Ext.baseCSSPrefix + 'map', constructor:function(config) {
- this.callParent([config]);
- if (!(window.google || {}).maps) {
- this.setHtml('Google Maps API is required');
- }
- }, initialize:function() {
- this.callParent();
- this.initMap();
- this.on({painted:'onPainted', scope:this});
- this.bodyElement.on('touchstart', 'onTouchStart', this);
- }, initMap:function() {
- var map = this.getMap();
- if (!map) {
- var gm = (window.google || {}).maps;
- if (!gm) {
- return null;
- }
- var element = this.mapContainer, mapOptions = this.getMapOptions(), event = gm.event, me = this;
- if (element.dom.firstChild) {
- Ext.fly(element.dom.firstChild).destroy();
- }
- if (Ext.os.is.iPad) {
- Ext.merge({navigationControlOptions:{style:gm.NavigationControlStyle.ZOOM_PAN}}, mapOptions);
- }
- mapOptions.mapTypeId = mapOptions.mapTypeId || gm.MapTypeId.ROADMAP;
- mapOptions.center = mapOptions.center || new gm.LatLng(37.381592, -122.135672);
- if (mapOptions.center && mapOptions.center.latitude && !Ext.isFunction(mapOptions.center.lat)) {
- mapOptions.center = new gm.LatLng(mapOptions.center.latitude, mapOptions.center.longitude);
- }
- mapOptions.zoom = mapOptions.zoom || 12;
- map = new gm.Map(element.dom, mapOptions);
- this.setMap(map);
- event.addListener(map, 'zoom_changed', Ext.bind(me.onZoomChange, me));
- event.addListener(map, 'maptypeid_changed', Ext.bind(me.onTypeChange, me));
- event.addListener(map, 'center_changed', Ext.bind(me.onCenterChange, me));
- event.addListenerOnce(map, 'tilesloaded', Ext.bind(me.onTilesLoaded, me));
- this.addMapListeners();
- }
- return this.getMap();
- }, renderMap:function() {
- this.initMap();
- }, getElementConfig:function() {
- return {reference:'element', className:'x-container', children:[{reference:'bodyElement', className:'x-inner', children:[{reference:'mapContainer', className:Ext.baseCSSPrefix + 'map-container'}]}]};
- }, onTouchStart:function(e) {
- e.makeUnpreventable();
- }, updateMap:function(map) {
- var markers = this.getMarkers();
- if (markers) {
- markers.each(function(record) {
- var marker = this.getMarkerForRecord(record);
- if (marker) {
- marker.setMap(map);
- }
- }, this);
- }
- }, applyMapOptions:function(options) {
- return Ext.merge({}, this.options, options);
- }, updateMapOptions:function(newOptions) {
- var gm = (window.google || {}).maps, map = this.getMap();
- if (gm && map) {
- map.setOptions(newOptions);
- }
- }, applyMarkers:function(value) {
- if (!value) {
- return null;
- }
- if (value.isStore) {
- return value;
- }
- if (Ext.isArray(value)) {
- value = {data:value};
- } else {
- if (Ext.isObject(value)) {
- value = {data:[value]};
- }
- }
- return Ext.getStore(value);
- }, updateMarkers:function(curr, prev) {
- var me = this, listeners = {add:'onMarkersAdd', remove:'onMarkersRemove', itemchange:'onMarkerChange', scope:this};
- if (prev && prev.isStore) {
- prev.getData().un(listeners);
- me.removeMarkers(prev.getRange());
- }
- if (curr && curr.isStore) {
- me.addMarkers(curr.getRange());
- curr.getData().on(listeners);
- }
- }, applyMarkerTemplate:function(value) {
- return Ext.util.ObjectTemplate.create(value);
- }, updateMarkerTemplate:function(value) {
- var markers = this.getMarkers();
- if (markers) {
- this.refreshMarkers(markers.getRange());
- }
- }, doMapCenter:function() {
- this.setMapCenter(this.getMapOptions().center);
- }, getMapOptions:function() {
- return Ext.merge({}, this.options || this.getInitialConfig('mapOptions'));
- }, updateUseCurrentLocation:function(useCurrentLocation) {
- this.setGeo(useCurrentLocation);
- if (!useCurrentLocation) {
- this.setMapCenter();
- }
- }, applyGeo:function(config) {
- return Ext.factory(config, Ext.util.Geolocation, this.getGeo());
- }, updateGeo:function(newGeo, oldGeo) {
- var events = {locationupdate:'onGeoUpdate', locationerror:'onGeoError', scope:this};
- if (oldGeo) {
- oldGeo.un(events);
- }
- if (newGeo) {
- newGeo.on(events);
- newGeo.updateLocation();
- }
- }, onPainted:function() {
- var gm = (window.google || {}).maps, map = this.getMap(), center;
- if (gm && map) {
- center = map.getCenter();
- gm.event.trigger(map, 'resize');
- if (center) {
- map.setCenter(center);
- }
- }
- }, onTilesLoaded:function() {
- this.fireEvent('maprender', this, this.getMap());
- }, addMapListeners:function() {
- var gm = (window.google || {}).maps, map = this.getMap(), mapListeners = this.getMapListeners();
- if (gm) {
- var event = gm.event, me = this, listener, scope, fn, callbackFn, handle;
- if (Ext.isSimpleObject(mapListeners)) {
- for (var eventType in mapListeners) {
- listener = mapListeners[eventType];
- if (Ext.isSimpleObject(listener)) {
- scope = listener.scope;
- fn = listener.fn;
- } else {
- if (Ext.isFunction(listener)) {
- scope = null;
- fn = listener;
- }
- }
- if (fn) {
- callbackFn = function() {
- this.fn.apply(this.scope, [me]);
- if (this.handle) {
- event.removeListener(this.handle);
- delete this.handle;
- delete this.fn;
- delete this.scope;
- }
- };
- handle = event.addListener(map, eventType, Ext.bind(callbackFn, callbackFn));
- callbackFn.fn = fn;
- callbackFn.scope = scope;
- if (listener.single === true) {
- callbackFn.handle = handle;
- }
- }
- }
- }
- }
- }, onGeoUpdate:function(geo) {
- if (geo) {
- this.setMapCenter(new google.maps.LatLng(geo.getLatitude(), geo.getLongitude()));
- }
- }, onGeoError:Ext.emptyFn, setMapCenter:function(coordinates) {
- var me = this, map = me.getMap(), mapOptions = me.getMapOptions(), gm = (window.google || {}).maps, marker;
- if (gm) {
- if (!coordinates) {
- if (map && map.getCenter) {
- coordinates = map.getCenter();
- } else {
- if (mapOptions.hasOwnProperty('center')) {
- coordinates = mapOptions.center;
- } else {
- coordinates = new gm.LatLng(37.381592, -122.135672);
- }
- }
- } else {
- if (coordinates.isModel) {
- var marker = me.getMarkerForRecord(coordinates);
- coordinates = marker && marker.position;
- }
- }
- if (coordinates && !(coordinates instanceof gm.LatLng) && 'longitude' in coordinates) {
- coordinates = new gm.LatLng(coordinates.latitude, coordinates.longitude);
- }
- if (!map) {
- mapOptions.center = mapOptions.center || coordinates;
- me.renderMap();
- map = me.getMap();
- }
- if (map && coordinates instanceof gm.LatLng) {
- map.panTo(coordinates);
- } else {
- this.options = Ext.apply(this.getMapOptions(), {center:coordinates});
- }
- }
- }, fitMarkersInView:function(records) {
- var me = this, map = me.getMap(), b2 = map.getBounds(), markers = me.getMarkers(), gm = (window.google || {}).maps, b1, b1ne, b1sw, b2ne, b2sw;
- if (!map || !b2 || !markers) {
- return;
- }
- if (Ext.isEmpty(records)) {
- records = markers.getRange();
- if (Ext.isEmpty(records)) {
- return;
- }
- }
- b1 = new gm.LatLngBounds;
- Ext.each(records, function(record) {
- var marker = me.getMarkerForRecord(record);
- if (marker) {
- b1.extend(marker.getPosition());
- }
- });
- b1ne = b1.getNorthEast();
- b1sw = b1.getSouthWest();
- b2ne = b2.getNorthEast();
- b2sw = b2.getSouthWest();
- if (b1ne.lat() - b1sw.lat() > b2ne.lat() - b2sw.lat() || b1ne.lng() - b1sw.lng() > b2ne.lng() - b2sw.lng()) {
- map.fitBounds(b1);
- } else {
- map.panToBounds(b1);
- }
- }, onZoomChange:function() {
- var mapOptions = this.getMapOptions(), map = this.getMap(), zoom;
- zoom = map && map.getZoom ? map.getZoom() : mapOptions.zoom || 10;
- this.options = Ext.apply(mapOptions, {zoom:zoom});
- this.fireEvent('zoomchange', this, map, zoom);
- }, onTypeChange:function() {
- var mapOptions = this.getMapOptions(), map = this.getMap(), mapTypeId;
- mapTypeId = map && map.getMapTypeId ? map.getMapTypeId() : mapOptions.mapTypeId;
- this.options = Ext.apply(mapOptions, {mapTypeId:mapTypeId});
- this.fireEvent('typechange', this, map, mapTypeId);
- }, onCenterChange:function() {
- var mapOptions = this.getMapOptions(), map = this.getMap(), center;
- center = map && map.getCenter ? map.getCenter() : mapOptions.center;
- this.options = Ext.apply(mapOptions, {center:center});
- this.fireEvent('centerchange', this, map, center);
- }, doDestroy:function() {
- Ext.destroy(this.getGeo());
- var map = this.getMap();
- if (map && (window.google || {}).maps) {
- google.maps.event.clearInstanceListeners(map);
- }
- this.callParent();
- }, privates:{markerEvents:['click', 'dblclick', 'drag', 'dragend', 'dragstart', 'mousedown', 'mouseout', 'mouseover', 'mouseup', 'rightclick'], getMarkerForRecord:function(record) {
- var expando = record && Ext.getExpando(record, this.getId());
- return expando && expando.marker || null;
- }, buildMarkerOptions:function(record, tpl) {
- var options = tpl.apply(record.getData(true)), gm = (window.google || {}).maps, animation = options.animation;
- if (typeof animation === 'string') {
- options.animation = gm.Animation[animation] || null;
- }
- return options;
- }, addMarkers:function(records) {
- var me = this, eid = me.getId(), map = me.getMap(), tpl = me.getMarkerTemplate(), gm = (window.google || {}).maps, store = me.getMarkers(), events = me.markerEvents;
- Ext.each(records, function(record) {
- var index = store.indexOf(record), options = me.buildMarkerOptions(record, tpl), marker = new gm.Marker(Ext.apply(options, {map:map})), listeners = events.map(function(type) {
- return marker.addListener(type, function(event) {
- me.fireEvent('marker' + type, me, {index:index, record:record, marker:marker, event:event});
- });
- });
- Ext.setExpando(record, eid, {listeners:listeners, marker:marker});
- });
- }, removeMarkers:function(records) {
- var eid = this.getId();
- Ext.each(records, function(record) {
- var expando = Ext.getExpando(record, eid), marker = expando && expando.marker;
- if (marker) {
- marker.setMap(null);
- Ext.each(expando.listeners || [], function(listener) {
- listener.remove();
- });
- }
- Ext.setExpando(record, eid, undefined);
- });
- }, refreshMarkers:function(records) {
- var me = this, tpl = me.getMarkerTemplate(), count = records.length, record, marker, i;
- for (i = 0; i < count; ++i) {
- record = records[i];
- marker = me.getMarkerForRecord(record);
- if (marker) {
- marker.setOptions(me.buildMarkerOptions(record, tpl));
- }
- }
- }, onMarkersAdd:function(collection, details) {
- this.addMarkers(details.items);
- }, onMarkersRemove:function(collection, details) {
- this.removeMarkers(details.items);
- }, onMarkerChange:function(collection, details) {
- this.refreshMarkers([details.item]);
- }}});
- Ext.define('Ext.ux.google.map.Marker', {extend:'Ext.data.Model', fields:[{name:'position', type:'auto'}, {name:'title', type:'string', defaultValue:null}, {name:'animation', type:'number', defaultValue:'DROP', persist:false}, {name:'clickable', type:'boolean', defaultValue:true, persist:false}, {name:'draggable', type:'boolean', defaultValue:false, persist:false}, {name:'visible', type:'boolean', defaultValue:true, persist:false}]});
|