123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815181618171818181918201821182218231824182518261827182818291830183118321833183418351836183718381839184018411842184318441845184618471848184918501851185218531854185518561857185818591860186118621863186418651866186718681869187018711872187318741875187618771878187918801881188218831884188518861887188818891890189118921893189418951896189718981899190019011902190319041905190619071908190919101911191219131914191519161917191819191920192119221923192419251926192719281929193019311932193319341935193619371938193919401941194219431944194519461947194819491950195119521953195419551956195719581959196019611962196319641965196619671968196919701971197219731974197519761977197819791980198119821983198419851986198719881989199019911992199319941995199619971998199920002001200220032004200520062007200820092010201120122013201420152016201720182019202020212022202320242025202620272028202920302031203220332034203520362037203820392040204120422043204420452046204720482049205020512052205320542055205620572058205920602061206220632064206520662067206820692070207120722073207420752076207720782079208020812082208320842085208620872088208920902091209220932094209520962097209820992100210121022103210421052106210721082109211021112112211321142115211621172118211921202121212221232124212521262127212821292130213121322133213421352136213721382139214021412142214321442145214621472148214921502151215221532154215521562157215821592160216121622163216421652166216721682169217021712172217321742175217621772178217921802181218221832184218521862187218821892190219121922193219421952196219721982199220022012202220322042205220622072208220922102211221222132214221522162217221822192220222122222223222422252226222722282229223022312232223322342235223622372238223922402241224222432244224522462247224822492250225122522253225422552256225722582259226022612262226322642265226622672268226922702271227222732274227522762277227822792280228122822283228422852286228722882289229022912292229322942295229622972298229923002301230223032304230523062307230823092310231123122313231423152316231723182319232023212322232323242325232623272328232923302331233223332334233523362337233823392340234123422343234423452346234723482349235023512352235323542355235623572358235923602361236223632364236523662367236823692370237123722373237423752376237723782379238023812382238323842385238623872388238923902391239223932394239523962397239823992400240124022403240424052406240724082409241024112412241324142415241624172418241924202421242224232424242524262427242824292430243124322433243424352436243724382439244024412442244324442445244624472448244924502451245224532454245524562457245824592460246124622463246424652466246724682469247024712472247324742475247624772478247924802481248224832484248524862487248824892490249124922493249424952496249724982499250025012502250325042505250625072508250925102511251225132514251525162517251825192520252125222523252425252526252725282529253025312532253325342535253625372538253925402541254225432544254525462547254825492550255125522553255425552556255725582559256025612562256325642565256625672568256925702571257225732574257525762577257825792580258125822583258425852586258725882589259025912592259325942595259625972598259926002601260226032604260526062607260826092610261126122613261426152616261726182619262026212622262326242625262626272628262926302631263226332634263526362637263826392640264126422643264426452646264726482649265026512652265326542655265626572658265926602661266226632664266526662667266826692670267126722673267426752676267726782679268026812682268326842685268626872688268926902691269226932694269526962697269826992700270127022703270427052706270727082709271027112712271327142715271627172718271927202721272227232724272527262727272827292730273127322733273427352736273727382739274027412742274327442745274627472748274927502751275227532754275527562757275827592760276127622763276427652766276727682769277027712772277327742775277627772778277927802781278227832784278527862787278827892790279127922793279427952796279727982799280028012802280328042805280628072808280928102811281228132814281528162817281828192820282128222823282428252826282728282829283028312832283328342835283628372838283928402841284228432844284528462847284828492850285128522853285428552856285728582859286028612862286328642865286628672868286928702871287228732874287528762877287828792880288128822883288428852886288728882889289028912892289328942895289628972898289929002901290229032904290529062907290829092910291129122913291429152916291729182919292029212922292329242925292629272928292929302931293229332934293529362937293829392940294129422943294429452946294729482949295029512952295329542955295629572958295929602961296229632964296529662967296829692970297129722973297429752976297729782979298029812982298329842985298629872988298929902991299229932994299529962997299829993000300130023003300430053006300730083009301030113012301330143015301630173018301930203021302230233024302530263027302830293030303130323033303430353036303730383039304030413042304330443045304630473048304930503051305230533054305530563057305830593060306130623063306430653066306730683069307030713072307330743075307630773078307930803081308230833084308530863087308830893090309130923093309430953096309730983099310031013102310331043105310631073108310931103111311231133114311531163117311831193120312131223123312431253126312731283129313031313132313331343135313631373138313931403141314231433144314531463147314831493150315131523153315431553156315731583159316031613162316331643165316631673168316931703171317231733174317531763177317831793180318131823183318431853186318731883189319031913192319331943195319631973198319932003201320232033204320532063207320832093210321132123213321432153216321732183219322032213222322332243225322632273228322932303231323232333234323532363237323832393240324132423243324432453246324732483249325032513252325332543255325632573258325932603261326232633264326532663267326832693270327132723273327432753276327732783279328032813282328332843285328632873288328932903291329232933294329532963297329832993300330133023303330433053306330733083309331033113312331333143315331633173318331933203321332233233324332533263327332833293330333133323333333433353336333733383339334033413342334333443345334633473348334933503351335233533354335533563357335833593360336133623363336433653366336733683369337033713372337333743375337633773378337933803381338233833384338533863387338833893390339133923393339433953396339733983399340034013402340334043405340634073408340934103411341234133414341534163417341834193420342134223423342434253426342734283429343034313432343334343435343634373438343934403441344234433444344534463447344834493450345134523453345434553456345734583459346034613462346334643465346634673468346934703471347234733474347534763477347834793480348134823483348434853486348734883489349034913492349334943495349634973498349935003501350235033504350535063507350835093510351135123513351435153516351735183519352035213522352335243525352635273528352935303531353235333534353535363537353835393540354135423543354435453546354735483549355035513552355335543555355635573558355935603561356235633564356535663567356835693570357135723573357435753576357735783579358035813582358335843585358635873588358935903591359235933594359535963597359835993600360136023603360436053606360736083609361036113612361336143615361636173618361936203621362236233624362536263627362836293630363136323633363436353636363736383639364036413642364336443645364636473648364936503651365236533654365536563657365836593660366136623663366436653666366736683669367036713672367336743675367636773678367936803681368236833684368536863687368836893690369136923693369436953696369736983699370037013702370337043705370637073708370937103711371237133714371537163717371837193720372137223723372437253726372737283729373037313732373337343735373637373738373937403741374237433744374537463747374837493750375137523753375437553756375737583759376037613762376337643765376637673768376937703771377237733774377537763777377837793780378137823783378437853786378737883789379037913792379337943795379637973798379938003801380238033804380538063807380838093810381138123813381438153816381738183819382038213822382338243825382638273828382938303831383238333834383538363837383838393840384138423843384438453846384738483849385038513852385338543855385638573858385938603861386238633864386538663867386838693870387138723873387438753876387738783879388038813882388338843885388638873888388938903891389238933894389538963897389838993900390139023903390439053906390739083909391039113912391339143915391639173918391939203921392239233924392539263927392839293930393139323933393439353936393739383939394039413942394339443945394639473948394939503951395239533954395539563957395839593960396139623963396439653966396739683969397039713972397339743975397639773978397939803981398239833984398539863987398839893990399139923993399439953996399739983999400040014002400340044005400640074008400940104011401240134014401540164017401840194020402140224023402440254026402740284029403040314032403340344035403640374038403940404041404240434044404540464047404840494050405140524053405440554056405740584059406040614062406340644065406640674068406940704071407240734074407540764077407840794080408140824083408440854086408740884089409040914092409340944095409640974098409941004101410241034104410541064107410841094110411141124113411441154116411741184119412041214122412341244125412641274128412941304131413241334134413541364137413841394140414141424143414441454146414741484149415041514152415341544155415641574158415941604161416241634164416541664167416841694170417141724173417441754176417741784179418041814182418341844185418641874188418941904191419241934194419541964197419841994200420142024203420442054206420742084209421042114212421342144215421642174218421942204221422242234224422542264227422842294230423142324233423442354236423742384239424042414242424342444245424642474248424942504251425242534254425542564257425842594260426142624263 |
- /*! Browser bundle of nunjucks 3.2.3 (slim, only works with precompiled templates) */
- (function webpackUniversalModuleDefinition(root, factory) {
- if(typeof exports === 'object' && typeof module === 'object')
- module.exports = factory();
- else if(typeof define === 'function' && define.amd)
- define([], factory);
- else if(typeof exports === 'object')
- exports["nunjucks"] = factory();
- else
- root["nunjucks"] = factory();
- })(typeof self !== 'undefined' ? self : this, function() {
- return /******/ (function(modules) { // webpackBootstrap
- /******/ // The module cache
- /******/ var installedModules = {};
- /******/
- /******/ // The require function
- /******/ function __webpack_require__(moduleId) {
- /******/
- /******/ // Check if module is in cache
- /******/ if(installedModules[moduleId]) {
- /******/ return installedModules[moduleId].exports;
- /******/ }
- /******/ // Create a new module (and put it into the cache)
- /******/ var module = installedModules[moduleId] = {
- /******/ i: moduleId,
- /******/ l: false,
- /******/ exports: {}
- /******/ };
- /******/
- /******/ // Execute the module function
- /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
- /******/
- /******/ // Flag the module as loaded
- /******/ module.l = true;
- /******/
- /******/ // Return the exports of the module
- /******/ return module.exports;
- /******/ }
- /******/
- /******/
- /******/ // expose the modules object (__webpack_modules__)
- /******/ __webpack_require__.m = modules;
- /******/
- /******/ // expose the module cache
- /******/ __webpack_require__.c = installedModules;
- /******/
- /******/ // define getter function for harmony exports
- /******/ __webpack_require__.d = function(exports, name, getter) {
- /******/ if(!__webpack_require__.o(exports, name)) {
- /******/ Object.defineProperty(exports, name, {
- /******/ configurable: false,
- /******/ enumerable: true,
- /******/ get: getter
- /******/ });
- /******/ }
- /******/ };
- /******/
- /******/ // getDefaultExport function for compatibility with non-harmony modules
- /******/ __webpack_require__.n = function(module) {
- /******/ var getter = module && module.__esModule ?
- /******/ function getDefault() { return module['default']; } :
- /******/ function getModuleExports() { return module; };
- /******/ __webpack_require__.d(getter, 'a', getter);
- /******/ return getter;
- /******/ };
- /******/
- /******/ // Object.prototype.hasOwnProperty.call
- /******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
- /******/
- /******/ // __webpack_public_path__
- /******/ __webpack_require__.p = "";
- /******/
- /******/ // Load entry module and return exports
- /******/ return __webpack_require__(__webpack_require__.s = 6);
- /******/ })
- /************************************************************************/
- /******/ ([
- /* 0 */
- /***/ (function(module, exports) {
-
-
-
- /***/ }),
- /* 1 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- var ArrayProto = Array.prototype;
- var ObjProto = Object.prototype;
- var escapeMap = {
- '&': '&',
- '"': '"',
- '\'': ''',
- '<': '<',
- '>': '>'
- };
- var escapeRegex = /[&"'<>]/g;
- var exports = module.exports = {};
-
- function hasOwnProp(obj, k) {
- return ObjProto.hasOwnProperty.call(obj, k);
- }
-
- exports.hasOwnProp = hasOwnProp;
-
- function lookupEscape(ch) {
- return escapeMap[ch];
- }
-
- function _prettifyError(path, withInternals, err) {
- if (!err.Update) {
- // not one of ours, cast it
- err = new exports.TemplateError(err);
- }
-
- err.Update(path); // Unless they marked the dev flag, show them a trace from here
-
- if (!withInternals) {
- var old = err;
- err = new Error(old.message);
- err.name = old.name;
- }
-
- return err;
- }
-
- exports._prettifyError = _prettifyError;
-
- function TemplateError(message, lineno, colno) {
- var err;
- var cause;
-
- if (message instanceof Error) {
- cause = message;
- message = cause.name + ": " + cause.message;
- }
-
- if (Object.setPrototypeOf) {
- err = new Error(message);
- Object.setPrototypeOf(err, TemplateError.prototype);
- } else {
- err = this;
- Object.defineProperty(err, 'message', {
- enumerable: false,
- writable: true,
- value: message
- });
- }
-
- Object.defineProperty(err, 'name', {
- value: 'Template render error'
- });
-
- if (Error.captureStackTrace) {
- Error.captureStackTrace(err, this.constructor);
- }
-
- var getStack;
-
- if (cause) {
- var stackDescriptor = Object.getOwnPropertyDescriptor(cause, 'stack');
-
- getStack = stackDescriptor && (stackDescriptor.get || function () {
- return stackDescriptor.value;
- });
-
- if (!getStack) {
- getStack = function getStack() {
- return cause.stack;
- };
- }
- } else {
- var stack = new Error(message).stack;
-
- getStack = function getStack() {
- return stack;
- };
- }
-
- Object.defineProperty(err, 'stack', {
- get: function get() {
- return getStack.call(err);
- }
- });
- Object.defineProperty(err, 'cause', {
- value: cause
- });
- err.lineno = lineno;
- err.colno = colno;
- err.firstUpdate = true;
-
- err.Update = function Update(path) {
- var msg = '(' + (path || 'unknown path') + ')'; // only show lineno + colno next to path of template
- // where error occurred
-
- if (this.firstUpdate) {
- if (this.lineno && this.colno) {
- msg += " [Line " + this.lineno + ", Column " + this.colno + "]";
- } else if (this.lineno) {
- msg += " [Line " + this.lineno + "]";
- }
- }
-
- msg += '\n ';
-
- if (this.firstUpdate) {
- msg += ' ';
- }
-
- this.message = msg + (this.message || '');
- this.firstUpdate = false;
- return this;
- };
-
- return err;
- }
-
- if (Object.setPrototypeOf) {
- Object.setPrototypeOf(TemplateError.prototype, Error.prototype);
- } else {
- TemplateError.prototype = Object.create(Error.prototype, {
- constructor: {
- value: TemplateError
- }
- });
- }
-
- exports.TemplateError = TemplateError;
-
- function escape(val) {
- return val.replace(escapeRegex, lookupEscape);
- }
-
- exports.escape = escape;
-
- function isFunction(obj) {
- return ObjProto.toString.call(obj) === '[object Function]';
- }
-
- exports.isFunction = isFunction;
-
- function isArray(obj) {
- return ObjProto.toString.call(obj) === '[object Array]';
- }
-
- exports.isArray = isArray;
-
- function isString(obj) {
- return ObjProto.toString.call(obj) === '[object String]';
- }
-
- exports.isString = isString;
-
- function isObject(obj) {
- return ObjProto.toString.call(obj) === '[object Object]';
- }
-
- exports.isObject = isObject;
- /**
- * @param {string|number} attr
- * @returns {(string|number)[]}
- * @private
- */
-
- function _prepareAttributeParts(attr) {
- if (!attr) {
- return [];
- }
-
- if (typeof attr === 'string') {
- return attr.split('.');
- }
-
- return [attr];
- }
- /**
- * @param {string} attribute Attribute value. Dots allowed.
- * @returns {function(Object): *}
- */
-
-
- function getAttrGetter(attribute) {
- var parts = _prepareAttributeParts(attribute);
-
- return function attrGetter(item) {
- var _item = item;
-
- for (var i = 0; i < parts.length; i++) {
- var part = parts[i]; // If item is not an object, and we still got parts to handle, it means
- // that something goes wrong. Just roll out to undefined in that case.
-
- if (hasOwnProp(_item, part)) {
- _item = _item[part];
- } else {
- return undefined;
- }
- }
-
- return _item;
- };
- }
-
- exports.getAttrGetter = getAttrGetter;
-
- function groupBy(obj, val, throwOnUndefined) {
- var result = {};
- var iterator = isFunction(val) ? val : getAttrGetter(val);
-
- for (var i = 0; i < obj.length; i++) {
- var value = obj[i];
- var key = iterator(value, i);
-
- if (key === undefined && throwOnUndefined === true) {
- throw new TypeError("groupby: attribute \"" + val + "\" resolved to undefined");
- }
-
- (result[key] || (result[key] = [])).push(value);
- }
-
- return result;
- }
-
- exports.groupBy = groupBy;
-
- function toArray(obj) {
- return Array.prototype.slice.call(obj);
- }
-
- exports.toArray = toArray;
-
- function without(array) {
- var result = [];
-
- if (!array) {
- return result;
- }
-
- var length = array.length;
- var contains = toArray(arguments).slice(1);
- var index = -1;
-
- while (++index < length) {
- if (indexOf(contains, array[index]) === -1) {
- result.push(array[index]);
- }
- }
-
- return result;
- }
-
- exports.without = without;
-
- function repeat(char_, n) {
- var str = '';
-
- for (var i = 0; i < n; i++) {
- str += char_;
- }
-
- return str;
- }
-
- exports.repeat = repeat;
-
- function each(obj, func, context) {
- if (obj == null) {
- return;
- }
-
- if (ArrayProto.forEach && obj.forEach === ArrayProto.forEach) {
- obj.forEach(func, context);
- } else if (obj.length === +obj.length) {
- for (var i = 0, l = obj.length; i < l; i++) {
- func.call(context, obj[i], i, obj);
- }
- }
- }
-
- exports.each = each;
-
- function map(obj, func) {
- var results = [];
-
- if (obj == null) {
- return results;
- }
-
- if (ArrayProto.map && obj.map === ArrayProto.map) {
- return obj.map(func);
- }
-
- for (var i = 0; i < obj.length; i++) {
- results[results.length] = func(obj[i], i);
- }
-
- if (obj.length === +obj.length) {
- results.length = obj.length;
- }
-
- return results;
- }
-
- exports.map = map;
-
- function asyncIter(arr, iter, cb) {
- var i = -1;
-
- function next() {
- i++;
-
- if (i < arr.length) {
- iter(arr[i], i, next, cb);
- } else {
- cb();
- }
- }
-
- next();
- }
-
- exports.asyncIter = asyncIter;
-
- function asyncFor(obj, iter, cb) {
- var keys = keys_(obj || {});
- var len = keys.length;
- var i = -1;
-
- function next() {
- i++;
- var k = keys[i];
-
- if (i < len) {
- iter(k, obj[k], i, len, next);
- } else {
- cb();
- }
- }
-
- next();
- }
-
- exports.asyncFor = asyncFor;
-
- function indexOf(arr, searchElement, fromIndex) {
- return Array.prototype.indexOf.call(arr || [], searchElement, fromIndex);
- }
-
- exports.indexOf = indexOf;
-
- function keys_(obj) {
- /* eslint-disable no-restricted-syntax */
- var arr = [];
-
- for (var k in obj) {
- if (hasOwnProp(obj, k)) {
- arr.push(k);
- }
- }
-
- return arr;
- }
-
- exports.keys = keys_;
-
- function _entries(obj) {
- return keys_(obj).map(function (k) {
- return [k, obj[k]];
- });
- }
-
- exports._entries = _entries;
-
- function _values(obj) {
- return keys_(obj).map(function (k) {
- return obj[k];
- });
- }
-
- exports._values = _values;
-
- function extend(obj1, obj2) {
- obj1 = obj1 || {};
- keys_(obj2).forEach(function (k) {
- obj1[k] = obj2[k];
- });
- return obj1;
- }
-
- exports._assign = exports.extend = extend;
-
- function inOperator(key, val) {
- if (isArray(val) || isString(val)) {
- return val.indexOf(key) !== -1;
- } else if (isObject(val)) {
- return key in val;
- }
-
- throw new Error('Cannot use "in" operator to search for "' + key + '" in unexpected types.');
- }
-
- exports.inOperator = inOperator;
-
- /***/ }),
- /* 2 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- var lib = __webpack_require__(1);
-
- var arrayFrom = Array.from;
- var supportsIterators = typeof Symbol === 'function' && Symbol.iterator && typeof arrayFrom === 'function'; // Frames keep track of scoping both at compile-time and run-time so
- // we know how to access variables. Block tags can introduce special
- // variables, for example.
-
- var Frame = /*#__PURE__*/function () {
- function Frame(parent, isolateWrites) {
- this.variables = Object.create(null);
- this.parent = parent;
- this.topLevel = false; // if this is true, writes (set) should never propagate upwards past
- // this frame to its parent (though reads may).
-
- this.isolateWrites = isolateWrites;
- }
-
- var _proto = Frame.prototype;
-
- _proto.set = function set(name, val, resolveUp) {
- // Allow variables with dots by automatically creating the
- // nested structure
- var parts = name.split('.');
- var obj = this.variables;
- var frame = this;
-
- if (resolveUp) {
- if (frame = this.resolve(parts[0], true)) {
- frame.set(name, val);
- return;
- }
- }
-
- for (var i = 0; i < parts.length - 1; i++) {
- var id = parts[i];
-
- if (!obj[id]) {
- obj[id] = {};
- }
-
- obj = obj[id];
- }
-
- obj[parts[parts.length - 1]] = val;
- };
-
- _proto.get = function get(name) {
- var val = this.variables[name];
-
- if (val !== undefined) {
- return val;
- }
-
- return null;
- };
-
- _proto.lookup = function lookup(name) {
- var p = this.parent;
- var val = this.variables[name];
-
- if (val !== undefined) {
- return val;
- }
-
- return p && p.lookup(name);
- };
-
- _proto.resolve = function resolve(name, forWrite) {
- var p = forWrite && this.isolateWrites ? undefined : this.parent;
- var val = this.variables[name];
-
- if (val !== undefined) {
- return this;
- }
-
- return p && p.resolve(name);
- };
-
- _proto.push = function push(isolateWrites) {
- return new Frame(this, isolateWrites);
- };
-
- _proto.pop = function pop() {
- return this.parent;
- };
-
- return Frame;
- }();
-
- function makeMacro(argNames, kwargNames, func) {
- return function macro() {
- for (var _len = arguments.length, macroArgs = new Array(_len), _key = 0; _key < _len; _key++) {
- macroArgs[_key] = arguments[_key];
- }
-
- var argCount = numArgs(macroArgs);
- var args;
- var kwargs = getKeywordArgs(macroArgs);
-
- if (argCount > argNames.length) {
- args = macroArgs.slice(0, argNames.length); // Positional arguments that should be passed in as
- // keyword arguments (essentially default values)
-
- macroArgs.slice(args.length, argCount).forEach(function (val, i) {
- if (i < kwargNames.length) {
- kwargs[kwargNames[i]] = val;
- }
- });
- args.push(kwargs);
- } else if (argCount < argNames.length) {
- args = macroArgs.slice(0, argCount);
-
- for (var i = argCount; i < argNames.length; i++) {
- var arg = argNames[i]; // Keyword arguments that should be passed as
- // positional arguments, i.e. the caller explicitly
- // used the name of a positional arg
-
- args.push(kwargs[arg]);
- delete kwargs[arg];
- }
-
- args.push(kwargs);
- } else {
- args = macroArgs;
- }
-
- return func.apply(this, args);
- };
- }
-
- function makeKeywordArgs(obj) {
- obj.__keywords = true;
- return obj;
- }
-
- function isKeywordArgs(obj) {
- return obj && Object.prototype.hasOwnProperty.call(obj, '__keywords');
- }
-
- function getKeywordArgs(args) {
- var len = args.length;
-
- if (len) {
- var lastArg = args[len - 1];
-
- if (isKeywordArgs(lastArg)) {
- return lastArg;
- }
- }
-
- return {};
- }
-
- function numArgs(args) {
- var len = args.length;
-
- if (len === 0) {
- return 0;
- }
-
- var lastArg = args[len - 1];
-
- if (isKeywordArgs(lastArg)) {
- return len - 1;
- } else {
- return len;
- }
- } // A SafeString object indicates that the string should not be
- // autoescaped. This happens magically because autoescaping only
- // occurs on primitive string objects.
-
-
- function SafeString(val) {
- if (typeof val !== 'string') {
- return val;
- }
-
- this.val = val;
- this.length = val.length;
- }
-
- SafeString.prototype = Object.create(String.prototype, {
- length: {
- writable: true,
- configurable: true,
- value: 0
- }
- });
-
- SafeString.prototype.valueOf = function valueOf() {
- return this.val;
- };
-
- SafeString.prototype.toString = function toString() {
- return this.val;
- };
-
- function copySafeness(dest, target) {
- if (dest instanceof SafeString) {
- return new SafeString(target);
- }
-
- return target.toString();
- }
-
- function markSafe(val) {
- var type = typeof val;
-
- if (type === 'string') {
- return new SafeString(val);
- } else if (type !== 'function') {
- return val;
- } else {
- return function wrapSafe(args) {
- var ret = val.apply(this, arguments);
-
- if (typeof ret === 'string') {
- return new SafeString(ret);
- }
-
- return ret;
- };
- }
- }
-
- function suppressValue(val, autoescape) {
- val = val !== undefined && val !== null ? val : '';
-
- if (autoescape && !(val instanceof SafeString)) {
- val = lib.escape(val.toString());
- }
-
- return val;
- }
-
- function ensureDefined(val, lineno, colno) {
- if (val === null || val === undefined) {
- throw new lib.TemplateError('attempted to output null or undefined value', lineno + 1, colno + 1);
- }
-
- return val;
- }
-
- function memberLookup(obj, val) {
- if (obj === undefined || obj === null) {
- return undefined;
- }
-
- if (typeof obj[val] === 'function') {
- return function () {
- for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
- args[_key2] = arguments[_key2];
- }
-
- return obj[val].apply(obj, args);
- };
- }
-
- return obj[val];
- }
-
- function callWrap(obj, name, context, args) {
- if (!obj) {
- throw new Error('Unable to call `' + name + '`, which is undefined or falsey');
- } else if (typeof obj !== 'function') {
- throw new Error('Unable to call `' + name + '`, which is not a function');
- }
-
- return obj.apply(context, args);
- }
-
- function contextOrFrameLookup(context, frame, name) {
- var val = frame.lookup(name);
- return val !== undefined ? val : context.lookup(name);
- }
-
- function handleError(error, lineno, colno) {
- if (error.lineno) {
- return error;
- } else {
- return new lib.TemplateError(error, lineno, colno);
- }
- }
-
- function asyncEach(arr, dimen, iter, cb) {
- if (lib.isArray(arr)) {
- var len = arr.length;
- lib.asyncIter(arr, function iterCallback(item, i, next) {
- switch (dimen) {
- case 1:
- iter(item, i, len, next);
- break;
-
- case 2:
- iter(item[0], item[1], i, len, next);
- break;
-
- case 3:
- iter(item[0], item[1], item[2], i, len, next);
- break;
-
- default:
- item.push(i, len, next);
- iter.apply(this, item);
- }
- }, cb);
- } else {
- lib.asyncFor(arr, function iterCallback(key, val, i, len, next) {
- iter(key, val, i, len, next);
- }, cb);
- }
- }
-
- function asyncAll(arr, dimen, func, cb) {
- var finished = 0;
- var len;
- var outputArr;
-
- function done(i, output) {
- finished++;
- outputArr[i] = output;
-
- if (finished === len) {
- cb(null, outputArr.join(''));
- }
- }
-
- if (lib.isArray(arr)) {
- len = arr.length;
- outputArr = new Array(len);
-
- if (len === 0) {
- cb(null, '');
- } else {
- for (var i = 0; i < arr.length; i++) {
- var item = arr[i];
-
- switch (dimen) {
- case 1:
- func(item, i, len, done);
- break;
-
- case 2:
- func(item[0], item[1], i, len, done);
- break;
-
- case 3:
- func(item[0], item[1], item[2], i, len, done);
- break;
-
- default:
- item.push(i, len, done);
- func.apply(this, item);
- }
- }
- }
- } else {
- var keys = lib.keys(arr || {});
- len = keys.length;
- outputArr = new Array(len);
-
- if (len === 0) {
- cb(null, '');
- } else {
- for (var _i = 0; _i < keys.length; _i++) {
- var k = keys[_i];
- func(k, arr[k], _i, len, done);
- }
- }
- }
- }
-
- function fromIterator(arr) {
- if (typeof arr !== 'object' || arr === null || lib.isArray(arr)) {
- return arr;
- } else if (supportsIterators && Symbol.iterator in arr) {
- return arrayFrom(arr);
- } else {
- return arr;
- }
- }
-
- module.exports = {
- Frame: Frame,
- makeMacro: makeMacro,
- makeKeywordArgs: makeKeywordArgs,
- numArgs: numArgs,
- suppressValue: suppressValue,
- ensureDefined: ensureDefined,
- memberLookup: memberLookup,
- contextOrFrameLookup: contextOrFrameLookup,
- callWrap: callWrap,
- handleError: handleError,
- isArray: lib.isArray,
- keys: lib.keys,
- SafeString: SafeString,
- copySafeness: copySafeness,
- markSafe: markSafe,
- asyncEach: asyncEach,
- asyncAll: asyncAll,
- inOperator: lib.inOperator,
- fromIterator: fromIterator
- };
-
- /***/ }),
- /* 3 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
- var Loader = __webpack_require__(4);
-
- var PrecompiledLoader = /*#__PURE__*/function (_Loader) {
- _inheritsLoose(PrecompiledLoader, _Loader);
-
- function PrecompiledLoader(compiledTemplates) {
- var _this;
-
- _this = _Loader.call(this) || this;
- _this.precompiled = compiledTemplates || {};
- return _this;
- }
-
- var _proto = PrecompiledLoader.prototype;
-
- _proto.getSource = function getSource(name) {
- if (this.precompiled[name]) {
- return {
- src: {
- type: 'code',
- obj: this.precompiled[name]
- },
- path: name
- };
- }
-
- return null;
- };
-
- return PrecompiledLoader;
- }(Loader);
-
- module.exports = {
- PrecompiledLoader: PrecompiledLoader
- };
-
- /***/ }),
- /* 4 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
- var path = __webpack_require__(0);
-
- var _require = __webpack_require__(5),
- EmitterObj = _require.EmitterObj;
-
- module.exports = /*#__PURE__*/function (_EmitterObj) {
- _inheritsLoose(Loader, _EmitterObj);
-
- function Loader() {
- return _EmitterObj.apply(this, arguments) || this;
- }
-
- var _proto = Loader.prototype;
-
- _proto.resolve = function resolve(from, to) {
- return path.resolve(path.dirname(from), to);
- };
-
- _proto.isRelative = function isRelative(filename) {
- return filename.indexOf('./') === 0 || filename.indexOf('../') === 0;
- };
-
- return Loader;
- }(EmitterObj);
-
- /***/ }),
- /* 5 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
- // A simple class system, more documentation to come
-
- function _defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } }
-
- function _createClass(Constructor, protoProps, staticProps) { if (protoProps) _defineProperties(Constructor.prototype, protoProps); if (staticProps) _defineProperties(Constructor, staticProps); return Constructor; }
-
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
- var EventEmitter = __webpack_require__(13);
-
- var lib = __webpack_require__(1);
-
- function parentWrap(parent, prop) {
- if (typeof parent !== 'function' || typeof prop !== 'function') {
- return prop;
- }
-
- return function wrap() {
- // Save the current parent method
- var tmp = this.parent; // Set parent to the previous method, call, and restore
-
- this.parent = parent;
- var res = prop.apply(this, arguments);
- this.parent = tmp;
- return res;
- };
- }
-
- function extendClass(cls, name, props) {
- props = props || {};
- lib.keys(props).forEach(function (k) {
- props[k] = parentWrap(cls.prototype[k], props[k]);
- });
-
- var subclass = /*#__PURE__*/function (_cls) {
- _inheritsLoose(subclass, _cls);
-
- function subclass() {
- return _cls.apply(this, arguments) || this;
- }
-
- _createClass(subclass, [{
- key: "typename",
- get: function get() {
- return name;
- }
- }]);
-
- return subclass;
- }(cls);
-
- lib._assign(subclass.prototype, props);
-
- return subclass;
- }
-
- var Obj = /*#__PURE__*/function () {
- function Obj() {
- // Unfortunately necessary for backwards compatibility
- this.init.apply(this, arguments);
- }
-
- var _proto = Obj.prototype;
-
- _proto.init = function init() {};
-
- Obj.extend = function extend(name, props) {
- if (typeof name === 'object') {
- props = name;
- name = 'anonymous';
- }
-
- return extendClass(this, name, props);
- };
-
- _createClass(Obj, [{
- key: "typename",
- get: function get() {
- return this.constructor.name;
- }
- }]);
-
- return Obj;
- }();
-
- var EmitterObj = /*#__PURE__*/function (_EventEmitter) {
- _inheritsLoose(EmitterObj, _EventEmitter);
-
- function EmitterObj() {
- var _this2;
-
- var _this;
-
- _this = _EventEmitter.call(this) || this; // Unfortunately necessary for backwards compatibility
-
- (_this2 = _this).init.apply(_this2, arguments);
-
- return _this;
- }
-
- var _proto2 = EmitterObj.prototype;
-
- _proto2.init = function init() {};
-
- EmitterObj.extend = function extend(name, props) {
- if (typeof name === 'object') {
- props = name;
- name = 'anonymous';
- }
-
- return extendClass(this, name, props);
- };
-
- _createClass(EmitterObj, [{
- key: "typename",
- get: function get() {
- return this.constructor.name;
- }
- }]);
-
- return EmitterObj;
- }(EventEmitter);
-
- module.exports = {
- Obj: Obj,
- EmitterObj: EmitterObj
- };
-
- /***/ }),
- /* 6 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- var lib = __webpack_require__(1);
-
- var _require = __webpack_require__(7),
- Environment = _require.Environment,
- Template = _require.Template;
-
- var Loader = __webpack_require__(4);
-
- var loaders = __webpack_require__(3);
-
- var precompile = __webpack_require__(0);
-
- var compiler = __webpack_require__(0);
-
- var parser = __webpack_require__(0);
-
- var lexer = __webpack_require__(0);
-
- var runtime = __webpack_require__(2);
-
- var nodes = __webpack_require__(0);
-
- var installJinjaCompat = __webpack_require__(17); // A single instance of an environment, since this is so commonly used
-
-
- var e;
-
- function configure(templatesPath, opts) {
- opts = opts || {};
-
- if (lib.isObject(templatesPath)) {
- opts = templatesPath;
- templatesPath = null;
- }
-
- var TemplateLoader;
-
- if (loaders.FileSystemLoader) {
- TemplateLoader = new loaders.FileSystemLoader(templatesPath, {
- watch: opts.watch,
- noCache: opts.noCache
- });
- } else if (loaders.WebLoader) {
- TemplateLoader = new loaders.WebLoader(templatesPath, {
- useCache: opts.web && opts.web.useCache,
- async: opts.web && opts.web.async
- });
- }
-
- e = new Environment(TemplateLoader, opts);
-
- if (opts && opts.express) {
- e.express(opts.express);
- }
-
- return e;
- }
-
- module.exports = {
- Environment: Environment,
- Template: Template,
- Loader: Loader,
- FileSystemLoader: loaders.FileSystemLoader,
- NodeResolveLoader: loaders.NodeResolveLoader,
- PrecompiledLoader: loaders.PrecompiledLoader,
- WebLoader: loaders.WebLoader,
- compiler: compiler,
- parser: parser,
- lexer: lexer,
- runtime: runtime,
- lib: lib,
- nodes: nodes,
- installJinjaCompat: installJinjaCompat,
- configure: configure,
- reset: function reset() {
- e = undefined;
- },
- compile: function compile(src, env, path, eagerCompile) {
- if (!e) {
- configure();
- }
-
- return new Template(src, env, path, eagerCompile);
- },
- render: function render(name, ctx, cb) {
- if (!e) {
- configure();
- }
-
- return e.render(name, ctx, cb);
- },
- renderString: function renderString(src, ctx, cb) {
- if (!e) {
- configure();
- }
-
- return e.renderString(src, ctx, cb);
- },
- precompile: precompile ? precompile.precompile : undefined,
- precompileString: precompile ? precompile.precompileString : undefined
- };
-
- /***/ }),
- /* 7 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
-
- function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
-
- var asap = __webpack_require__(8);
-
- var _waterfall = __webpack_require__(11);
-
- var lib = __webpack_require__(1);
-
- var compiler = __webpack_require__(0);
-
- var filters = __webpack_require__(12);
-
- var _require = __webpack_require__(3),
- FileSystemLoader = _require.FileSystemLoader,
- WebLoader = _require.WebLoader,
- PrecompiledLoader = _require.PrecompiledLoader;
-
- var tests = __webpack_require__(14);
-
- var globals = __webpack_require__(15);
-
- var _require2 = __webpack_require__(5),
- Obj = _require2.Obj,
- EmitterObj = _require2.EmitterObj;
-
- var globalRuntime = __webpack_require__(2);
-
- var handleError = globalRuntime.handleError,
- Frame = globalRuntime.Frame;
-
- var expressApp = __webpack_require__(16); // If the user is using the async API, *always* call it
- // asynchronously even if the template was synchronous.
-
-
- function callbackAsap(cb, err, res) {
- asap(function () {
- cb(err, res);
- });
- }
- /**
- * A no-op template, for use with {% include ignore missing %}
- */
-
-
- var noopTmplSrc = {
- type: 'code',
- obj: {
- root: function root(env, context, frame, runtime, cb) {
- try {
- cb(null, '');
- } catch (e) {
- cb(handleError(e, null, null));
- }
- }
- }
- };
-
- var Environment = /*#__PURE__*/function (_EmitterObj) {
- _inheritsLoose(Environment, _EmitterObj);
-
- function Environment() {
- return _EmitterObj.apply(this, arguments) || this;
- }
-
- var _proto = Environment.prototype;
-
- _proto.init = function init(loaders, opts) {
- var _this = this;
-
- // The dev flag determines the trace that'll be shown on errors.
- // If set to true, returns the full trace from the error point,
- // otherwise will return trace starting from Template.render
- // (the full trace from within nunjucks may confuse developers using
- // the library)
- // defaults to false
- opts = this.opts = opts || {};
- this.opts.dev = !!opts.dev; // The autoescape flag sets global autoescaping. If true,
- // every string variable will be escaped by default.
- // If false, strings can be manually escaped using the `escape` filter.
- // defaults to true
-
- this.opts.autoescape = opts.autoescape != null ? opts.autoescape : true; // If true, this will make the system throw errors if trying
- // to output a null or undefined value
-
- this.opts.throwOnUndefined = !!opts.throwOnUndefined;
- this.opts.trimBlocks = !!opts.trimBlocks;
- this.opts.lstripBlocks = !!opts.lstripBlocks;
- this.loaders = [];
-
- if (!loaders) {
- // The filesystem loader is only available server-side
- if (FileSystemLoader) {
- this.loaders = [new FileSystemLoader('views')];
- } else if (WebLoader) {
- this.loaders = [new WebLoader('/views')];
- }
- } else {
- this.loaders = lib.isArray(loaders) ? loaders : [loaders];
- } // It's easy to use precompiled templates: just include them
- // before you configure nunjucks and this will automatically
- // pick it up and use it
-
-
- if (typeof window !== 'undefined' && window.nunjucksPrecompiled) {
- this.loaders.unshift(new PrecompiledLoader(window.nunjucksPrecompiled));
- }
-
- this._initLoaders();
-
- this.globals = globals();
- this.filters = {};
- this.tests = {};
- this.asyncFilters = [];
- this.extensions = {};
- this.extensionsList = [];
-
- lib._entries(filters).forEach(function (_ref) {
- var name = _ref[0],
- filter = _ref[1];
- return _this.addFilter(name, filter);
- });
-
- lib._entries(tests).forEach(function (_ref2) {
- var name = _ref2[0],
- test = _ref2[1];
- return _this.addTest(name, test);
- });
- };
-
- _proto._initLoaders = function _initLoaders() {
- var _this2 = this;
-
- this.loaders.forEach(function (loader) {
- // Caching and cache busting
- loader.cache = {};
-
- if (typeof loader.on === 'function') {
- loader.on('update', function (name, fullname) {
- loader.cache[name] = null;
-
- _this2.emit('update', name, fullname, loader);
- });
- loader.on('load', function (name, source) {
- _this2.emit('load', name, source, loader);
- });
- }
- });
- };
-
- _proto.invalidateCache = function invalidateCache() {
- this.loaders.forEach(function (loader) {
- loader.cache = {};
- });
- };
-
- _proto.addExtension = function addExtension(name, extension) {
- extension.__name = name;
- this.extensions[name] = extension;
- this.extensionsList.push(extension);
- return this;
- };
-
- _proto.removeExtension = function removeExtension(name) {
- var extension = this.getExtension(name);
-
- if (!extension) {
- return;
- }
-
- this.extensionsList = lib.without(this.extensionsList, extension);
- delete this.extensions[name];
- };
-
- _proto.getExtension = function getExtension(name) {
- return this.extensions[name];
- };
-
- _proto.hasExtension = function hasExtension(name) {
- return !!this.extensions[name];
- };
-
- _proto.addGlobal = function addGlobal(name, value) {
- this.globals[name] = value;
- return this;
- };
-
- _proto.getGlobal = function getGlobal(name) {
- if (typeof this.globals[name] === 'undefined') {
- throw new Error('global not found: ' + name);
- }
-
- return this.globals[name];
- };
-
- _proto.addFilter = function addFilter(name, func, async) {
- var wrapped = func;
-
- if (async) {
- this.asyncFilters.push(name);
- }
-
- this.filters[name] = wrapped;
- return this;
- };
-
- _proto.getFilter = function getFilter(name) {
- if (!this.filters[name]) {
- throw new Error('filter not found: ' + name);
- }
-
- return this.filters[name];
- };
-
- _proto.addTest = function addTest(name, func) {
- this.tests[name] = func;
- return this;
- };
-
- _proto.getTest = function getTest(name) {
- if (!this.tests[name]) {
- throw new Error('test not found: ' + name);
- }
-
- return this.tests[name];
- };
-
- _proto.resolveTemplate = function resolveTemplate(loader, parentName, filename) {
- var isRelative = loader.isRelative && parentName ? loader.isRelative(filename) : false;
- return isRelative && loader.resolve ? loader.resolve(parentName, filename) : filename;
- };
-
- _proto.getTemplate = function getTemplate(name, eagerCompile, parentName, ignoreMissing, cb) {
- var _this3 = this;
-
- var that = this;
- var tmpl = null;
-
- if (name && name.raw) {
- // this fixes autoescape for templates referenced in symbols
- name = name.raw;
- }
-
- if (lib.isFunction(parentName)) {
- cb = parentName;
- parentName = null;
- eagerCompile = eagerCompile || false;
- }
-
- if (lib.isFunction(eagerCompile)) {
- cb = eagerCompile;
- eagerCompile = false;
- }
-
- if (name instanceof Template) {
- tmpl = name;
- } else if (typeof name !== 'string') {
- throw new Error('template names must be a string: ' + name);
- } else {
- for (var i = 0; i < this.loaders.length; i++) {
- var loader = this.loaders[i];
- tmpl = loader.cache[this.resolveTemplate(loader, parentName, name)];
-
- if (tmpl) {
- break;
- }
- }
- }
-
- if (tmpl) {
- if (eagerCompile) {
- tmpl.compile();
- }
-
- if (cb) {
- cb(null, tmpl);
- return undefined;
- } else {
- return tmpl;
- }
- }
-
- var syncResult;
-
- var createTemplate = function createTemplate(err, info) {
- if (!info && !err && !ignoreMissing) {
- err = new Error('template not found: ' + name);
- }
-
- if (err) {
- if (cb) {
- cb(err);
- return;
- } else {
- throw err;
- }
- }
-
- var newTmpl;
-
- if (!info) {
- newTmpl = new Template(noopTmplSrc, _this3, '', eagerCompile);
- } else {
- newTmpl = new Template(info.src, _this3, info.path, eagerCompile);
-
- if (!info.noCache) {
- info.loader.cache[name] = newTmpl;
- }
- }
-
- if (cb) {
- cb(null, newTmpl);
- } else {
- syncResult = newTmpl;
- }
- };
-
- lib.asyncIter(this.loaders, function (loader, i, next, done) {
- function handle(err, src) {
- if (err) {
- done(err);
- } else if (src) {
- src.loader = loader;
- done(null, src);
- } else {
- next();
- }
- } // Resolve name relative to parentName
-
-
- name = that.resolveTemplate(loader, parentName, name);
-
- if (loader.async) {
- loader.getSource(name, handle);
- } else {
- handle(null, loader.getSource(name));
- }
- }, createTemplate);
- return syncResult;
- };
-
- _proto.express = function express(app) {
- return expressApp(this, app);
- };
-
- _proto.render = function render(name, ctx, cb) {
- if (lib.isFunction(ctx)) {
- cb = ctx;
- ctx = null;
- } // We support a synchronous API to make it easier to migrate
- // existing code to async. This works because if you don't do
- // anything async work, the whole thing is actually run
- // synchronously.
-
-
- var syncResult = null;
- this.getTemplate(name, function (err, tmpl) {
- if (err && cb) {
- callbackAsap(cb, err);
- } else if (err) {
- throw err;
- } else {
- syncResult = tmpl.render(ctx, cb);
- }
- });
- return syncResult;
- };
-
- _proto.renderString = function renderString(src, ctx, opts, cb) {
- if (lib.isFunction(opts)) {
- cb = opts;
- opts = {};
- }
-
- opts = opts || {};
- var tmpl = new Template(src, this, opts.path);
- return tmpl.render(ctx, cb);
- };
-
- _proto.waterfall = function waterfall(tasks, callback, forceAsync) {
- return _waterfall(tasks, callback, forceAsync);
- };
-
- return Environment;
- }(EmitterObj);
-
- var Context = /*#__PURE__*/function (_Obj) {
- _inheritsLoose(Context, _Obj);
-
- function Context() {
- return _Obj.apply(this, arguments) || this;
- }
-
- var _proto2 = Context.prototype;
-
- _proto2.init = function init(ctx, blocks, env) {
- var _this4 = this;
-
- // Has to be tied to an environment so we can tap into its globals.
- this.env = env || new Environment(); // Make a duplicate of ctx
-
- this.ctx = lib.extend({}, ctx);
- this.blocks = {};
- this.exported = [];
- lib.keys(blocks).forEach(function (name) {
- _this4.addBlock(name, blocks[name]);
- });
- };
-
- _proto2.lookup = function lookup(name) {
- // This is one of the most called functions, so optimize for
- // the typical case where the name isn't in the globals
- if (name in this.env.globals && !(name in this.ctx)) {
- return this.env.globals[name];
- } else {
- return this.ctx[name];
- }
- };
-
- _proto2.setVariable = function setVariable(name, val) {
- this.ctx[name] = val;
- };
-
- _proto2.getVariables = function getVariables() {
- return this.ctx;
- };
-
- _proto2.addBlock = function addBlock(name, block) {
- this.blocks[name] = this.blocks[name] || [];
- this.blocks[name].push(block);
- return this;
- };
-
- _proto2.getBlock = function getBlock(name) {
- if (!this.blocks[name]) {
- throw new Error('unknown block "' + name + '"');
- }
-
- return this.blocks[name][0];
- };
-
- _proto2.getSuper = function getSuper(env, name, block, frame, runtime, cb) {
- var idx = lib.indexOf(this.blocks[name] || [], block);
- var blk = this.blocks[name][idx + 1];
- var context = this;
-
- if (idx === -1 || !blk) {
- throw new Error('no super block available for "' + name + '"');
- }
-
- blk(env, context, frame, runtime, cb);
- };
-
- _proto2.addExport = function addExport(name) {
- this.exported.push(name);
- };
-
- _proto2.getExported = function getExported() {
- var _this5 = this;
-
- var exported = {};
- this.exported.forEach(function (name) {
- exported[name] = _this5.ctx[name];
- });
- return exported;
- };
-
- return Context;
- }(Obj);
-
- var Template = /*#__PURE__*/function (_Obj2) {
- _inheritsLoose(Template, _Obj2);
-
- function Template() {
- return _Obj2.apply(this, arguments) || this;
- }
-
- var _proto3 = Template.prototype;
-
- _proto3.init = function init(src, env, path, eagerCompile) {
- this.env = env || new Environment();
-
- if (lib.isObject(src)) {
- switch (src.type) {
- case 'code':
- this.tmplProps = src.obj;
- break;
-
- case 'string':
- this.tmplStr = src.obj;
- break;
-
- default:
- throw new Error("Unexpected template object type " + src.type + "; expected 'code', or 'string'");
- }
- } else if (lib.isString(src)) {
- this.tmplStr = src;
- } else {
- throw new Error('src must be a string or an object describing the source');
- }
-
- this.path = path;
-
- if (eagerCompile) {
- try {
- this._compile();
- } catch (err) {
- throw lib._prettifyError(this.path, this.env.opts.dev, err);
- }
- } else {
- this.compiled = false;
- }
- };
-
- _proto3.render = function render(ctx, parentFrame, cb) {
- var _this6 = this;
-
- if (typeof ctx === 'function') {
- cb = ctx;
- ctx = {};
- } else if (typeof parentFrame === 'function') {
- cb = parentFrame;
- parentFrame = null;
- } // If there is a parent frame, we are being called from internal
- // code of another template, and the internal system
- // depends on the sync/async nature of the parent template
- // to be inherited, so force an async callback
-
-
- var forceAsync = !parentFrame; // Catch compile errors for async rendering
-
- try {
- this.compile();
- } catch (e) {
- var err = lib._prettifyError(this.path, this.env.opts.dev, e);
-
- if (cb) {
- return callbackAsap(cb, err);
- } else {
- throw err;
- }
- }
-
- var context = new Context(ctx || {}, this.blocks, this.env);
- var frame = parentFrame ? parentFrame.push(true) : new Frame();
- frame.topLevel = true;
- var syncResult = null;
- var didError = false;
- this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err, res) {
- // TODO: this is actually a bug in the compiled template (because waterfall
- // tasks are both not passing errors up the chain of callbacks AND are not
- // causing a return from the top-most render function). But fixing that
- // will require a more substantial change to the compiler.
- if (didError && cb && typeof res !== 'undefined') {
- // prevent multiple calls to cb
- return;
- }
-
- if (err) {
- err = lib._prettifyError(_this6.path, _this6.env.opts.dev, err);
- didError = true;
- }
-
- if (cb) {
- if (forceAsync) {
- callbackAsap(cb, err, res);
- } else {
- cb(err, res);
- }
- } else {
- if (err) {
- throw err;
- }
-
- syncResult = res;
- }
- });
- return syncResult;
- };
-
- _proto3.getExported = function getExported(ctx, parentFrame, cb) {
- // eslint-disable-line consistent-return
- if (typeof ctx === 'function') {
- cb = ctx;
- ctx = {};
- }
-
- if (typeof parentFrame === 'function') {
- cb = parentFrame;
- parentFrame = null;
- } // Catch compile errors for async rendering
-
-
- try {
- this.compile();
- } catch (e) {
- if (cb) {
- return cb(e);
- } else {
- throw e;
- }
- }
-
- var frame = parentFrame ? parentFrame.push() : new Frame();
- frame.topLevel = true; // Run the rootRenderFunc to populate the context with exported vars
-
- var context = new Context(ctx || {}, this.blocks, this.env);
- this.rootRenderFunc(this.env, context, frame, globalRuntime, function (err) {
- if (err) {
- cb(err, null);
- } else {
- cb(null, context.getExported());
- }
- });
- };
-
- _proto3.compile = function compile() {
- if (!this.compiled) {
- this._compile();
- }
- };
-
- _proto3._compile = function _compile() {
- var props;
-
- if (this.tmplProps) {
- props = this.tmplProps;
- } else {
- var source = compiler.compile(this.tmplStr, this.env.asyncFilters, this.env.extensionsList, this.path, this.env.opts);
- var func = new Function(source); // eslint-disable-line no-new-func
-
- props = func();
- }
-
- this.blocks = this._getBlocks(props);
- this.rootRenderFunc = props.root;
- this.compiled = true;
- };
-
- _proto3._getBlocks = function _getBlocks(props) {
- var blocks = {};
- lib.keys(props).forEach(function (k) {
- if (k.slice(0, 2) === 'b_') {
- blocks[k.slice(2)] = props[k];
- }
- });
- return blocks;
- };
-
- return Template;
- }(Obj);
-
- module.exports = {
- Environment: Environment,
- Template: Template
- };
-
- /***/ }),
- /* 8 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- // rawAsap provides everything we need except exception management.
- var rawAsap = __webpack_require__(9);
- // RawTasks are recycled to reduce GC churn.
- var freeTasks = [];
- // We queue errors to ensure they are thrown in right order (FIFO).
- // Array-as-queue is good enough here, since we are just dealing with exceptions.
- var pendingErrors = [];
- var requestErrorThrow = rawAsap.makeRequestCallFromTimer(throwFirstError);
-
- function throwFirstError() {
- if (pendingErrors.length) {
- throw pendingErrors.shift();
- }
- }
-
- /**
- * Calls a task as soon as possible after returning, in its own event, with priority
- * over other events like animation, reflow, and repaint. An error thrown from an
- * event will not interrupt, nor even substantially slow down the processing of
- * other events, but will be rather postponed to a lower priority event.
- * @param {{call}} task A callable object, typically a function that takes no
- * arguments.
- */
- module.exports = asap;
- function asap(task) {
- var rawTask;
- if (freeTasks.length) {
- rawTask = freeTasks.pop();
- } else {
- rawTask = new RawTask();
- }
- rawTask.task = task;
- rawAsap(rawTask);
- }
-
- // We wrap tasks with recyclable task objects. A task object implements
- // `call`, just like a function.
- function RawTask() {
- this.task = null;
- }
-
- // The sole purpose of wrapping the task is to catch the exception and recycle
- // the task object after its single use.
- RawTask.prototype.call = function () {
- try {
- this.task.call();
- } catch (error) {
- if (asap.onerror) {
- // This hook exists purely for testing purposes.
- // Its name will be periodically randomized to break any code that
- // depends on its existence.
- asap.onerror(error);
- } else {
- // In a web browser, exceptions are not fatal. However, to avoid
- // slowing down the queue of pending tasks, we rethrow the error in a
- // lower priority turn.
- pendingErrors.push(error);
- requestErrorThrow();
- }
- } finally {
- this.task = null;
- freeTasks[freeTasks.length] = this;
- }
- };
-
-
- /***/ }),
- /* 9 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
- /* WEBPACK VAR INJECTION */(function(global) {
-
- // Use the fastest means possible to execute a task in its own turn, with
- // priority over other events including IO, animation, reflow, and redraw
- // events in browsers.
- //
- // An exception thrown by a task will permanently interrupt the processing of
- // subsequent tasks. The higher level `asap` function ensures that if an
- // exception is thrown by a task, that the task queue will continue flushing as
- // soon as possible, but if you use `rawAsap` directly, you are responsible to
- // either ensure that no exceptions are thrown from your task, or to manually
- // call `rawAsap.requestFlush` if an exception is thrown.
- module.exports = rawAsap;
- function rawAsap(task) {
- if (!queue.length) {
- requestFlush();
- flushing = true;
- }
- // Equivalent to push, but avoids a function call.
- queue[queue.length] = task;
- }
-
- var queue = [];
- // Once a flush has been requested, no further calls to `requestFlush` are
- // necessary until the next `flush` completes.
- var flushing = false;
- // `requestFlush` is an implementation-specific method that attempts to kick
- // off a `flush` event as quickly as possible. `flush` will attempt to exhaust
- // the event queue before yielding to the browser's own event loop.
- var requestFlush;
- // The position of the next task to execute in the task queue. This is
- // preserved between calls to `flush` so that it can be resumed if
- // a task throws an exception.
- var index = 0;
- // If a task schedules additional tasks recursively, the task queue can grow
- // unbounded. To prevent memory exhaustion, the task queue will periodically
- // truncate already-completed tasks.
- var capacity = 1024;
-
- // The flush function processes all tasks that have been scheduled with
- // `rawAsap` unless and until one of those tasks throws an exception.
- // If a task throws an exception, `flush` ensures that its state will remain
- // consistent and will resume where it left off when called again.
- // However, `flush` does not make any arrangements to be called again if an
- // exception is thrown.
- function flush() {
- while (index < queue.length) {
- var currentIndex = index;
- // Advance the index before calling the task. This ensures that we will
- // begin flushing on the next task the task throws an error.
- index = index + 1;
- queue[currentIndex].call();
- // Prevent leaking memory for long chains of recursive calls to `asap`.
- // If we call `asap` within tasks scheduled by `asap`, the queue will
- // grow, but to avoid an O(n) walk for every task we execute, we don't
- // shift tasks off the queue after they have been executed.
- // Instead, we periodically shift 1024 tasks off the queue.
- if (index > capacity) {
- // Manually shift all values starting at the index back to the
- // beginning of the queue.
- for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
- queue[scan] = queue[scan + index];
- }
- queue.length -= index;
- index = 0;
- }
- }
- queue.length = 0;
- index = 0;
- flushing = false;
- }
-
- // `requestFlush` is implemented using a strategy based on data collected from
- // every available SauceLabs Selenium web driver worker at time of writing.
- // https://docs.google.com/spreadsheets/d/1mG-5UYGup5qxGdEMWkhP6BWCz053NUb2E1QoUTU16uA/edit#gid=783724593
-
- // Safari 6 and 6.1 for desktop, iPad, and iPhone are the only browsers that
- // have WebKitMutationObserver but not un-prefixed MutationObserver.
- // Must use `global` or `self` instead of `window` to work in both frames and web
- // workers. `global` is a provision of Browserify, Mr, Mrs, or Mop.
-
- /* globals self */
- var scope = typeof global !== "undefined" ? global : self;
- var BrowserMutationObserver = scope.MutationObserver || scope.WebKitMutationObserver;
-
- // MutationObservers are desirable because they have high priority and work
- // reliably everywhere they are implemented.
- // They are implemented in all modern browsers.
- //
- // - Android 4-4.3
- // - Chrome 26-34
- // - Firefox 14-29
- // - Internet Explorer 11
- // - iPad Safari 6-7.1
- // - iPhone Safari 7-7.1
- // - Safari 6-7
- if (typeof BrowserMutationObserver === "function") {
- requestFlush = makeRequestCallFromMutationObserver(flush);
-
- // MessageChannels are desirable because they give direct access to the HTML
- // task queue, are implemented in Internet Explorer 10, Safari 5.0-1, and Opera
- // 11-12, and in web workers in many engines.
- // Although message channels yield to any queued rendering and IO tasks, they
- // would be better than imposing the 4ms delay of timers.
- // However, they do not work reliably in Internet Explorer or Safari.
-
- // Internet Explorer 10 is the only browser that has setImmediate but does
- // not have MutationObservers.
- // Although setImmediate yields to the browser's renderer, it would be
- // preferrable to falling back to setTimeout since it does not have
- // the minimum 4ms penalty.
- // Unfortunately there appears to be a bug in Internet Explorer 10 Mobile (and
- // Desktop to a lesser extent) that renders both setImmediate and
- // MessageChannel useless for the purposes of ASAP.
- // https://github.com/kriskowal/q/issues/396
-
- // Timers are implemented universally.
- // We fall back to timers in workers in most engines, and in foreground
- // contexts in the following browsers.
- // However, note that even this simple case requires nuances to operate in a
- // broad spectrum of browsers.
- //
- // - Firefox 3-13
- // - Internet Explorer 6-9
- // - iPad Safari 4.3
- // - Lynx 2.8.7
- } else {
- requestFlush = makeRequestCallFromTimer(flush);
- }
-
- // `requestFlush` requests that the high priority event queue be flushed as
- // soon as possible.
- // This is useful to prevent an error thrown in a task from stalling the event
- // queue if the exception handled by Node.js’s
- // `process.on("uncaughtException")` or by a domain.
- rawAsap.requestFlush = requestFlush;
-
- // To request a high priority event, we induce a mutation observer by toggling
- // the text of a text node between "1" and "-1".
- function makeRequestCallFromMutationObserver(callback) {
- var toggle = 1;
- var observer = new BrowserMutationObserver(callback);
- var node = document.createTextNode("");
- observer.observe(node, {characterData: true});
- return function requestCall() {
- toggle = -toggle;
- node.data = toggle;
- };
- }
-
- // The message channel technique was discovered by Malte Ubl and was the
- // original foundation for this library.
- // http://www.nonblocking.io/2011/06/windownexttick.html
-
- // Safari 6.0.5 (at least) intermittently fails to create message ports on a
- // page's first load. Thankfully, this version of Safari supports
- // MutationObservers, so we don't need to fall back in that case.
-
- // function makeRequestCallFromMessageChannel(callback) {
- // var channel = new MessageChannel();
- // channel.port1.onmessage = callback;
- // return function requestCall() {
- // channel.port2.postMessage(0);
- // };
- // }
-
- // For reasons explained above, we are also unable to use `setImmediate`
- // under any circumstances.
- // Even if we were, there is another bug in Internet Explorer 10.
- // It is not sufficient to assign `setImmediate` to `requestFlush` because
- // `setImmediate` must be called *by name* and therefore must be wrapped in a
- // closure.
- // Never forget.
-
- // function makeRequestCallFromSetImmediate(callback) {
- // return function requestCall() {
- // setImmediate(callback);
- // };
- // }
-
- // Safari 6.0 has a problem where timers will get lost while the user is
- // scrolling. This problem does not impact ASAP because Safari 6.0 supports
- // mutation observers, so that implementation is used instead.
- // However, if we ever elect to use timers in Safari, the prevalent work-around
- // is to add a scroll event listener that calls for a flush.
-
- // `setTimeout` does not call the passed callback if the delay is less than
- // approximately 7 in web workers in Firefox 8 through 18, and sometimes not
- // even then.
-
- function makeRequestCallFromTimer(callback) {
- return function requestCall() {
- // We dispatch a timeout with a specified delay of 0 for engines that
- // can reliably accommodate that request. This will usually be snapped
- // to a 4 milisecond delay, but once we're flushing, there's no delay
- // between events.
- var timeoutHandle = setTimeout(handleTimer, 0);
- // However, since this timer gets frequently dropped in Firefox
- // workers, we enlist an interval handle that will try to fire
- // an event 20 times per second until it succeeds.
- var intervalHandle = setInterval(handleTimer, 50);
-
- function handleTimer() {
- // Whichever timer succeeds will cancel both timers and
- // execute the callback.
- clearTimeout(timeoutHandle);
- clearInterval(intervalHandle);
- callback();
- }
- };
- }
-
- // This is for `asap.js` only.
- // Its name will be periodically randomized to break any code that depends on
- // its existence.
- rawAsap.makeRequestCallFromTimer = makeRequestCallFromTimer;
-
- // ASAP was originally a nextTick shim included in Q. This was factored out
- // into this ASAP package. It was later adapted to RSVP which made further
- // amendments. These decisions, particularly to marginalize MessageChannel and
- // to capture the MutationObserver implementation in a closure, were integrated
- // back into ASAP proper.
- // https://github.com/tildeio/rsvp.js/blob/cddf7232546a9cf858524b75cde6f9edf72620a7/lib/rsvp/asap.js
-
- /* WEBPACK VAR INJECTION */}.call(exports, __webpack_require__(10)))
-
- /***/ }),
- /* 10 */
- /***/ (function(module, exports) {
-
- var g;
-
- // This works in non-strict mode
- g = (function() {
- return this;
- })();
-
- try {
- // This works if eval is allowed (see CSP)
- g = g || Function("return this")() || (1,eval)("this");
- } catch(e) {
- // This works if the window reference is available
- if(typeof window === "object")
- g = window;
- }
-
- // g can still be undefined, but nothing to do about it...
- // We return undefined, instead of nothing here, so it's
- // easier to handle this case. if(!global) { ...}
-
- module.exports = g;
-
-
- /***/ }),
- /* 11 */
- /***/ (function(module, exports, __webpack_require__) {
-
- var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;// MIT license (by Elan Shanker).
- (function(globals) {
- 'use strict';
-
- var executeSync = function(){
- var args = Array.prototype.slice.call(arguments);
- if (typeof args[0] === 'function'){
- args[0].apply(null, args.splice(1));
- }
- };
-
- var executeAsync = function(fn){
- if (typeof setImmediate === 'function') {
- setImmediate(fn);
- } else if (typeof process !== 'undefined' && process.nextTick) {
- process.nextTick(fn);
- } else {
- setTimeout(fn, 0);
- }
- };
-
- var makeIterator = function (tasks) {
- var makeCallback = function (index) {
- var fn = function () {
- if (tasks.length) {
- tasks[index].apply(null, arguments);
- }
- return fn.next();
- };
- fn.next = function () {
- return (index < tasks.length - 1) ? makeCallback(index + 1): null;
- };
- return fn;
- };
- return makeCallback(0);
- };
-
- var _isArray = Array.isArray || function(maybeArray){
- return Object.prototype.toString.call(maybeArray) === '[object Array]';
- };
-
- var waterfall = function (tasks, callback, forceAsync) {
- var nextTick = forceAsync ? executeAsync : executeSync;
- callback = callback || function () {};
- if (!_isArray(tasks)) {
- var err = new Error('First argument to waterfall must be an array of functions');
- return callback(err);
- }
- if (!tasks.length) {
- return callback();
- }
- var wrapIterator = function (iterator) {
- return function (err) {
- if (err) {
- callback.apply(null, arguments);
- callback = function () {};
- } else {
- var args = Array.prototype.slice.call(arguments, 1);
- var next = iterator.next();
- if (next) {
- args.push(wrapIterator(next));
- } else {
- args.push(callback);
- }
- nextTick(function () {
- iterator.apply(null, args);
- });
- }
- };
- };
- wrapIterator(makeIterator(tasks))();
- };
-
- if (true) {
- !(__WEBPACK_AMD_DEFINE_ARRAY__ = [], __WEBPACK_AMD_DEFINE_RESULT__ = (function () {
- return waterfall;
- }).apply(exports, __WEBPACK_AMD_DEFINE_ARRAY__),
- __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)); // RequireJS
- } else if (typeof module !== 'undefined' && module.exports) {
- module.exports = waterfall; // CommonJS
- } else {
- globals.waterfall = waterfall; // <script>
- }
- })(this);
-
-
- /***/ }),
- /* 12 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- var lib = __webpack_require__(1);
-
- var r = __webpack_require__(2);
-
- var exports = module.exports = {};
-
- function normalize(value, defaultValue) {
- if (value === null || value === undefined || value === false) {
- return defaultValue;
- }
-
- return value;
- }
-
- exports.abs = Math.abs;
-
- function isNaN(num) {
- return num !== num; // eslint-disable-line no-self-compare
- }
-
- function batch(arr, linecount, fillWith) {
- var i;
- var res = [];
- var tmp = [];
-
- for (i = 0; i < arr.length; i++) {
- if (i % linecount === 0 && tmp.length) {
- res.push(tmp);
- tmp = [];
- }
-
- tmp.push(arr[i]);
- }
-
- if (tmp.length) {
- if (fillWith) {
- for (i = tmp.length; i < linecount; i++) {
- tmp.push(fillWith);
- }
- }
-
- res.push(tmp);
- }
-
- return res;
- }
-
- exports.batch = batch;
-
- function capitalize(str) {
- str = normalize(str, '');
- var ret = str.toLowerCase();
- return r.copySafeness(str, ret.charAt(0).toUpperCase() + ret.slice(1));
- }
-
- exports.capitalize = capitalize;
-
- function center(str, width) {
- str = normalize(str, '');
- width = width || 80;
-
- if (str.length >= width) {
- return str;
- }
-
- var spaces = width - str.length;
- var pre = lib.repeat(' ', spaces / 2 - spaces % 2);
- var post = lib.repeat(' ', spaces / 2);
- return r.copySafeness(str, pre + str + post);
- }
-
- exports.center = center;
-
- function default_(val, def, bool) {
- if (bool) {
- return val || def;
- } else {
- return val !== undefined ? val : def;
- }
- } // TODO: it is confusing to export something called 'default'
-
-
- exports['default'] = default_; // eslint-disable-line dot-notation
-
- function dictsort(val, caseSensitive, by) {
- if (!lib.isObject(val)) {
- throw new lib.TemplateError('dictsort filter: val must be an object');
- }
-
- var array = []; // deliberately include properties from the object's prototype
-
- for (var k in val) {
- // eslint-disable-line guard-for-in, no-restricted-syntax
- array.push([k, val[k]]);
- }
-
- var si;
-
- if (by === undefined || by === 'key') {
- si = 0;
- } else if (by === 'value') {
- si = 1;
- } else {
- throw new lib.TemplateError('dictsort filter: You can only sort by either key or value');
- }
-
- array.sort(function (t1, t2) {
- var a = t1[si];
- var b = t2[si];
-
- if (!caseSensitive) {
- if (lib.isString(a)) {
- a = a.toUpperCase();
- }
-
- if (lib.isString(b)) {
- b = b.toUpperCase();
- }
- }
-
- return a > b ? 1 : a === b ? 0 : -1; // eslint-disable-line no-nested-ternary
- });
- return array;
- }
-
- exports.dictsort = dictsort;
-
- function dump(obj, spaces) {
- return JSON.stringify(obj, null, spaces);
- }
-
- exports.dump = dump;
-
- function escape(str) {
- if (str instanceof r.SafeString) {
- return str;
- }
-
- str = str === null || str === undefined ? '' : str;
- return r.markSafe(lib.escape(str.toString()));
- }
-
- exports.escape = escape;
-
- function safe(str) {
- if (str instanceof r.SafeString) {
- return str;
- }
-
- str = str === null || str === undefined ? '' : str;
- return r.markSafe(str.toString());
- }
-
- exports.safe = safe;
-
- function first(arr) {
- return arr[0];
- }
-
- exports.first = first;
-
- function forceescape(str) {
- str = str === null || str === undefined ? '' : str;
- return r.markSafe(lib.escape(str.toString()));
- }
-
- exports.forceescape = forceescape;
-
- function groupby(arr, attr) {
- return lib.groupBy(arr, attr, this.env.opts.throwOnUndefined);
- }
-
- exports.groupby = groupby;
-
- function indent(str, width, indentfirst) {
- str = normalize(str, '');
-
- if (str === '') {
- return '';
- }
-
- width = width || 4; // let res = '';
-
- var lines = str.split('\n');
- var sp = lib.repeat(' ', width);
- var res = lines.map(function (l, i) {
- return i === 0 && !indentfirst ? l : "" + sp + l;
- }).join('\n');
- return r.copySafeness(str, res);
- }
-
- exports.indent = indent;
-
- function join(arr, del, attr) {
- del = del || '';
-
- if (attr) {
- arr = lib.map(arr, function (v) {
- return v[attr];
- });
- }
-
- return arr.join(del);
- }
-
- exports.join = join;
-
- function last(arr) {
- return arr[arr.length - 1];
- }
-
- exports.last = last;
-
- function lengthFilter(val) {
- var value = normalize(val, '');
-
- if (value !== undefined) {
- if (typeof Map === 'function' && value instanceof Map || typeof Set === 'function' && value instanceof Set) {
- // ECMAScript 2015 Maps and Sets
- return value.size;
- }
-
- if (lib.isObject(value) && !(value instanceof r.SafeString)) {
- // Objects (besides SafeStrings), non-primative Arrays
- return lib.keys(value).length;
- }
-
- return value.length;
- }
-
- return 0;
- }
-
- exports.length = lengthFilter;
-
- function list(val) {
- if (lib.isString(val)) {
- return val.split('');
- } else if (lib.isObject(val)) {
- return lib._entries(val || {}).map(function (_ref) {
- var key = _ref[0],
- value = _ref[1];
- return {
- key: key,
- value: value
- };
- });
- } else if (lib.isArray(val)) {
- return val;
- } else {
- throw new lib.TemplateError('list filter: type not iterable');
- }
- }
-
- exports.list = list;
-
- function lower(str) {
- str = normalize(str, '');
- return str.toLowerCase();
- }
-
- exports.lower = lower;
-
- function nl2br(str) {
- if (str === null || str === undefined) {
- return '';
- }
-
- return r.copySafeness(str, str.replace(/\r\n|\n/g, '<br />\n'));
- }
-
- exports.nl2br = nl2br;
-
- function random(arr) {
- return arr[Math.floor(Math.random() * arr.length)];
- }
-
- exports.random = random;
- /**
- * Construct select or reject filter
- *
- * @param {boolean} expectedTestResult
- * @returns {function(array, string, *): array}
- */
-
- function getSelectOrReject(expectedTestResult) {
- function filter(arr, testName, secondArg) {
- if (testName === void 0) {
- testName = 'truthy';
- }
-
- var context = this;
- var test = context.env.getTest(testName);
- return lib.toArray(arr).filter(function examineTestResult(item) {
- return test.call(context, item, secondArg) === expectedTestResult;
- });
- }
-
- return filter;
- }
-
- exports.reject = getSelectOrReject(false);
-
- function rejectattr(arr, attr) {
- return arr.filter(function (item) {
- return !item[attr];
- });
- }
-
- exports.rejectattr = rejectattr;
- exports.select = getSelectOrReject(true);
-
- function selectattr(arr, attr) {
- return arr.filter(function (item) {
- return !!item[attr];
- });
- }
-
- exports.selectattr = selectattr;
-
- function replace(str, old, new_, maxCount) {
- var originalStr = str;
-
- if (old instanceof RegExp) {
- return str.replace(old, new_);
- }
-
- if (typeof maxCount === 'undefined') {
- maxCount = -1;
- }
-
- var res = ''; // Output
- // Cast Numbers in the search term to string
-
- if (typeof old === 'number') {
- old = '' + old;
- } else if (typeof old !== 'string') {
- // If it is something other than number or string,
- // return the original string
- return str;
- } // Cast numbers in the replacement to string
-
-
- if (typeof str === 'number') {
- str = '' + str;
- } // If by now, we don't have a string, throw it back
-
-
- if (typeof str !== 'string' && !(str instanceof r.SafeString)) {
- return str;
- } // ShortCircuits
-
-
- if (old === '') {
- // Mimic the python behaviour: empty string is replaced
- // by replacement e.g. "abc"|replace("", ".") -> .a.b.c.
- res = new_ + str.split('').join(new_) + new_;
- return r.copySafeness(str, res);
- }
-
- var nextIndex = str.indexOf(old); // if # of replacements to perform is 0, or the string to does
- // not contain the old value, return the string
-
- if (maxCount === 0 || nextIndex === -1) {
- return str;
- }
-
- var pos = 0;
- var count = 0; // # of replacements made
-
- while (nextIndex > -1 && (maxCount === -1 || count < maxCount)) {
- // Grab the next chunk of src string and add it with the
- // replacement, to the result
- res += str.substring(pos, nextIndex) + new_; // Increment our pointer in the src string
-
- pos = nextIndex + old.length;
- count++; // See if there are any more replacements to be made
-
- nextIndex = str.indexOf(old, pos);
- } // We've either reached the end, or done the max # of
- // replacements, tack on any remaining string
-
-
- if (pos < str.length) {
- res += str.substring(pos);
- }
-
- return r.copySafeness(originalStr, res);
- }
-
- exports.replace = replace;
-
- function reverse(val) {
- var arr;
-
- if (lib.isString(val)) {
- arr = list(val);
- } else {
- // Copy it
- arr = lib.map(val, function (v) {
- return v;
- });
- }
-
- arr.reverse();
-
- if (lib.isString(val)) {
- return r.copySafeness(val, arr.join(''));
- }
-
- return arr;
- }
-
- exports.reverse = reverse;
-
- function round(val, precision, method) {
- precision = precision || 0;
- var factor = Math.pow(10, precision);
- var rounder;
-
- if (method === 'ceil') {
- rounder = Math.ceil;
- } else if (method === 'floor') {
- rounder = Math.floor;
- } else {
- rounder = Math.round;
- }
-
- return rounder(val * factor) / factor;
- }
-
- exports.round = round;
-
- function slice(arr, slices, fillWith) {
- var sliceLength = Math.floor(arr.length / slices);
- var extra = arr.length % slices;
- var res = [];
- var offset = 0;
-
- for (var i = 0; i < slices; i++) {
- var start = offset + i * sliceLength;
-
- if (i < extra) {
- offset++;
- }
-
- var end = offset + (i + 1) * sliceLength;
- var currSlice = arr.slice(start, end);
-
- if (fillWith && i >= extra) {
- currSlice.push(fillWith);
- }
-
- res.push(currSlice);
- }
-
- return res;
- }
-
- exports.slice = slice;
-
- function sum(arr, attr, start) {
- if (start === void 0) {
- start = 0;
- }
-
- if (attr) {
- arr = lib.map(arr, function (v) {
- return v[attr];
- });
- }
-
- return start + arr.reduce(function (a, b) {
- return a + b;
- }, 0);
- }
-
- exports.sum = sum;
- exports.sort = r.makeMacro(['value', 'reverse', 'case_sensitive', 'attribute'], [], function sortFilter(arr, reversed, caseSens, attr) {
- var _this = this;
-
- // Copy it
- var array = lib.map(arr, function (v) {
- return v;
- });
- var getAttribute = lib.getAttrGetter(attr);
- array.sort(function (a, b) {
- var x = attr ? getAttribute(a) : a;
- var y = attr ? getAttribute(b) : b;
-
- if (_this.env.opts.throwOnUndefined && attr && (x === undefined || y === undefined)) {
- throw new TypeError("sort: attribute \"" + attr + "\" resolved to undefined");
- }
-
- if (!caseSens && lib.isString(x) && lib.isString(y)) {
- x = x.toLowerCase();
- y = y.toLowerCase();
- }
-
- if (x < y) {
- return reversed ? 1 : -1;
- } else if (x > y) {
- return reversed ? -1 : 1;
- } else {
- return 0;
- }
- });
- return array;
- });
-
- function string(obj) {
- return r.copySafeness(obj, obj);
- }
-
- exports.string = string;
-
- function striptags(input, preserveLinebreaks) {
- input = normalize(input, '');
- var tags = /<\/?([a-z][a-z0-9]*)\b[^>]*>|<!--[\s\S]*?-->/gi;
- var trimmedInput = trim(input.replace(tags, ''));
- var res = '';
-
- if (preserveLinebreaks) {
- res = trimmedInput.replace(/^ +| +$/gm, '') // remove leading and trailing spaces
- .replace(/ +/g, ' ') // squash adjacent spaces
- .replace(/(\r\n)/g, '\n') // normalize linebreaks (CRLF -> LF)
- .replace(/\n\n\n+/g, '\n\n'); // squash abnormal adjacent linebreaks
- } else {
- res = trimmedInput.replace(/\s+/gi, ' ');
- }
-
- return r.copySafeness(input, res);
- }
-
- exports.striptags = striptags;
-
- function title(str) {
- str = normalize(str, '');
- var words = str.split(' ').map(function (word) {
- return capitalize(word);
- });
- return r.copySafeness(str, words.join(' '));
- }
-
- exports.title = title;
-
- function trim(str) {
- return r.copySafeness(str, str.replace(/^\s*|\s*$/g, ''));
- }
-
- exports.trim = trim;
-
- function truncate(input, length, killwords, end) {
- var orig = input;
- input = normalize(input, '');
- length = length || 255;
-
- if (input.length <= length) {
- return input;
- }
-
- if (killwords) {
- input = input.substring(0, length);
- } else {
- var idx = input.lastIndexOf(' ', length);
-
- if (idx === -1) {
- idx = length;
- }
-
- input = input.substring(0, idx);
- }
-
- input += end !== undefined && end !== null ? end : '...';
- return r.copySafeness(orig, input);
- }
-
- exports.truncate = truncate;
-
- function upper(str) {
- str = normalize(str, '');
- return str.toUpperCase();
- }
-
- exports.upper = upper;
-
- function urlencode(obj) {
- var enc = encodeURIComponent;
-
- if (lib.isString(obj)) {
- return enc(obj);
- } else {
- var keyvals = lib.isArray(obj) ? obj : lib._entries(obj);
- return keyvals.map(function (_ref2) {
- var k = _ref2[0],
- v = _ref2[1];
- return enc(k) + "=" + enc(v);
- }).join('&');
- }
- }
-
- exports.urlencode = urlencode; // For the jinja regexp, see
- // https://github.com/mitsuhiko/jinja2/blob/f15b814dcba6aa12bc74d1f7d0c881d55f7126be/jinja2/utils.py#L20-L23
-
- var puncRe = /^(?:\(|<|<)?(.*?)(?:\.|,|\)|\n|>)?$/; // from http://blog.gerv.net/2011/05/html5_email_address_regexp/
-
- var emailRe = /^[\w.!#$%&'*+\-\/=?\^`{|}~]+@[a-z\d\-]+(\.[a-z\d\-]+)+$/i;
- var httpHttpsRe = /^https?:\/\/.*$/;
- var wwwRe = /^www\./;
- var tldRe = /\.(?:org|net|com)(?:\:|\/|$)/;
-
- function urlize(str, length, nofollow) {
- if (isNaN(length)) {
- length = Infinity;
- }
-
- var noFollowAttr = nofollow === true ? ' rel="nofollow"' : '';
- var words = str.split(/(\s+)/).filter(function (word) {
- // If the word has no length, bail. This can happen for str with
- // trailing whitespace.
- return word && word.length;
- }).map(function (word) {
- var matches = word.match(puncRe);
- var possibleUrl = matches ? matches[1] : word;
- var shortUrl = possibleUrl.substr(0, length); // url that starts with http or https
-
- if (httpHttpsRe.test(possibleUrl)) {
- return "<a href=\"" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>";
- } // url that starts with www.
-
-
- if (wwwRe.test(possibleUrl)) {
- return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>";
- } // an email address of the form username@domain.tld
-
-
- if (emailRe.test(possibleUrl)) {
- return "<a href=\"mailto:" + possibleUrl + "\">" + possibleUrl + "</a>";
- } // url that ends in .com, .org or .net that is not an email address
-
-
- if (tldRe.test(possibleUrl)) {
- return "<a href=\"http://" + possibleUrl + "\"" + noFollowAttr + ">" + shortUrl + "</a>";
- }
-
- return word;
- });
- return words.join('');
- }
-
- exports.urlize = urlize;
-
- function wordcount(str) {
- str = normalize(str, '');
- var words = str ? str.match(/\w+/g) : null;
- return words ? words.length : null;
- }
-
- exports.wordcount = wordcount;
-
- function float(val, def) {
- var res = parseFloat(val);
- return isNaN(res) ? def : res;
- }
-
- exports.float = float;
- var intFilter = r.makeMacro(['value', 'default', 'base'], [], function doInt(value, defaultValue, base) {
- if (base === void 0) {
- base = 10;
- }
-
- var res = parseInt(value, base);
- return isNaN(res) ? defaultValue : res;
- });
- exports.int = intFilter; // Aliases
-
- exports.d = exports.default;
- exports.e = exports.escape;
-
- /***/ }),
- /* 13 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
- // Copyright Joyent, Inc. and other Node contributors.
- //
- // Permission is hereby granted, free of charge, to any person obtaining a
- // copy of this software and associated documentation files (the
- // "Software"), to deal in the Software without restriction, including
- // without limitation the rights to use, copy, modify, merge, publish,
- // distribute, sublicense, and/or sell copies of the Software, and to permit
- // persons to whom the Software is furnished to do so, subject to the
- // following conditions:
- //
- // The above copyright notice and this permission notice shall be included
- // in all copies or substantial portions of the Software.
- //
- // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
- // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
- // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
- // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
- // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
- // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
- // USE OR OTHER DEALINGS IN THE SOFTWARE.
-
-
-
- var R = typeof Reflect === 'object' ? Reflect : null
- var ReflectApply = R && typeof R.apply === 'function'
- ? R.apply
- : function ReflectApply(target, receiver, args) {
- return Function.prototype.apply.call(target, receiver, args);
- }
-
- var ReflectOwnKeys
- if (R && typeof R.ownKeys === 'function') {
- ReflectOwnKeys = R.ownKeys
- } else if (Object.getOwnPropertySymbols) {
- ReflectOwnKeys = function ReflectOwnKeys(target) {
- return Object.getOwnPropertyNames(target)
- .concat(Object.getOwnPropertySymbols(target));
- };
- } else {
- ReflectOwnKeys = function ReflectOwnKeys(target) {
- return Object.getOwnPropertyNames(target);
- };
- }
-
- function ProcessEmitWarning(warning) {
- if (console && console.warn) console.warn(warning);
- }
-
- var NumberIsNaN = Number.isNaN || function NumberIsNaN(value) {
- return value !== value;
- }
-
- function EventEmitter() {
- EventEmitter.init.call(this);
- }
- module.exports = EventEmitter;
- module.exports.once = once;
-
- // Backwards-compat with node 0.10.x
- EventEmitter.EventEmitter = EventEmitter;
-
- EventEmitter.prototype._events = undefined;
- EventEmitter.prototype._eventsCount = 0;
- EventEmitter.prototype._maxListeners = undefined;
-
- // By default EventEmitters will print a warning if more than 10 listeners are
- // added to it. This is a useful default which helps finding memory leaks.
- var defaultMaxListeners = 10;
-
- function checkListener(listener) {
- if (typeof listener !== 'function') {
- throw new TypeError('The "listener" argument must be of type Function. Received type ' + typeof listener);
- }
- }
-
- Object.defineProperty(EventEmitter, 'defaultMaxListeners', {
- enumerable: true,
- get: function() {
- return defaultMaxListeners;
- },
- set: function(arg) {
- if (typeof arg !== 'number' || arg < 0 || NumberIsNaN(arg)) {
- throw new RangeError('The value of "defaultMaxListeners" is out of range. It must be a non-negative number. Received ' + arg + '.');
- }
- defaultMaxListeners = arg;
- }
- });
-
- EventEmitter.init = function() {
-
- if (this._events === undefined ||
- this._events === Object.getPrototypeOf(this)._events) {
- this._events = Object.create(null);
- this._eventsCount = 0;
- }
-
- this._maxListeners = this._maxListeners || undefined;
- };
-
- // Obviously not all Emitters should be limited to 10. This function allows
- // that to be increased. Set to zero for unlimited.
- EventEmitter.prototype.setMaxListeners = function setMaxListeners(n) {
- if (typeof n !== 'number' || n < 0 || NumberIsNaN(n)) {
- throw new RangeError('The value of "n" is out of range. It must be a non-negative number. Received ' + n + '.');
- }
- this._maxListeners = n;
- return this;
- };
-
- function _getMaxListeners(that) {
- if (that._maxListeners === undefined)
- return EventEmitter.defaultMaxListeners;
- return that._maxListeners;
- }
-
- EventEmitter.prototype.getMaxListeners = function getMaxListeners() {
- return _getMaxListeners(this);
- };
-
- EventEmitter.prototype.emit = function emit(type) {
- var args = [];
- for (var i = 1; i < arguments.length; i++) args.push(arguments[i]);
- var doError = (type === 'error');
-
- var events = this._events;
- if (events !== undefined)
- doError = (doError && events.error === undefined);
- else if (!doError)
- return false;
-
- // If there is no 'error' event listener then throw.
- if (doError) {
- var er;
- if (args.length > 0)
- er = args[0];
- if (er instanceof Error) {
- // Note: The comments on the `throw` lines are intentional, they show
- // up in Node's output if this results in an unhandled exception.
- throw er; // Unhandled 'error' event
- }
- // At least give some kind of context to the user
- var err = new Error('Unhandled error.' + (er ? ' (' + er.message + ')' : ''));
- err.context = er;
- throw err; // Unhandled 'error' event
- }
-
- var handler = events[type];
-
- if (handler === undefined)
- return false;
-
- if (typeof handler === 'function') {
- ReflectApply(handler, this, args);
- } else {
- var len = handler.length;
- var listeners = arrayClone(handler, len);
- for (var i = 0; i < len; ++i)
- ReflectApply(listeners[i], this, args);
- }
-
- return true;
- };
-
- function _addListener(target, type, listener, prepend) {
- var m;
- var events;
- var existing;
-
- checkListener(listener);
-
- events = target._events;
- if (events === undefined) {
- events = target._events = Object.create(null);
- target._eventsCount = 0;
- } else {
- // To avoid recursion in the case that type === "newListener"! Before
- // adding it to the listeners, first emit "newListener".
- if (events.newListener !== undefined) {
- target.emit('newListener', type,
- listener.listener ? listener.listener : listener);
-
- // Re-assign `events` because a newListener handler could have caused the
- // this._events to be assigned to a new object
- events = target._events;
- }
- existing = events[type];
- }
-
- if (existing === undefined) {
- // Optimize the case of one listener. Don't need the extra array object.
- existing = events[type] = listener;
- ++target._eventsCount;
- } else {
- if (typeof existing === 'function') {
- // Adding the second element, need to change to array.
- existing = events[type] =
- prepend ? [listener, existing] : [existing, listener];
- // If we've already got an array, just append.
- } else if (prepend) {
- existing.unshift(listener);
- } else {
- existing.push(listener);
- }
-
- // Check for listener leak
- m = _getMaxListeners(target);
- if (m > 0 && existing.length > m && !existing.warned) {
- existing.warned = true;
- // No error code for this since it is a Warning
- // eslint-disable-next-line no-restricted-syntax
- var w = new Error('Possible EventEmitter memory leak detected. ' +
- existing.length + ' ' + String(type) + ' listeners ' +
- 'added. Use emitter.setMaxListeners() to ' +
- 'increase limit');
- w.name = 'MaxListenersExceededWarning';
- w.emitter = target;
- w.type = type;
- w.count = existing.length;
- ProcessEmitWarning(w);
- }
- }
-
- return target;
- }
-
- EventEmitter.prototype.addListener = function addListener(type, listener) {
- return _addListener(this, type, listener, false);
- };
-
- EventEmitter.prototype.on = EventEmitter.prototype.addListener;
-
- EventEmitter.prototype.prependListener =
- function prependListener(type, listener) {
- return _addListener(this, type, listener, true);
- };
-
- function onceWrapper() {
- if (!this.fired) {
- this.target.removeListener(this.type, this.wrapFn);
- this.fired = true;
- if (arguments.length === 0)
- return this.listener.call(this.target);
- return this.listener.apply(this.target, arguments);
- }
- }
-
- function _onceWrap(target, type, listener) {
- var state = { fired: false, wrapFn: undefined, target: target, type: type, listener: listener };
- var wrapped = onceWrapper.bind(state);
- wrapped.listener = listener;
- state.wrapFn = wrapped;
- return wrapped;
- }
-
- EventEmitter.prototype.once = function once(type, listener) {
- checkListener(listener);
- this.on(type, _onceWrap(this, type, listener));
- return this;
- };
-
- EventEmitter.prototype.prependOnceListener =
- function prependOnceListener(type, listener) {
- checkListener(listener);
- this.prependListener(type, _onceWrap(this, type, listener));
- return this;
- };
-
- // Emits a 'removeListener' event if and only if the listener was removed.
- EventEmitter.prototype.removeListener =
- function removeListener(type, listener) {
- var list, events, position, i, originalListener;
-
- checkListener(listener);
-
- events = this._events;
- if (events === undefined)
- return this;
-
- list = events[type];
- if (list === undefined)
- return this;
-
- if (list === listener || list.listener === listener) {
- if (--this._eventsCount === 0)
- this._events = Object.create(null);
- else {
- delete events[type];
- if (events.removeListener)
- this.emit('removeListener', type, list.listener || listener);
- }
- } else if (typeof list !== 'function') {
- position = -1;
-
- for (i = list.length - 1; i >= 0; i--) {
- if (list[i] === listener || list[i].listener === listener) {
- originalListener = list[i].listener;
- position = i;
- break;
- }
- }
-
- if (position < 0)
- return this;
-
- if (position === 0)
- list.shift();
- else {
- spliceOne(list, position);
- }
-
- if (list.length === 1)
- events[type] = list[0];
-
- if (events.removeListener !== undefined)
- this.emit('removeListener', type, originalListener || listener);
- }
-
- return this;
- };
-
- EventEmitter.prototype.off = EventEmitter.prototype.removeListener;
-
- EventEmitter.prototype.removeAllListeners =
- function removeAllListeners(type) {
- var listeners, events, i;
-
- events = this._events;
- if (events === undefined)
- return this;
-
- // not listening for removeListener, no need to emit
- if (events.removeListener === undefined) {
- if (arguments.length === 0) {
- this._events = Object.create(null);
- this._eventsCount = 0;
- } else if (events[type] !== undefined) {
- if (--this._eventsCount === 0)
- this._events = Object.create(null);
- else
- delete events[type];
- }
- return this;
- }
-
- // emit removeListener for all listeners on all events
- if (arguments.length === 0) {
- var keys = Object.keys(events);
- var key;
- for (i = 0; i < keys.length; ++i) {
- key = keys[i];
- if (key === 'removeListener') continue;
- this.removeAllListeners(key);
- }
- this.removeAllListeners('removeListener');
- this._events = Object.create(null);
- this._eventsCount = 0;
- return this;
- }
-
- listeners = events[type];
-
- if (typeof listeners === 'function') {
- this.removeListener(type, listeners);
- } else if (listeners !== undefined) {
- // LIFO order
- for (i = listeners.length - 1; i >= 0; i--) {
- this.removeListener(type, listeners[i]);
- }
- }
-
- return this;
- };
-
- function _listeners(target, type, unwrap) {
- var events = target._events;
-
- if (events === undefined)
- return [];
-
- var evlistener = events[type];
- if (evlistener === undefined)
- return [];
-
- if (typeof evlistener === 'function')
- return unwrap ? [evlistener.listener || evlistener] : [evlistener];
-
- return unwrap ?
- unwrapListeners(evlistener) : arrayClone(evlistener, evlistener.length);
- }
-
- EventEmitter.prototype.listeners = function listeners(type) {
- return _listeners(this, type, true);
- };
-
- EventEmitter.prototype.rawListeners = function rawListeners(type) {
- return _listeners(this, type, false);
- };
-
- EventEmitter.listenerCount = function(emitter, type) {
- if (typeof emitter.listenerCount === 'function') {
- return emitter.listenerCount(type);
- } else {
- return listenerCount.call(emitter, type);
- }
- };
-
- EventEmitter.prototype.listenerCount = listenerCount;
- function listenerCount(type) {
- var events = this._events;
-
- if (events !== undefined) {
- var evlistener = events[type];
-
- if (typeof evlistener === 'function') {
- return 1;
- } else if (evlistener !== undefined) {
- return evlistener.length;
- }
- }
-
- return 0;
- }
-
- EventEmitter.prototype.eventNames = function eventNames() {
- return this._eventsCount > 0 ? ReflectOwnKeys(this._events) : [];
- };
-
- function arrayClone(arr, n) {
- var copy = new Array(n);
- for (var i = 0; i < n; ++i)
- copy[i] = arr[i];
- return copy;
- }
-
- function spliceOne(list, index) {
- for (; index + 1 < list.length; index++)
- list[index] = list[index + 1];
- list.pop();
- }
-
- function unwrapListeners(arr) {
- var ret = new Array(arr.length);
- for (var i = 0; i < ret.length; ++i) {
- ret[i] = arr[i].listener || arr[i];
- }
- return ret;
- }
-
- function once(emitter, name) {
- return new Promise(function (resolve, reject) {
- function eventListener() {
- if (errorListener !== undefined) {
- emitter.removeListener('error', errorListener);
- }
- resolve([].slice.call(arguments));
- };
- var errorListener;
-
- // Adding an error listener is not optional because
- // if an error is thrown on an event emitter we cannot
- // guarantee that the actual event we are waiting will
- // be fired. The result could be a silent way to create
- // memory or file descriptor leaks, which is something
- // we should avoid.
- if (name !== 'error') {
- errorListener = function errorListener(err) {
- emitter.removeListener(name, eventListener);
- reject(err);
- };
-
- emitter.once('error', errorListener);
- }
-
- emitter.once(name, eventListener);
- });
- }
-
-
- /***/ }),
- /* 14 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- var SafeString = __webpack_require__(2).SafeString;
- /**
- * Returns `true` if the object is a function, otherwise `false`.
- * @param { any } value
- * @returns { boolean }
- */
-
-
- function callable(value) {
- return typeof value === 'function';
- }
-
- exports.callable = callable;
- /**
- * Returns `true` if the object is strictly not `undefined`.
- * @param { any } value
- * @returns { boolean }
- */
-
- function defined(value) {
- return value !== undefined;
- }
-
- exports.defined = defined;
- /**
- * Returns `true` if the operand (one) is divisble by the test's argument
- * (two).
- * @param { number } one
- * @param { number } two
- * @returns { boolean }
- */
-
- function divisibleby(one, two) {
- return one % two === 0;
- }
-
- exports.divisibleby = divisibleby;
- /**
- * Returns true if the string has been escaped (i.e., is a SafeString).
- * @param { any } value
- * @returns { boolean }
- */
-
- function escaped(value) {
- return value instanceof SafeString;
- }
-
- exports.escaped = escaped;
- /**
- * Returns `true` if the arguments are strictly equal.
- * @param { any } one
- * @param { any } two
- */
-
- function equalto(one, two) {
- return one === two;
- }
-
- exports.equalto = equalto; // Aliases
-
- exports.eq = exports.equalto;
- exports.sameas = exports.equalto;
- /**
- * Returns `true` if the value is evenly divisible by 2.
- * @param { number } value
- * @returns { boolean }
- */
-
- function even(value) {
- return value % 2 === 0;
- }
-
- exports.even = even;
- /**
- * Returns `true` if the value is falsy - if I recall correctly, '', 0, false,
- * undefined, NaN or null. I don't know if we should stick to the default JS
- * behavior or attempt to replicate what Python believes should be falsy (i.e.,
- * empty arrays, empty dicts, not 0...).
- * @param { any } value
- * @returns { boolean }
- */
-
- function falsy(value) {
- return !value;
- }
-
- exports.falsy = falsy;
- /**
- * Returns `true` if the operand (one) is greater or equal to the test's
- * argument (two).
- * @param { number } one
- * @param { number } two
- * @returns { boolean }
- */
-
- function ge(one, two) {
- return one >= two;
- }
-
- exports.ge = ge;
- /**
- * Returns `true` if the operand (one) is greater than the test's argument
- * (two).
- * @param { number } one
- * @param { number } two
- * @returns { boolean }
- */
-
- function greaterthan(one, two) {
- return one > two;
- }
-
- exports.greaterthan = greaterthan; // alias
-
- exports.gt = exports.greaterthan;
- /**
- * Returns `true` if the operand (one) is less than or equal to the test's
- * argument (two).
- * @param { number } one
- * @param { number } two
- * @returns { boolean }
- */
-
- function le(one, two) {
- return one <= two;
- }
-
- exports.le = le;
- /**
- * Returns `true` if the operand (one) is less than the test's passed argument
- * (two).
- * @param { number } one
- * @param { number } two
- * @returns { boolean }
- */
-
- function lessthan(one, two) {
- return one < two;
- }
-
- exports.lessthan = lessthan; // alias
-
- exports.lt = exports.lessthan;
- /**
- * Returns `true` if the string is lowercased.
- * @param { string } value
- * @returns { boolean }
- */
-
- function lower(value) {
- return value.toLowerCase() === value;
- }
-
- exports.lower = lower;
- /**
- * Returns `true` if the operand (one) is less than or equal to the test's
- * argument (two).
- * @param { number } one
- * @param { number } two
- * @returns { boolean }
- */
-
- function ne(one, two) {
- return one !== two;
- }
-
- exports.ne = ne;
- /**
- * Returns true if the value is strictly equal to `null`.
- * @param { any }
- * @returns { boolean }
- */
-
- function nullTest(value) {
- return value === null;
- }
-
- exports.null = nullTest;
- /**
- * Returns true if value is a number.
- * @param { any }
- * @returns { boolean }
- */
-
- function number(value) {
- return typeof value === 'number';
- }
-
- exports.number = number;
- /**
- * Returns `true` if the value is *not* evenly divisible by 2.
- * @param { number } value
- * @returns { boolean }
- */
-
- function odd(value) {
- return value % 2 === 1;
- }
-
- exports.odd = odd;
- /**
- * Returns `true` if the value is a string, `false` if not.
- * @param { any } value
- * @returns { boolean }
- */
-
- function string(value) {
- return typeof value === 'string';
- }
-
- exports.string = string;
- /**
- * Returns `true` if the value is not in the list of things considered falsy:
- * '', null, undefined, 0, NaN and false.
- * @param { any } value
- * @returns { boolean }
- */
-
- function truthy(value) {
- return !!value;
- }
-
- exports.truthy = truthy;
- /**
- * Returns `true` if the value is undefined.
- * @param { any } value
- * @returns { boolean }
- */
-
- function undefinedTest(value) {
- return value === undefined;
- }
-
- exports.undefined = undefinedTest;
- /**
- * Returns `true` if the string is uppercased.
- * @param { string } value
- * @returns { boolean }
- */
-
- function upper(value) {
- return value.toUpperCase() === value;
- }
-
- exports.upper = upper;
- /**
- * If ES6 features are available, returns `true` if the value implements the
- * `Symbol.iterator` method. If not, it's a string or Array.
- *
- * Could potentially cause issues if a browser exists that has Set and Map but
- * not Symbol.
- *
- * @param { any } value
- * @returns { boolean }
- */
-
- function iterable(value) {
- if (typeof Symbol !== 'undefined') {
- return !!value[Symbol.iterator];
- } else {
- return Array.isArray(value) || typeof value === 'string';
- }
- }
-
- exports.iterable = iterable;
- /**
- * If ES6 features are available, returns `true` if the value is an object hash
- * or an ES6 Map. Otherwise just return if it's an object hash.
- * @param { any } value
- * @returns { boolean }
- */
-
- function mapping(value) {
- // only maps and object hashes
- var bool = value !== null && value !== undefined && typeof value === 'object' && !Array.isArray(value);
-
- if (Set) {
- return bool && !(value instanceof Set);
- } else {
- return bool;
- }
- }
-
- exports.mapping = mapping;
-
- /***/ }),
- /* 15 */
- /***/ (function(module, exports, __webpack_require__) {
-
- "use strict";
-
-
- function _cycler(items) {
- var index = -1;
- return {
- current: null,
- reset: function reset() {
- index = -1;
- this.current = null;
- },
- next: function next() {
- index++;
-
- if (index >= items.length) {
- index = 0;
- }
-
- this.current = items[index];
- return this.current;
- }
- };
- }
-
- function _joiner(sep) {
- sep = sep || ',';
- var first = true;
- return function () {
- var val = first ? '' : sep;
- first = false;
- return val;
- };
- } // Making this a function instead so it returns a new object
- // each time it's called. That way, if something like an environment
- // uses it, they will each have their own copy.
-
-
- function globals() {
- return {
- range: function range(start, stop, step) {
- if (typeof stop === 'undefined') {
- stop = start;
- start = 0;
- step = 1;
- } else if (!step) {
- step = 1;
- }
-
- var arr = [];
-
- if (step > 0) {
- for (var i = start; i < stop; i += step) {
- arr.push(i);
- }
- } else {
- for (var _i = start; _i > stop; _i += step) {
- // eslint-disable-line for-direction
- arr.push(_i);
- }
- }
-
- return arr;
- },
- cycler: function cycler() {
- return _cycler(Array.prototype.slice.call(arguments));
- },
- joiner: function joiner(sep) {
- return _joiner(sep);
- }
- };
- }
-
- module.exports = globals;
-
- /***/ }),
- /* 16 */
- /***/ (function(module, exports, __webpack_require__) {
-
- var path = __webpack_require__(0);
-
- module.exports = function express(env, app) {
- function NunjucksView(name, opts) {
- this.name = name;
- this.path = name;
- this.defaultEngine = opts.defaultEngine;
- this.ext = path.extname(name);
-
- if (!this.ext && !this.defaultEngine) {
- throw new Error('No default engine was specified and no extension was provided.');
- }
-
- if (!this.ext) {
- this.name += this.ext = (this.defaultEngine[0] !== '.' ? '.' : '') + this.defaultEngine;
- }
- }
-
- NunjucksView.prototype.render = function render(opts, cb) {
- env.render(this.name, opts, cb);
- };
-
- app.set('view', NunjucksView);
- app.set('nunjucksEnv', env);
- return env;
- };
-
- /***/ }),
- /* 17 */
- /***/ (function(module, exports, __webpack_require__) {
-
- function installCompat() {
- 'use strict';
- /* eslint-disable camelcase */
- // This must be called like `nunjucks.installCompat` so that `this`
- // references the nunjucks instance
-
- var runtime = this.runtime;
- var lib = this.lib; // Handle slim case where these 'modules' are excluded from the built source
-
- var Compiler = this.compiler.Compiler;
- var Parser = this.parser.Parser;
- var nodes = this.nodes;
- var lexer = this.lexer;
- var orig_contextOrFrameLookup = runtime.contextOrFrameLookup;
- var orig_memberLookup = runtime.memberLookup;
- var orig_Compiler_assertType;
- var orig_Parser_parseAggregate;
-
- if (Compiler) {
- orig_Compiler_assertType = Compiler.prototype.assertType;
- }
-
- if (Parser) {
- orig_Parser_parseAggregate = Parser.prototype.parseAggregate;
- }
-
- function uninstall() {
- runtime.contextOrFrameLookup = orig_contextOrFrameLookup;
- runtime.memberLookup = orig_memberLookup;
-
- if (Compiler) {
- Compiler.prototype.assertType = orig_Compiler_assertType;
- }
-
- if (Parser) {
- Parser.prototype.parseAggregate = orig_Parser_parseAggregate;
- }
- }
-
- runtime.contextOrFrameLookup = function contextOrFrameLookup(context, frame, key) {
- var val = orig_contextOrFrameLookup.apply(this, arguments);
-
- if (val !== undefined) {
- return val;
- }
-
- switch (key) {
- case 'True':
- return true;
-
- case 'False':
- return false;
-
- case 'None':
- return null;
-
- default:
- return undefined;
- }
- };
-
- function getTokensState(tokens) {
- return {
- index: tokens.index,
- lineno: tokens.lineno,
- colno: tokens.colno
- };
- }
-
- if (false) {
- // i.e., not slim mode
- var Slice = nodes.Node.extend('Slice', {
- fields: ['start', 'stop', 'step'],
- init: function init(lineno, colno, start, stop, step) {
- start = start || new nodes.Literal(lineno, colno, null);
- stop = stop || new nodes.Literal(lineno, colno, null);
- step = step || new nodes.Literal(lineno, colno, 1);
- this.parent(lineno, colno, start, stop, step);
- }
- });
-
- Compiler.prototype.assertType = function assertType(node) {
- if (node instanceof Slice) {
- return;
- }
-
- orig_Compiler_assertType.apply(this, arguments);
- };
-
- Compiler.prototype.compileSlice = function compileSlice(node, frame) {
- this._emit('(');
-
- this._compileExpression(node.start, frame);
-
- this._emit('),(');
-
- this._compileExpression(node.stop, frame);
-
- this._emit('),(');
-
- this._compileExpression(node.step, frame);
-
- this._emit(')');
- };
-
- Parser.prototype.parseAggregate = function parseAggregate() {
- var _this = this;
-
- var origState = getTokensState(this.tokens); // Set back one accounting for opening bracket/parens
-
- origState.colno--;
- origState.index--;
-
- try {
- return orig_Parser_parseAggregate.apply(this);
- } catch (e) {
- var errState = getTokensState(this.tokens);
-
- var rethrow = function rethrow() {
- lib._assign(_this.tokens, errState);
-
- return e;
- }; // Reset to state before original parseAggregate called
-
-
- lib._assign(this.tokens, origState);
-
- this.peeked = false;
- var tok = this.peekToken();
-
- if (tok.type !== lexer.TOKEN_LEFT_BRACKET) {
- throw rethrow();
- } else {
- this.nextToken();
- }
-
- var node = new Slice(tok.lineno, tok.colno); // If we don't encounter a colon while parsing, this is not a slice,
- // so re-raise the original exception.
-
- var isSlice = false;
-
- for (var i = 0; i <= node.fields.length; i++) {
- if (this.skip(lexer.TOKEN_RIGHT_BRACKET)) {
- break;
- }
-
- if (i === node.fields.length) {
- if (isSlice) {
- this.fail('parseSlice: too many slice components', tok.lineno, tok.colno);
- } else {
- break;
- }
- }
-
- if (this.skip(lexer.TOKEN_COLON)) {
- isSlice = true;
- } else {
- var field = node.fields[i];
- node[field] = this.parseExpression();
- isSlice = this.skip(lexer.TOKEN_COLON) || isSlice;
- }
- }
-
- if (!isSlice) {
- throw rethrow();
- }
-
- return new nodes.Array(tok.lineno, tok.colno, [node]);
- }
- };
- }
-
- function sliceLookup(obj, start, stop, step) {
- obj = obj || [];
-
- if (start === null) {
- start = step < 0 ? obj.length - 1 : 0;
- }
-
- if (stop === null) {
- stop = step < 0 ? -1 : obj.length;
- } else if (stop < 0) {
- stop += obj.length;
- }
-
- if (start < 0) {
- start += obj.length;
- }
-
- var results = [];
-
- for (var i = start;; i += step) {
- if (i < 0 || i > obj.length) {
- break;
- }
-
- if (step > 0 && i >= stop) {
- break;
- }
-
- if (step < 0 && i <= stop) {
- break;
- }
-
- results.push(runtime.memberLookup(obj, i));
- }
-
- return results;
- }
-
- function hasOwnProp(obj, key) {
- return Object.prototype.hasOwnProperty.call(obj, key);
- }
-
- var ARRAY_MEMBERS = {
- pop: function pop(index) {
- if (index === undefined) {
- return this.pop();
- }
-
- if (index >= this.length || index < 0) {
- throw new Error('KeyError');
- }
-
- return this.splice(index, 1);
- },
- append: function append(element) {
- return this.push(element);
- },
- remove: function remove(element) {
- for (var i = 0; i < this.length; i++) {
- if (this[i] === element) {
- return this.splice(i, 1);
- }
- }
-
- throw new Error('ValueError');
- },
- count: function count(element) {
- var count = 0;
-
- for (var i = 0; i < this.length; i++) {
- if (this[i] === element) {
- count++;
- }
- }
-
- return count;
- },
- index: function index(element) {
- var i;
-
- if ((i = this.indexOf(element)) === -1) {
- throw new Error('ValueError');
- }
-
- return i;
- },
- find: function find(element) {
- return this.indexOf(element);
- },
- insert: function insert(index, elem) {
- return this.splice(index, 0, elem);
- }
- };
- var OBJECT_MEMBERS = {
- items: function items() {
- return lib._entries(this);
- },
- values: function values() {
- return lib._values(this);
- },
- keys: function keys() {
- return lib.keys(this);
- },
- get: function get(key, def) {
- var output = this[key];
-
- if (output === undefined) {
- output = def;
- }
-
- return output;
- },
- has_key: function has_key(key) {
- return hasOwnProp(this, key);
- },
- pop: function pop(key, def) {
- var output = this[key];
-
- if (output === undefined && def !== undefined) {
- output = def;
- } else if (output === undefined) {
- throw new Error('KeyError');
- } else {
- delete this[key];
- }
-
- return output;
- },
- popitem: function popitem() {
- var keys = lib.keys(this);
-
- if (!keys.length) {
- throw new Error('KeyError');
- }
-
- var k = keys[0];
- var val = this[k];
- delete this[k];
- return [k, val];
- },
- setdefault: function setdefault(key, def) {
- if (def === void 0) {
- def = null;
- }
-
- if (!(key in this)) {
- this[key] = def;
- }
-
- return this[key];
- },
- update: function update(kwargs) {
- lib._assign(this, kwargs);
-
- return null; // Always returns None
- }
- };
- OBJECT_MEMBERS.iteritems = OBJECT_MEMBERS.items;
- OBJECT_MEMBERS.itervalues = OBJECT_MEMBERS.values;
- OBJECT_MEMBERS.iterkeys = OBJECT_MEMBERS.keys;
-
- runtime.memberLookup = function memberLookup(obj, val, autoescape) {
- if (arguments.length === 4) {
- return sliceLookup.apply(this, arguments);
- }
-
- obj = obj || {}; // If the object is an object, return any of the methods that Python would
- // otherwise provide.
-
- if (lib.isArray(obj) && hasOwnProp(ARRAY_MEMBERS, val)) {
- return ARRAY_MEMBERS[val].bind(obj);
- }
-
- if (lib.isObject(obj) && hasOwnProp(OBJECT_MEMBERS, val)) {
- return OBJECT_MEMBERS[val].bind(obj);
- }
-
- return orig_memberLookup.apply(this, arguments);
- };
-
- return uninstall;
- }
-
- module.exports = installCompat;
-
- /***/ })
- /******/ ]);
- });
- //# sourceMappingURL=nunjucks-slim.js.map
|