Page MenuHomeSoftware Heritage

revision.6298752558170be283db.js.map
No OneTemporary

revision.6298752558170be283db.js.map

{
"version": 3,
"sources": [
"webpack://swh.revision/webpack/universalModuleDefinition",
"webpack://swh.revision/./node_modules/@babel/runtime/helpers/asyncToGenerator.js",
"webpack://swh.revision/./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime-module.js",
"webpack://swh.revision/./node_modules/@babel/runtime/node_modules/regenerator-runtime/runtime.js",
"webpack://swh.revision/./node_modules/@babel/runtime/regenerator/index.js",
"webpack://swh.revision/./assets/src/bundles/revision/diff-utils.js",
"webpack://swh.revision/./assets/src/bundles/revision/log-utils.js",
"webpack://swh.revision/./assets/src/utils/constants.js",
"webpack://swh.revision/./assets/src/utils/functions.js",
"webpack://swh.revision/./assets/src/bundles/revision/diff-panel.ejs",
"webpack://swh.revision/./node_modules/waypoints/lib/jquery.waypoints.js",
"webpack://swh.revision/webpack/bootstrap",
"webpack://swh.revision/webpack/runtime/load script",
"webpack://swh.revision/webpack/runtime/css loading",
"webpack://swh.revision/webpack/runtime/compat get default export",
"webpack://swh.revision/webpack/runtime/define property getters",
"webpack://swh.revision/webpack/runtime/ensure chunk",
"webpack://swh.revision/webpack/runtime/get javascript chunk filename",
"webpack://swh.revision/webpack/runtime/get mini-css chunk filename",
"webpack://swh.revision/webpack/runtime/global",
"webpack://swh.revision/webpack/runtime/hasOwnProperty shorthand",
"webpack://swh.revision/webpack/runtime/make namespace object",
"webpack://swh.revision/webpack/runtime/publicPath",
"webpack://swh.revision/webpack/runtime/jsonp chunk loading"
],
"names": [
"root",
"factory",
"exports",
"module",
"define",
"amd",
"self",
"asyncGeneratorStep",
"gen",
"resolve",
"reject",
"_next",
"_throw",
"key",
"arg",
"info",
"value",
"error",
"done",
"Promise",
"then",
"fn",
"this",
"args",
"arguments",
"apply",
"err",
"undefined",
"g",
"Function",
"hadRuntime",
"regeneratorRuntime",
"Object",
"getOwnPropertyNames",
"indexOf",
"oldRuntime",
"e",
"global",
"Op",
"prototype",
"hasOwn",
"hasOwnProperty",
"$Symbol",
"Symbol",
"iteratorSymbol",
"iterator",
"asyncIteratorSymbol",
"asyncIterator",
"toStringTagSymbol",
"toStringTag",
"runtime",
"wrap",
"GenStateSuspendedStart",
"GenStateSuspendedYield",
"GenStateExecuting",
"GenStateCompleted",
"ContinueSentinel",
"IteratorPrototype",
"getProto",
"getPrototypeOf",
"NativeIteratorPrototype",
"values",
"call",
"Gp",
"GeneratorFunctionPrototype",
"Generator",
"create",
"GeneratorFunction",
"constructor",
"displayName",
"isGeneratorFunction",
"genFun",
"ctor",
"name",
"mark",
"setPrototypeOf",
"__proto__",
"awrap",
"__await",
"defineIteratorMethods",
"AsyncIterator",
"async",
"innerFn",
"outerFn",
"tryLocsList",
"iter",
"next",
"result",
"toString",
"keys",
"object",
"push",
"reverse",
"length",
"pop",
"Context",
"reset",
"skipTempReset",
"prev",
"sent",
"_sent",
"delegate",
"method",
"tryEntries",
"forEach",
"resetTryEntry",
"charAt",
"isNaN",
"slice",
"stop",
"rootRecord",
"completion",
"type",
"rval",
"dispatchException",
"exception",
"context",
"handle",
"loc",
"caught",
"record",
"i",
"entry",
"tryLoc",
"hasCatch",
"hasFinally",
"catchLoc",
"finallyLoc",
"Error",
"abrupt",
"finallyEntry",
"complete",
"afterLoc",
"finish",
"thrown",
"delegateYield",
"iterable",
"resultName",
"nextLoc",
"protoGenerator",
"generator",
"_invoke",
"state",
"doneResult",
"delegateResult",
"maybeInvokeDelegate",
"tryCatch",
"makeInvokeMethod",
"obj",
"invoke",
"unwrapped",
"previousPromise",
"callInvokeWithMethodAndArg",
"return",
"TypeError",
"pushTryEntry",
"locs",
"iteratorMethod",
"selectedDiffLinesInfo",
"changes",
"nbChangedFiles",
"nbDiffsComputed",
"nbAdditions",
"nbDeletions",
"computedDiffs",
"diffsUrls",
"startLines",
"endLines",
"diffMaxNumberChars",
"focusedDiff",
"changesUrlFragment",
"currentTabName",
"isInViewport",
"elt",
"elementTop",
"$",
"offset",
"top",
"elementBottom",
"outerHeight",
"viewportTop",
"window",
"scrollTop",
"viewportBottom",
"height",
"formatDiffLineNumbers",
"diffId",
"fromLine",
"toLine",
"maxNumberChars",
"fromLineStr",
"toLnStr",
"toLineStr",
"ret",
"toLnInt",
"lnStr",
"parseInt",
"lnInt",
"parseDiffLineNumbers",
"lineNumbersStr",
"from",
"to",
"lines",
"lineNumber",
"trim",
"replace",
"split",
"shift",
"map",
"x",
"selectedDiffLinesToFragment",
"unified",
"selectedLinesFragment",
"fragmentToSelectedDiffLines",
"fragment",
"matchObj",
"exec",
"highlightDiffLine",
"line",
"lineNumbers",
"css",
"resetHighlightedDiffLines",
"resetVars",
"location",
"hash",
"history",
"replaceState",
"document",
"title",
"pathname",
"search",
"highlightDiffLines",
"firstHighlightedLine",
"start",
"end",
"startLine",
"endLine",
"position",
"lineTd",
"tr",
"closest",
"children",
"data",
"Math",
"min",
"max",
"left",
"right",
"leftLine",
"rightLine",
"leftLineAbove",
"fromTr",
"first",
"fromLn",
"toTr",
"toLn",
"canHighlight",
"showUnifiedDiff",
"showSplitDiff",
"computeDiff",
"diffUrl",
"setLineNumbers",
"lnElt",
"attr",
"siblings",
"fetch",
"response",
"json",
"addClass",
"diff_str",
"innerHTML",
"setDiffVisible",
"text",
"removeClass",
"language",
"each",
"hljs",
"highlightElement",
"lineNumbersElementSync",
"baseFromLine",
"baseToLine",
"fromToLines",
"fromLines",
"toLines",
"diffFromStr",
"diffToStr",
"linesOffset",
"lnText",
"nextSibling",
"innerText",
"linesInfo",
"lineText",
"startsWith",
"linesInfoRegExp",
"RegExp",
"linesInfoRegExp2",
"linesInfoRegExp3",
"linesInfoRegExp4",
"linesInfo2",
"linesInfo3",
"linesInfo4",
"parseDiffHunkRangeIfAny",
"j",
"abs",
"parent",
"linesInfoText",
"find",
"remove",
"append",
"firstChild",
"nodeName",
"substr",
"newTextNode",
"createTextNode",
"prepend",
"contents",
"filter",
"nodeType",
"textNode",
"swhNoNewLineMarker",
"textContent",
"diffPanelId",
"animate",
"duration",
"Waypoint",
"refreshAll",
"computeVisibleDiffs",
"id",
"genDiffPanel",
"diffData",
"diffPanelTitle",
"path",
"from_path",
"to_path",
"diffPanelTemplate",
"swhSpinnerSrc",
"setupWaypoints",
"waypoint",
"handler",
"element",
"destroy",
"scrollToDiffPanel",
"setHash",
"disableAll",
"enableAll",
"computeAllDiffs",
"event",
"currentTarget",
"stopPropagation",
"initRevisionDiff",
"revisionMessageBody",
"diffRevisionUrl",
"on",
"changedFilesText",
"total_nb_changes",
"changes_msg",
"diff_url",
"removeUrlFragment",
"ready",
"click",
"evt",
"target",
"classList",
"contains",
"prop",
"currentDiff",
"shiftKey",
"tab",
"revsOrderingTypeClicked",
"urlParams",
"URLSearchParams",
"val",
"set",
"has",
"initRevisionsLog",
"revsOrderingType",
"get",
"staticAsset",
"asset",
"__STATIC__",
"anonymous",
"locals",
"escapeFn",
"include",
"rethrow",
"markup",
"String",
"_MATCH_HTML",
"encode_char",
"_ENCODE_HTML_RULES",
"c",
"__output",
"__append",
"s",
"content_url",
"keyCounter",
"allWaypoints",
"options",
"Adapter",
"extend",
"defaults",
"adapter",
"callback",
"axis",
"horizontal",
"enabled",
"triggerPoint",
"group",
"Group",
"findOrCreate",
"findOrCreateByElement",
"offsetAliases",
"add",
"queueTrigger",
"direction",
"trigger",
"disable",
"enable",
"refresh",
"previous",
"invokeAll",
"allWaypointsArray",
"waypointKey",
"destroyAll",
"viewportHeight",
"innerHeight",
"documentElement",
"clientHeight",
"viewportWidth",
"clientWidth",
"adapters",
"continuous",
"innerWidth",
"outerWidth",
"requestAnimationFrameShim",
"setTimeout",
"contexts",
"oldWindowLoad",
"onload",
"didScroll",
"didResize",
"oldScroll",
"scrollLeft",
"y",
"waypoints",
"vertical",
"waypointContextKey",
"windowContext",
"createThrottledScrollHandler",
"createThrottledResizeHandler",
"checkEmpty",
"horizontalEmpty",
"isEmptyObject",
"verticalEmpty",
"isWindow",
"off",
"resizeHandler",
"handleResize",
"requestAnimationFrame",
"scrollHandler",
"handleScroll",
"isTouch",
"triggeredGroups",
"axes",
"newScroll",
"forward",
"backward",
"axisKey",
"wasBeforeTriggerPoint",
"nowAfterTriggerPoint",
"groupKey",
"flushTriggers",
"contextOffset",
"contextScroll",
"contextDimension",
"offsetProp",
"contextModifier",
"wasBeforeScroll",
"nowAfterScroll",
"triggeredForward",
"adjustment",
"oldTriggerPoint",
"elementOffset",
"freshWaypoint",
"parseFloat",
"ceil",
"floor",
"findByElement",
"contextId",
"mozRequestAnimationFrame",
"webkitRequestAnimationFrame",
"byTriggerPoint",
"a",
"b",
"byReverseTriggerPoint",
"groups",
"clearTriggerQueues",
"triggerQueues",
"up",
"down",
"sort",
"index",
"inArray",
"splice",
"last",
"jQuery",
"JQueryAdapter",
"$element",
"Array",
"createExtension",
"framework",
"overrides",
"isFunction",
"Zepto",
"__webpack_module_cache__",
"inProgress",
"dataWebpackPrefix",
"loadStylesheet",
"installedCssChunks",
"__webpack_require__",
"moduleId",
"cachedModule",
"__webpack_modules__",
"m",
"n",
"getter",
"__esModule",
"d",
"definition",
"o",
"defineProperty",
"enumerable",
"f",
"chunkId",
"all",
"reduce",
"promises",
"u",
"miniCssF",
"globalThis",
"l",
"url",
"script",
"needAttach",
"scripts",
"getElementsByTagName",
"getAttribute",
"createElement",
"charset",
"timeout",
"nc",
"setAttribute",
"src",
"onScriptComplete",
"onerror",
"clearTimeout",
"doneFns",
"parentNode",
"removeChild",
"bind",
"head",
"appendChild",
"r",
"p",
"href",
"fullhref",
"existingLinkTags",
"dataHref",
"tag",
"rel",
"existingStyleTags",
"findStylesheet",
"linkTag",
"errorType",
"realHref",
"code",
"request",
"createStylesheet",
"679",
"miniCss",
"installedChunks",
"installedChunkData",
"promise",
"realSrc",
"message",
"webpackJsonpCallback",
"parentChunkLoadingFunction",
"chunkIds",
"moreModules",
"chunkLoadingGlobal"
],
"mappings": "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",
"file": "js/revision.6298752558170be283db.js",
"sourcesContent": [
"(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"swh\"] = factory();\n\telse\n\t\troot[\"swh\"] = root[\"swh\"] || {}, root[\"swh\"][\"revision\"] = factory();\n})(self, function() {\nreturn ",
"function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nfunction _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}\n\nmodule.exports = _asyncToGenerator;",
"/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n// This method of obtaining a reference to the global object needs to be\n// kept identical to the way it is obtained in runtime.js\nvar g = (function() {\n return this || (typeof self === \"object\" && self);\n})() || Function(\"return this\")();\n\n// Use `getOwnPropertyNames` because not all browsers support calling\n// `hasOwnProperty` on the global `self` object in a worker. See #183.\nvar hadRuntime = g.regeneratorRuntime &&\n Object.getOwnPropertyNames(g).indexOf(\"regeneratorRuntime\") >= 0;\n\n// Save the old regeneratorRuntime in case it needs to be restored later.\nvar oldRuntime = hadRuntime && g.regeneratorRuntime;\n\n// Force reevalutation of runtime.js.\ng.regeneratorRuntime = undefined;\n\nmodule.exports = require(\"./runtime\");\n\nif (hadRuntime) {\n // Restore the original runtime.\n g.regeneratorRuntime = oldRuntime;\n} else {\n // Remove the global property added by runtime.js.\n try {\n delete g.regeneratorRuntime;\n } catch(e) {\n g.regeneratorRuntime = undefined;\n }\n}\n",
"/**\n * Copyright (c) 2014-present, Facebook, Inc.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\n!(function(global) {\n \"use strict\";\n\n var Op = Object.prototype;\n var hasOwn = Op.hasOwnProperty;\n var undefined; // More compressible than void 0.\n var $Symbol = typeof Symbol === \"function\" ? Symbol : {};\n var iteratorSymbol = $Symbol.iterator || \"@@iterator\";\n var asyncIteratorSymbol = $Symbol.asyncIterator || \"@@asyncIterator\";\n var toStringTagSymbol = $Symbol.toStringTag || \"@@toStringTag\";\n\n var inModule = typeof module === \"object\";\n var runtime = global.regeneratorRuntime;\n if (runtime) {\n if (inModule) {\n // If regeneratorRuntime is defined globally and we're in a module,\n // make the exports object identical to regeneratorRuntime.\n module.exports = runtime;\n }\n // Don't bother evaluating the rest of this file if the runtime was\n // already defined globally.\n return;\n }\n\n // Define the runtime globally (as expected by generated code) as either\n // module.exports (if we're in a module) or a new, empty object.\n runtime = global.regeneratorRuntime = inModule ? module.exports : {};\n\n function wrap(innerFn, outerFn, self, tryLocsList) {\n // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator.\n var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;\n var generator = Object.create(protoGenerator.prototype);\n var context = new Context(tryLocsList || []);\n\n // The ._invoke method unifies the implementations of the .next,\n // .throw, and .return methods.\n generator._invoke = makeInvokeMethod(innerFn, self, context);\n\n return generator;\n }\n runtime.wrap = wrap;\n\n // Try/catch helper to minimize deoptimizations. Returns a completion\n // record like context.tryEntries[i].completion. This interface could\n // have been (and was previously) designed to take a closure to be\n // invoked without arguments, but in all the cases we care about we\n // already have an existing method we want to call, so there's no need\n // to create a new function object. We can even get away with assuming\n // the method takes exactly one argument, since that happens to be true\n // in every case, so we don't have to touch the arguments object. The\n // only additional allocation required is the completion record, which\n // has a stable shape and so hopefully should be cheap to allocate.\n function tryCatch(fn, obj, arg) {\n try {\n return { type: \"normal\", arg: fn.call(obj, arg) };\n } catch (err) {\n return { type: \"throw\", arg: err };\n }\n }\n\n var GenStateSuspendedStart = \"suspendedStart\";\n var GenStateSuspendedYield = \"suspendedYield\";\n var GenStateExecuting = \"executing\";\n var GenStateCompleted = \"completed\";\n\n // Returning this object from the innerFn has the same effect as\n // breaking out of the dispatch switch statement.\n var ContinueSentinel = {};\n\n // Dummy constructor functions that we use as the .constructor and\n // .constructor.prototype properties for functions that return Generator\n // objects. For full spec compliance, you may wish to configure your\n // minifier not to mangle the names of these two functions.\n function Generator() {}\n function GeneratorFunction() {}\n function GeneratorFunctionPrototype() {}\n\n // This is a polyfill for %IteratorPrototype% for environments that\n // don't natively support it.\n var IteratorPrototype = {};\n IteratorPrototype[iteratorSymbol] = function () {\n return this;\n };\n\n var getProto = Object.getPrototypeOf;\n var NativeIteratorPrototype = getProto && getProto(getProto(values([])));\n if (NativeIteratorPrototype &&\n NativeIteratorPrototype !== Op &&\n hasOwn.call(NativeIteratorPrototype, iteratorSymbol)) {\n // This environment has a native %IteratorPrototype%; use it instead\n // of the polyfill.\n IteratorPrototype = NativeIteratorPrototype;\n }\n\n var Gp = GeneratorFunctionPrototype.prototype =\n Generator.prototype = Object.create(IteratorPrototype);\n GeneratorFunction.prototype = Gp.constructor = GeneratorFunctionPrototype;\n GeneratorFunctionPrototype.constructor = GeneratorFunction;\n GeneratorFunctionPrototype[toStringTagSymbol] =\n GeneratorFunction.displayName = \"GeneratorFunction\";\n\n // Helper for defining the .next, .throw, and .return methods of the\n // Iterator interface in terms of a single ._invoke method.\n function defineIteratorMethods(prototype) {\n [\"next\", \"throw\", \"return\"].forEach(function(method) {\n prototype[method] = function(arg) {\n return this._invoke(method, arg);\n };\n });\n }\n\n runtime.isGeneratorFunction = function(genFun) {\n var ctor = typeof genFun === \"function\" && genFun.constructor;\n return ctor\n ? ctor === GeneratorFunction ||\n // For the native GeneratorFunction constructor, the best we can\n // do is to check its .name property.\n (ctor.displayName || ctor.name) === \"GeneratorFunction\"\n : false;\n };\n\n runtime.mark = function(genFun) {\n if (Object.setPrototypeOf) {\n Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);\n } else {\n genFun.__proto__ = GeneratorFunctionPrototype;\n if (!(toStringTagSymbol in genFun)) {\n genFun[toStringTagSymbol] = \"GeneratorFunction\";\n }\n }\n genFun.prototype = Object.create(Gp);\n return genFun;\n };\n\n // Within the body of any async function, `await x` is transformed to\n // `yield regeneratorRuntime.awrap(x)`, so that the runtime can test\n // `hasOwn.call(value, \"__await\")` to determine if the yielded value is\n // meant to be awaited.\n runtime.awrap = function(arg) {\n return { __await: arg };\n };\n\n function AsyncIterator(generator) {\n function invoke(method, arg, resolve, reject) {\n var record = tryCatch(generator[method], generator, arg);\n if (record.type === \"throw\") {\n reject(record.arg);\n } else {\n var result = record.arg;\n var value = result.value;\n if (value &&\n typeof value === \"object\" &&\n hasOwn.call(value, \"__await\")) {\n return Promise.resolve(value.__await).then(function(value) {\n invoke(\"next\", value, resolve, reject);\n }, function(err) {\n invoke(\"throw\", err, resolve, reject);\n });\n }\n\n return Promise.resolve(value).then(function(unwrapped) {\n // When a yielded Promise is resolved, its final value becomes\n // the .value of the Promise<{value,done}> result for the\n // current iteration.\n result.value = unwrapped;\n resolve(result);\n }, function(error) {\n // If a rejected Promise was yielded, throw the rejection back\n // into the async generator function so it can be handled there.\n return invoke(\"throw\", error, resolve, reject);\n });\n }\n }\n\n var previousPromise;\n\n function enqueue(method, arg) {\n function callInvokeWithMethodAndArg() {\n return new Promise(function(resolve, reject) {\n invoke(method, arg, resolve, reject);\n });\n }\n\n return previousPromise =\n // If enqueue has been called before, then we want to wait until\n // all previous Promises have been resolved before calling invoke,\n // so that results are always delivered in the correct order. If\n // enqueue has not been called before, then it is important to\n // call invoke immediately, without waiting on a callback to fire,\n // so that the async generator function has the opportunity to do\n // any necessary setup in a predictable way. This predictability\n // is why the Promise constructor synchronously invokes its\n // executor callback, and why async functions synchronously\n // execute code before the first await. Since we implement simple\n // async functions in terms of async generators, it is especially\n // important to get this right, even though it requires care.\n previousPromise ? previousPromise.then(\n callInvokeWithMethodAndArg,\n // Avoid propagating failures to Promises returned by later\n // invocations of the iterator.\n callInvokeWithMethodAndArg\n ) : callInvokeWithMethodAndArg();\n }\n\n // Define the unified helper method that is used to implement .next,\n // .throw, and .return (see defineIteratorMethods).\n this._invoke = enqueue;\n }\n\n defineIteratorMethods(AsyncIterator.prototype);\n AsyncIterator.prototype[asyncIteratorSymbol] = function () {\n return this;\n };\n runtime.AsyncIterator = AsyncIterator;\n\n // Note that simple async functions are implemented on top of\n // AsyncIterator objects; they just return a Promise for the value of\n // the final result produced by the iterator.\n runtime.async = function(innerFn, outerFn, self, tryLocsList) {\n var iter = new AsyncIterator(\n wrap(innerFn, outerFn, self, tryLocsList)\n );\n\n return runtime.isGeneratorFunction(outerFn)\n ? iter // If outerFn is a generator, return the full iterator.\n : iter.next().then(function(result) {\n return result.done ? result.value : iter.next();\n });\n };\n\n function makeInvokeMethod(innerFn, self, context) {\n var state = GenStateSuspendedStart;\n\n return function invoke(method, arg) {\n if (state === GenStateExecuting) {\n throw new Error(\"Generator is already running\");\n }\n\n if (state === GenStateCompleted) {\n if (method === \"throw\") {\n throw arg;\n }\n\n // Be forgiving, per 25.3.3.3.3 of the spec:\n // https://people.mozilla.org/~jorendorff/es6-draft.html#sec-generatorresume\n return doneResult();\n }\n\n context.method = method;\n context.arg = arg;\n\n while (true) {\n var delegate = context.delegate;\n if (delegate) {\n var delegateResult = maybeInvokeDelegate(delegate, context);\n if (delegateResult) {\n if (delegateResult === ContinueSentinel) continue;\n return delegateResult;\n }\n }\n\n if (context.method === \"next\") {\n // Setting context._sent for legacy support of Babel's\n // function.sent implementation.\n context.sent = context._sent = context.arg;\n\n } else if (context.method === \"throw\") {\n if (state === GenStateSuspendedStart) {\n state = GenStateCompleted;\n throw context.arg;\n }\n\n context.dispatchException(context.arg);\n\n } else if (context.method === \"return\") {\n context.abrupt(\"return\", context.arg);\n }\n\n state = GenStateExecuting;\n\n var record = tryCatch(innerFn, self, context);\n if (record.type === \"normal\") {\n // If an exception is thrown from innerFn, we leave state ===\n // GenStateExecuting and loop back for another invocation.\n state = context.done\n ? GenStateCompleted\n : GenStateSuspendedYield;\n\n if (record.arg === ContinueSentinel) {\n continue;\n }\n\n return {\n value: record.arg,\n done: context.done\n };\n\n } else if (record.type === \"throw\") {\n state = GenStateCompleted;\n // Dispatch the exception by looping back around to the\n // context.dispatchException(context.arg) call above.\n context.method = \"throw\";\n context.arg = record.arg;\n }\n }\n };\n }\n\n // Call delegate.iterator[context.method](context.arg) and handle the\n // result, either by returning a { value, done } result from the\n // delegate iterator, or by modifying context.method and context.arg,\n // setting context.delegate to null, and returning the ContinueSentinel.\n function maybeInvokeDelegate(delegate, context) {\n var method = delegate.iterator[context.method];\n if (method === undefined) {\n // A .throw or .return when the delegate iterator has no .throw\n // method always terminates the yield* loop.\n context.delegate = null;\n\n if (context.method === \"throw\") {\n if (delegate.iterator.return) {\n // If the delegate iterator has a return method, give it a\n // chance to clean up.\n context.method = \"return\";\n context.arg = undefined;\n maybeInvokeDelegate(delegate, context);\n\n if (context.method === \"throw\") {\n // If maybeInvokeDelegate(context) changed context.method from\n // \"return\" to \"throw\", let that override the TypeError below.\n return ContinueSentinel;\n }\n }\n\n context.method = \"throw\";\n context.arg = new TypeError(\n \"The iterator does not provide a 'throw' method\");\n }\n\n return ContinueSentinel;\n }\n\n var record = tryCatch(method, delegate.iterator, context.arg);\n\n if (record.type === \"throw\") {\n context.method = \"throw\";\n context.arg = record.arg;\n context.delegate = null;\n return ContinueSentinel;\n }\n\n var info = record.arg;\n\n if (! info) {\n context.method = \"throw\";\n context.arg = new TypeError(\"iterator result is not an object\");\n context.delegate = null;\n return ContinueSentinel;\n }\n\n if (info.done) {\n // Assign the result of the finished delegate to the temporary\n // variable specified by delegate.resultName (see delegateYield).\n context[delegate.resultName] = info.value;\n\n // Resume execution at the desired location (see delegateYield).\n context.next = delegate.nextLoc;\n\n // If context.method was \"throw\" but the delegate handled the\n // exception, let the outer generator proceed normally. If\n // context.method was \"next\", forget context.arg since it has been\n // \"consumed\" by the delegate iterator. If context.method was\n // \"return\", allow the original .return call to continue in the\n // outer generator.\n if (context.method !== \"return\") {\n context.method = \"next\";\n context.arg = undefined;\n }\n\n } else {\n // Re-yield the result returned by the delegate method.\n return info;\n }\n\n // The delegate iterator is finished, so forget it and continue with\n // the outer generator.\n context.delegate = null;\n return ContinueSentinel;\n }\n\n // Define Generator.prototype.{next,throw,return} in terms of the\n // unified ._invoke helper method.\n defineIteratorMethods(Gp);\n\n Gp[toStringTagSymbol] = \"Generator\";\n\n // A Generator should always return itself as the iterator object when the\n // @@iterator function is called on it. Some browsers' implementations of the\n // iterator prototype chain incorrectly implement this, causing the Generator\n // object to not be returned from this call. This ensures that doesn't happen.\n // See https://github.com/facebook/regenerator/issues/274 for more details.\n Gp[iteratorSymbol] = function() {\n return this;\n };\n\n Gp.toString = function() {\n return \"[object Generator]\";\n };\n\n function pushTryEntry(locs) {\n var entry = { tryLoc: locs[0] };\n\n if (1 in locs) {\n entry.catchLoc = locs[1];\n }\n\n if (2 in locs) {\n entry.finallyLoc = locs[2];\n entry.afterLoc = locs[3];\n }\n\n this.tryEntries.push(entry);\n }\n\n function resetTryEntry(entry) {\n var record = entry.completion || {};\n record.type = \"normal\";\n delete record.arg;\n entry.completion = record;\n }\n\n function Context(tryLocsList) {\n // The root entry object (effectively a try statement without a catch\n // or a finally block) gives us a place to store values thrown from\n // locations where there is no enclosing try statement.\n this.tryEntries = [{ tryLoc: \"root\" }];\n tryLocsList.forEach(pushTryEntry, this);\n this.reset(true);\n }\n\n runtime.keys = function(object) {\n var keys = [];\n for (var key in object) {\n keys.push(key);\n }\n keys.reverse();\n\n // Rather than returning an object with a next method, we keep\n // things simple and return the next function itself.\n return function next() {\n while (keys.length) {\n var key = keys.pop();\n if (key in object) {\n next.value = key;\n next.done = false;\n return next;\n }\n }\n\n // To avoid creating an additional object, we just hang the .value\n // and .done properties off the next function object itself. This\n // also ensures that the minifier will not anonymize the function.\n next.done = true;\n return next;\n };\n };\n\n function values(iterable) {\n if (iterable) {\n var iteratorMethod = iterable[iteratorSymbol];\n if (iteratorMethod) {\n return iteratorMethod.call(iterable);\n }\n\n if (typeof iterable.next === \"function\") {\n return iterable;\n }\n\n if (!isNaN(iterable.length)) {\n var i = -1, next = function next() {\n while (++i < iterable.length) {\n if (hasOwn.call(iterable, i)) {\n next.value = iterable[i];\n next.done = false;\n return next;\n }\n }\n\n next.value = undefined;\n next.done = true;\n\n return next;\n };\n\n return next.next = next;\n }\n }\n\n // Return an iterator with no values.\n return { next: doneResult };\n }\n runtime.values = values;\n\n function doneResult() {\n return { value: undefined, done: true };\n }\n\n Context.prototype = {\n constructor: Context,\n\n reset: function(skipTempReset) {\n this.prev = 0;\n this.next = 0;\n // Resetting context._sent for legacy support of Babel's\n // function.sent implementation.\n this.sent = this._sent = undefined;\n this.done = false;\n this.delegate = null;\n\n this.method = \"next\";\n this.arg = undefined;\n\n this.tryEntries.forEach(resetTryEntry);\n\n if (!skipTempReset) {\n for (var name in this) {\n // Not sure about the optimal order of these conditions:\n if (name.charAt(0) === \"t\" &&\n hasOwn.call(this, name) &&\n !isNaN(+name.slice(1))) {\n this[name] = undefined;\n }\n }\n }\n },\n\n stop: function() {\n this.done = true;\n\n var rootEntry = this.tryEntries[0];\n var rootRecord = rootEntry.completion;\n if (rootRecord.type === \"throw\") {\n throw rootRecord.arg;\n }\n\n return this.rval;\n },\n\n dispatchException: function(exception) {\n if (this.done) {\n throw exception;\n }\n\n var context = this;\n function handle(loc, caught) {\n record.type = \"throw\";\n record.arg = exception;\n context.next = loc;\n\n if (caught) {\n // If the dispatched exception was caught by a catch block,\n // then let that catch block handle the exception normally.\n context.method = \"next\";\n context.arg = undefined;\n }\n\n return !! caught;\n }\n\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n var record = entry.completion;\n\n if (entry.tryLoc === \"root\") {\n // Exception thrown outside of any try block that could handle\n // it, so set the completion value of the entire function to\n // throw the exception.\n return handle(\"end\");\n }\n\n if (entry.tryLoc <= this.prev) {\n var hasCatch = hasOwn.call(entry, \"catchLoc\");\n var hasFinally = hasOwn.call(entry, \"finallyLoc\");\n\n if (hasCatch && hasFinally) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n } else if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else if (hasCatch) {\n if (this.prev < entry.catchLoc) {\n return handle(entry.catchLoc, true);\n }\n\n } else if (hasFinally) {\n if (this.prev < entry.finallyLoc) {\n return handle(entry.finallyLoc);\n }\n\n } else {\n throw new Error(\"try statement without catch or finally\");\n }\n }\n }\n },\n\n abrupt: function(type, arg) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc <= this.prev &&\n hasOwn.call(entry, \"finallyLoc\") &&\n this.prev < entry.finallyLoc) {\n var finallyEntry = entry;\n break;\n }\n }\n\n if (finallyEntry &&\n (type === \"break\" ||\n type === \"continue\") &&\n finallyEntry.tryLoc <= arg &&\n arg <= finallyEntry.finallyLoc) {\n // Ignore the finally entry if control is not jumping to a\n // location outside the try/catch block.\n finallyEntry = null;\n }\n\n var record = finallyEntry ? finallyEntry.completion : {};\n record.type = type;\n record.arg = arg;\n\n if (finallyEntry) {\n this.method = \"next\";\n this.next = finallyEntry.finallyLoc;\n return ContinueSentinel;\n }\n\n return this.complete(record);\n },\n\n complete: function(record, afterLoc) {\n if (record.type === \"throw\") {\n throw record.arg;\n }\n\n if (record.type === \"break\" ||\n record.type === \"continue\") {\n this.next = record.arg;\n } else if (record.type === \"return\") {\n this.rval = this.arg = record.arg;\n this.method = \"return\";\n this.next = \"end\";\n } else if (record.type === \"normal\" && afterLoc) {\n this.next = afterLoc;\n }\n\n return ContinueSentinel;\n },\n\n finish: function(finallyLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.finallyLoc === finallyLoc) {\n this.complete(entry.completion, entry.afterLoc);\n resetTryEntry(entry);\n return ContinueSentinel;\n }\n }\n },\n\n \"catch\": function(tryLoc) {\n for (var i = this.tryEntries.length - 1; i >= 0; --i) {\n var entry = this.tryEntries[i];\n if (entry.tryLoc === tryLoc) {\n var record = entry.completion;\n if (record.type === \"throw\") {\n var thrown = record.arg;\n resetTryEntry(entry);\n }\n return thrown;\n }\n }\n\n // The context.catch method must only be called with a location\n // argument that corresponds to a known catch block.\n throw new Error(\"illegal catch attempt\");\n },\n\n delegateYield: function(iterable, resultName, nextLoc) {\n this.delegate = {\n iterator: values(iterable),\n resultName: resultName,\n nextLoc: nextLoc\n };\n\n if (this.method === \"next\") {\n // Deliberately forget the last sent value so that we don't\n // accidentally pass it on to the delegate.\n this.arg = undefined;\n }\n\n return ContinueSentinel;\n }\n };\n})(\n // In sloppy mode, unbound `this` refers to the global object, fallback to\n // Function constructor if we're in global strict mode. That is sadly a form\n // of indirect eval which violates Content Security Policy.\n (function() {\n return this || (typeof self === \"object\" && self);\n })() || Function(\"return this\")()\n);\n",
"module.exports = require(\"regenerator-runtime\");\n",
"/**\n * Copyright (C) 2018-2020 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nimport 'waypoints/lib/jquery.waypoints';\n\nimport {swhSpinnerSrc} from 'utils/constants';\nimport {removeUrlFragment} from 'utils/functions';\n\nimport diffPanelTemplate from './diff-panel.ejs';\n\n// number of changed files in the revision\nlet changes = null;\nlet nbChangedFiles = 0;\n// to track the number of already computed files diffs\nlet nbDiffsComputed = 0;\n\n// the no newline at end of file marker from Github\nlet noNewLineMarker = '<span class=\"no-nl-marker\" title=\"No newline at end of file\">' +\n '<svg aria-hidden=\"true\" height=\"16\" version=\"1.1\" viewBox=\"0 0 16 16\" width=\"16\">' +\n '<path fill-rule=\"evenodd\" d=\"M16 5v3c0 .55-.45 1-1 1h-3v2L9 8l3-3v2h2V5h2zM8 8c0 2.2-1.8 4-4 4s-4-1.8-4-4 1.8-4 4-4 4 1.8 4 4zM1.5 9.66L5.66 5.5C5.18 5.19 4.61 5 4 5 2.34 5 1 6.34 1 8c0 .61.19 1.17.5 1.66zM7 8c0-.61-.19-1.17-.5-1.66L2.34 10.5c.48.31 1.05.5 1.66.5 1.66 0 3-1.34 3-3z\"></path>' +\n '</svg>' +\n '</span>';\n\n// to track the total number of added lines in files diffs\nlet nbAdditions = 0;\n// to track the total number of deleted lines in files diffs\nlet nbDeletions = 0;\n// to track the already computed diffs by id\nlet computedDiffs = {};\n// map a diff id to its computation url\nlet diffsUrls = {};\n// to keep track of diff lines to highlight\nlet startLines = null;\nlet endLines = null;\n// map max line numbers characters to diff\nconst diffMaxNumberChars = {};\n// focused diff for highlighting\nlet focusedDiff = null;\n// highlighting color\nconst lineHighlightColor = '#fdf3da';\n// might contain diff lines to highlight parsed from URL fragment\nlet selectedDiffLinesInfo;\n// URL fragment to append when switching to 'Changes' tab\nconst changesUrlFragment = '#swh-revision-changes';\n// current displayed tab name\nlet currentTabName = 'Files';\n\n// to check if a DOM element is in the viewport\nfunction isInViewport(elt) {\n let elementTop = $(elt).offset().top;\n let elementBottom = elementTop + $(elt).outerHeight();\n\n let viewportTop = $(window).scrollTop();\n let viewportBottom = viewportTop + $(window).height();\n\n return elementBottom > viewportTop && elementTop < viewportBottom;\n}\n\n// to format the diffs line numbers\nexport function formatDiffLineNumbers(diffId, fromLine, toLine) {\n const maxNumberChars = diffMaxNumberChars[diffId];\n const fromLineStr = toLnStr(fromLine);\n const toLineStr = toLnStr(toLine);\n let ret = '';\n for (let i = 0; i < (maxNumberChars - fromLineStr.length); ++i) {\n ret += ' ';\n }\n ret += fromLineStr;\n ret += ' ';\n for (let i = 0; i < (maxNumberChars - toLineStr.length); ++i) {\n ret += ' ';\n }\n ret += toLineStr;\n return ret;\n}\n\nfunction parseDiffHunkRangeIfAny(lineText) {\n let baseFromLine, baseToLine;\n if (lineText.startsWith('@@')) {\n let linesInfoRegExp = new RegExp(/^@@ -(\\d+),(\\d+) \\+(\\d+),(\\d+) @@$/gm);\n let linesInfoRegExp2 = new RegExp(/^@@ -(\\d+) \\+(\\d+),(\\d+) @@$/gm);\n let linesInfoRegExp3 = new RegExp(/^@@ -(\\d+),(\\d+) \\+(\\d+) @@$/gm);\n let linesInfoRegExp4 = new RegExp(/^@@ -(\\d+) \\+(\\d+) @@$/gm);\n let linesInfo = linesInfoRegExp.exec(lineText);\n let linesInfo2 = linesInfoRegExp2.exec(lineText);\n let linesInfo3 = linesInfoRegExp3.exec(lineText);\n let linesInfo4 = linesInfoRegExp4.exec(lineText);\n if (linesInfo) {\n baseFromLine = parseInt(linesInfo[1]) - 1;\n baseToLine = parseInt(linesInfo[3]) - 1;\n } else if (linesInfo2) {\n baseFromLine = parseInt(linesInfo2[1]) - 1;\n baseToLine = parseInt(linesInfo2[2]) - 1;\n } else if (linesInfo3) {\n baseFromLine = parseInt(linesInfo3[1]) - 1;\n baseToLine = parseInt(linesInfo3[3]) - 1;\n } else if (linesInfo4) {\n baseFromLine = parseInt(linesInfo4[1]) - 1;\n baseToLine = parseInt(linesInfo4[2]) - 1;\n }\n }\n if (baseFromLine !== undefined) {\n return [baseFromLine, baseToLine];\n } else {\n return null;\n }\n}\n\nfunction toLnInt(lnStr) {\n return lnStr ? parseInt(lnStr) : 0;\n};\n\nfunction toLnStr(lnInt) {\n return lnInt ? lnInt.toString() : '';\n};\n\n// parse diff line numbers to an int array [from, to]\nexport function parseDiffLineNumbers(lineNumbersStr, from, to) {\n let lines;\n if (!from && !to) {\n lines = lineNumbersStr.replace(/[ ]+/g, ' ').split(' ');\n if (lines.length > 2) {\n lines.shift();\n }\n lines = lines.map(x => toLnInt(x));\n } else {\n let lineNumber = toLnInt(lineNumbersStr.trim());\n if (from) {\n lines = [lineNumber, 0];\n } else if (to) {\n lines = [0, lineNumber];\n }\n }\n return lines;\n}\n\n// serialize selected line numbers range to string for URL fragment\nexport function selectedDiffLinesToFragment(startLines, endLines, unified) {\n let selectedLinesFragment = '';\n selectedLinesFragment += `F${startLines[0] || 0}`;\n selectedLinesFragment += `T${startLines[1] || 0}`;\n selectedLinesFragment += `-F${endLines[0] || 0}`;\n selectedLinesFragment += `T${endLines[1] || 0}`;\n if (unified) {\n selectedLinesFragment += '-unified';\n } else {\n selectedLinesFragment += '-split';\n }\n return selectedLinesFragment;\n}\n\n// parse selected lines from URL fragment\nexport function fragmentToSelectedDiffLines(fragment) {\n const RE_LINES = /F([0-9]+)T([0-9]+)-F([0-9]+)T([0-9]+)-([a-z]+)/;\n const matchObj = RE_LINES.exec(fragment);\n if (matchObj.length === 6) {\n return {\n startLines: [parseInt(matchObj[1]), parseInt(matchObj[2])],\n endLines: [parseInt(matchObj[3]), parseInt(matchObj[4])],\n unified: matchObj[5] === 'unified'\n };\n } else {\n return null;\n }\n}\n\n// function to highlight a single diff line\nfunction highlightDiffLine(diffId, i) {\n let line = $(`#${diffId} .hljs-ln-line[data-line-number=\"${i}\"]`);\n let lineNumbers = $(`#${diffId} .hljs-ln-numbers[data-line-number=\"${i}\"]`);\n lineNumbers.css('color', 'black');\n lineNumbers.css('font-weight', 'bold');\n line.css('background-color', lineHighlightColor);\n line.css('mix-blend-mode', 'multiply');\n return line;\n}\n\n// function to reset highlighting\nfunction resetHighlightedDiffLines(resetVars = true) {\n if (resetVars) {\n focusedDiff = null;\n startLines = null;\n endLines = null;\n }\n $('.hljs-ln-line[data-line-number]').css('background-color', 'initial');\n $('.hljs-ln-line[data-line-number]').css('mix-blend-mode', 'initial');\n $('.hljs-ln-numbers[data-line-number]').css('color', '#aaa');\n $('.hljs-ln-numbers[data-line-number]').css('font-weight', 'initial');\n if (currentTabName === 'Changes' && window.location.hash !== changesUrlFragment) {\n window.history.replaceState('', document.title,\n window.location.pathname + window.location.search + changesUrlFragment);\n }\n}\n\n// highlight lines in a diff, return first highlighted line numbers element\nfunction highlightDiffLines(diffId, startLines, endLines, unified) {\n let firstHighlightedLine;\n // unified diff case\n if (unified) {\n let start = formatDiffLineNumbers(diffId, startLines[0], startLines[1]);\n let end = formatDiffLineNumbers(diffId, endLines[0], endLines[1]);\n\n const startLine = $(`#${diffId} .hljs-ln-line[data-line-number=\"${start}\"]`);\n const endLine = $(`#${diffId} .hljs-ln-line[data-line-number=\"${end}\"]`);\n if ($(endLine).position().top < $(startLine).position().top) {\n [start, end] = [end, start];\n firstHighlightedLine = endLine;\n } else {\n firstHighlightedLine = startLine;\n }\n const lineTd = highlightDiffLine(diffId, start);\n let tr = $(lineTd).closest('tr');\n let lineNumbers = $(tr).children('.hljs-ln-line').data('line-number').toString();\n while (lineNumbers !== end) {\n if (lineNumbers.trim()) {\n highlightDiffLine(diffId, lineNumbers);\n }\n tr = $(tr).next();\n lineNumbers = $(tr).children('.hljs-ln-line').data('line-number').toString();\n }\n highlightDiffLine(diffId, end);\n\n // split diff case\n } else {\n // highlight only from part of the diff\n if (startLines[0] && endLines[0]) {\n const start = Math.min(startLines[0], endLines[0]);\n const end = Math.max(startLines[0], endLines[0]);\n for (let i = start; i <= end; ++i) {\n highlightDiffLine(`${diffId}-from`, i);\n }\n firstHighlightedLine = $(`#${diffId}-from .hljs-ln-line[data-line-number=\"${start}\"]`);\n // highlight only to part of the diff\n } else if (startLines[1] && endLines[1]) {\n const start = Math.min(startLines[1], endLines[1]);\n const end = Math.max(startLines[1], endLines[1]);\n for (let i = start; i <= end; ++i) {\n highlightDiffLine(`${diffId}-to`, i);\n }\n firstHighlightedLine = $(`#${diffId}-to .hljs-ln-line[data-line-number=\"${start}\"]`);\n // highlight both part of the diff\n } else {\n let left, right;\n if (startLines[0] && endLines[1]) {\n left = startLines[0];\n right = endLines[1];\n } else {\n left = endLines[0];\n right = startLines[1];\n }\n\n const leftLine = $(`#${diffId}-from .hljs-ln-line[data-line-number=\"${left}\"]`);\n const rightLine = $(`#${diffId}-to .hljs-ln-line[data-line-number=\"${right}\"]`);\n const leftLineAbove = $(leftLine).position().top < $(rightLine).position().top;\n\n if (leftLineAbove) {\n firstHighlightedLine = leftLine;\n } else {\n firstHighlightedLine = rightLine;\n }\n\n let fromTr = $(`#${diffId}-from tr`).first();\n let fromLn = $(fromTr).children('.hljs-ln-line').data('line-number');\n let toTr = $(`#${diffId}-to tr`).first();\n let toLn = $(toTr).children('.hljs-ln-line').data('line-number');\n let canHighlight = false;\n\n while (true) {\n if (leftLineAbove && fromLn === left) {\n canHighlight = true;\n } else if (!leftLineAbove && toLn === right) {\n canHighlight = true;\n }\n\n if (canHighlight && fromLn) {\n highlightDiffLine(`${diffId}-from`, fromLn);\n }\n\n if (canHighlight && toLn) {\n highlightDiffLine(`${diffId}-to`, toLn);\n }\n\n if ((leftLineAbove && toLn === right) || (!leftLineAbove && fromLn === left)) {\n break;\n }\n\n fromTr = $(fromTr).next();\n fromLn = $(fromTr).children('.hljs-ln-line').data('line-number');\n toTr = $(toTr).next();\n toLn = $(toTr).children('.hljs-ln-line').data('line-number');\n }\n\n }\n }\n\n let selectedLinesFragment = selectedDiffLinesToFragment(startLines, endLines, unified);\n window.location.hash = `diff_${diffId}+${selectedLinesFragment}`;\n return firstHighlightedLine;\n}\n\n// callback to switch from side-by-side diff to unified one\nexport function showUnifiedDiff(diffId) {\n $(`#${diffId}-split-diff`).css('display', 'none');\n $(`#${diffId}-unified-diff`).css('display', 'block');\n}\n\n// callback to switch from unified diff to side-by-side one\nexport function showSplitDiff(diffId) {\n $(`#${diffId}-unified-diff`).css('display', 'none');\n $(`#${diffId}-split-diff`).css('display', 'block');\n}\n\n// to compute diff and process it for display\nexport function computeDiff(diffUrl, diffId) {\n\n // force diff computation ?\n let force = diffUrl.indexOf('force=true') !== -1;\n\n // it no forced computation and diff already computed, do nothing\n if (!force && computedDiffs.hasOwnProperty(diffId)) {\n return;\n }\n\n function setLineNumbers(lnElt, lineNumbers) {\n $(lnElt).attr('data-line-number', lineNumbers || '');\n $(lnElt).children().attr('data-line-number', lineNumbers || '');\n $(lnElt).siblings().attr('data-line-number', lineNumbers || '');\n }\n\n // mark diff computation as already requested\n computedDiffs[diffId] = true;\n\n $(`#${diffId}-loading`).css('visibility', 'visible');\n\n // set spinner visible while requesting diff\n $(`#${diffId}-loading`).css('display', 'block');\n $(`#${diffId}-highlightjs`).css('display', 'none');\n\n // request diff computation and process it\n fetch(diffUrl)\n .then(response => response.json())\n .then(data => {\n // increment number of computed diffs\n ++nbDiffsComputed;\n // toggle the 'Compute all diffs' button if all diffs have been computed\n if (nbDiffsComputed === changes.length) {\n $('#swh-compute-all-diffs').addClass('active');\n }\n\n // Large diff (> threshold) are not automatically computed,\n // add a button to force its computation\n if (data.diff_str.indexOf('Large diff') === 0) {\n $(`#${diffId}`)[0].innerHTML = data.diff_str +\n `<br/><button class=\"btn btn-default btn-sm\" type=\"button\"\n onclick=\"swh.revision.computeDiff('${diffUrl}&force=true', '${diffId}')\">` +\n 'Request diff</button>';\n setDiffVisible(diffId);\n } else if (data.diff_str.indexOf('@@') !== 0) {\n $(`#${diffId}`).text(data.diff_str);\n setDiffVisible(diffId);\n } else {\n\n // prepare code highlighting\n $(`.${diffId}`).removeClass('nohighlight');\n $(`.${diffId}`).addClass(data.language);\n\n // set unified diff text\n $(`#${diffId}`).text(data.diff_str);\n\n // code highlighting for unified diff\n $(`#${diffId}`).each((i, elt) => {\n hljs.highlightElement(elt);\n hljs.lineNumbersElementSync(elt);\n });\n\n // process unified diff lines in order to generate side-by-side diffs text\n // but also compute line numbers for unified and side-by-side diffs\n let baseFromLine = '';\n let baseToLine = '';\n let fromToLines = [];\n let fromLines = [];\n let toLines = [];\n let maxNumberChars = 0;\n let diffFromStr = '';\n let diffToStr = '';\n let linesOffset = 0;\n\n $(`#${diffId} .hljs-ln-numbers`).each((i, lnElt) => {\n let lnText = lnElt.nextSibling.innerText;\n let linesInfo = parseDiffHunkRangeIfAny(lnText);\n let fromLine = '';\n let toLine = '';\n // parsed lines info from the diff output\n if (linesInfo) {\n baseFromLine = linesInfo[0];\n baseToLine = linesInfo[1];\n linesOffset = 0;\n diffFromStr += (lnText + '\\n');\n diffToStr += (lnText + '\\n');\n fromLines.push('');\n toLines.push('');\n // line removed in the from file\n } else if (lnText.length > 0 && lnText[0] === '-') {\n baseFromLine = baseFromLine + 1;\n fromLine = baseFromLine.toString();\n fromLines.push(fromLine);\n ++nbDeletions;\n diffFromStr += (lnText + '\\n');\n ++linesOffset;\n // line added in the to file\n } else if (lnText.length > 0 && lnText[0] === '+') {\n baseToLine = baseToLine + 1;\n toLine = baseToLine.toString();\n toLines.push(toLine);\n ++nbAdditions;\n diffToStr += (lnText + '\\n');\n --linesOffset;\n // line present in both files\n } else {\n baseFromLine = baseFromLine + 1;\n baseToLine = baseToLine + 1;\n fromLine = baseFromLine.toString();\n toLine = baseToLine.toString();\n for (let j = 0; j < Math.abs(linesOffset); ++j) {\n if (linesOffset > 0) {\n diffToStr += '\\n';\n toLines.push('');\n } else {\n diffFromStr += '\\n';\n fromLines.push('');\n }\n }\n linesOffset = 0;\n diffFromStr += (lnText + '\\n');\n diffToStr += (lnText + '\\n');\n toLines.push(toLine);\n fromLines.push(fromLine);\n }\n if (!baseFromLine) {\n fromLine = '';\n }\n if (!baseToLine) {\n toLine = '';\n }\n fromToLines[i] = [fromLine, toLine];\n maxNumberChars = Math.max(maxNumberChars, fromLine.length);\n maxNumberChars = Math.max(maxNumberChars, toLine.length);\n });\n\n diffMaxNumberChars[diffId] = maxNumberChars;\n\n // set side-by-side diffs text\n $(`#${diffId}-from`).text(diffFromStr);\n $(`#${diffId}-to`).text(diffToStr);\n\n // code highlighting for side-by-side diffs\n $(`#${diffId}-from, #${diffId}-to`).each((i, elt) => {\n hljs.highlightElement(elt);\n hljs.lineNumbersElementSync(elt);\n });\n\n // diff highlighting for added/removed lines on top of code highlighting\n $(`.${diffId} .hljs-ln-numbers`).each((i, lnElt) => {\n let lnText = lnElt.nextSibling.innerText;\n if (lnText.startsWith('@@')) {\n $(lnElt).parent().addClass('swh-diff-lines-info');\n let linesInfoText = $(lnElt).parent().find('.hljs-ln-code .hljs-ln-line').text();\n $(lnElt).parent().find('.hljs-ln-code .hljs-ln-line').children().remove();\n $(lnElt).parent().find('.hljs-ln-code .hljs-ln-line').text('');\n $(lnElt).parent().find('.hljs-ln-code .hljs-ln-line').append(`<span class=\"hljs-meta\">${linesInfoText}</span>`);\n } else if (lnText.length > 0 && lnText[0] === '-') {\n $(lnElt).parent().addClass('swh-diff-removed-line');\n } else if (lnText.length > 0 && lnText[0] === '+') {\n $(lnElt).parent().addClass('swh-diff-added-line');\n }\n });\n\n // set line numbers for unified diff\n $(`#${diffId} .hljs-ln-numbers`).each((i, lnElt) => {\n const lineNumbers = formatDiffLineNumbers(diffId, fromToLines[i][0], fromToLines[i][1]);\n setLineNumbers(lnElt, lineNumbers);\n });\n\n // set line numbers for the from side-by-side diff\n $(`#${diffId}-from .hljs-ln-numbers`).each((i, lnElt) => {\n setLineNumbers(lnElt, fromLines[i]);\n });\n\n // set line numbers for the to side-by-side diff\n $(`#${diffId}-to .hljs-ln-numbers`).each((i, lnElt) => {\n setLineNumbers(lnElt, toLines[i]);\n });\n\n // last processing:\n // - remove the '+' and '-' at the beginning of the diff lines\n // from code highlighting\n // - add the \"no new line at end of file marker\" if needed\n $(`.${diffId} .hljs-ln-code`).each((i, lnElt) => {\n if (lnElt.firstChild) {\n if (lnElt.firstChild.nodeName !== '#text') {\n let lineText = lnElt.firstChild.innerHTML;\n if (lineText[0] === '-' || lineText[0] === '+') {\n lnElt.firstChild.innerHTML = lineText.substr(1);\n let newTextNode = document.createTextNode(lineText[0]);\n $(lnElt).prepend(newTextNode);\n }\n }\n $(lnElt).contents().filter((i, elt) => {\n return elt.nodeType === 3; // Node.TEXT_NODE\n }).each((i, textNode) => {\n let swhNoNewLineMarker = '[swh-no-nl-marker]';\n if (textNode.textContent.indexOf(swhNoNewLineMarker) !== -1) {\n textNode.textContent = textNode.textContent.replace(swhNoNewLineMarker, '');\n $(lnElt).append($(noNewLineMarker));\n }\n });\n }\n });\n\n // hide the diff mode switch button in case of not generated diffs\n if (data.diff_str.indexOf('Diffs are not generated for non textual content') !== 0) {\n $(`#diff_${diffId} .diff-styles`).css('visibility', 'visible');\n }\n\n setDiffVisible(diffId);\n\n // highlight diff lines if provided in URL fragment\n if (selectedDiffLinesInfo &&\n selectedDiffLinesInfo.diffPanelId.indexOf(diffId) !== -1) {\n if (!selectedDiffLinesInfo.unified) {\n showSplitDiff(diffId);\n }\n const firstHighlightedLine = highlightDiffLines(\n diffId, selectedDiffLinesInfo.startLines,\n selectedDiffLinesInfo.endLines, selectedDiffLinesInfo.unified);\n\n $('html, body').animate(\n {\n scrollTop: firstHighlightedLine.offset().top - 50\n },\n {\n duration: 500\n }\n );\n }\n }\n });\n}\n\nfunction setDiffVisible(diffId) {\n // set the unified diff visible by default\n $(`#${diffId}-loading`).css('display', 'none');\n $(`#${diffId}-highlightjs`).css('display', 'block');\n\n // update displayed counters\n $('#swh-revision-lines-added').text(`${nbAdditions} additions`);\n $('#swh-revision-lines-deleted').text(`${nbDeletions} deletions`);\n $('#swh-nb-diffs-computed').text(nbDiffsComputed);\n\n // refresh the waypoints triggering diffs computation as\n // the DOM layout has been updated\n Waypoint.refreshAll();\n}\n\n// to compute all visible diffs in the viewport\nfunction computeVisibleDiffs() {\n $('.swh-file-diff-panel').each((i, elt) => {\n if (isInViewport(elt)) {\n let diffId = elt.id.replace('diff_', '');\n computeDiff(diffsUrls[diffId], diffId);\n }\n });\n}\n\nfunction genDiffPanel(diffData) {\n let diffPanelTitle = diffData.path;\n if (diffData.type === 'rename') {\n diffPanelTitle = `${diffData.from_path} &rarr; ${diffData.to_path}`;\n }\n return diffPanelTemplate({\n diffData: diffData,\n diffPanelTitle: diffPanelTitle,\n swhSpinnerSrc: swhSpinnerSrc\n });\n}\n\n// setup waypoints to request diffs computation on the fly while scrolling\nfunction setupWaypoints() {\n for (let i = 0; i < changes.length; ++i) {\n let diffData = changes[i];\n\n // create a waypoint that will trigger diff computation when\n // the top of the diff panel hits the bottom of the viewport\n $(`#diff_${diffData.id}`).waypoint({\n handler: function() {\n if (isInViewport(this.element)) {\n let diffId = this.element.id.replace('diff_', '');\n computeDiff(diffsUrls[diffId], diffId);\n this.destroy();\n }\n },\n offset: '100%'\n });\n\n // create a waypoint that will trigger diff computation when\n // the bottom of the diff panel hits the top of the viewport\n $(`#diff_${diffData.id}`).waypoint({\n handler: function() {\n if (isInViewport(this.element)) {\n let diffId = this.element.id.replace('diff_', '');\n computeDiff(diffsUrls[diffId], diffId);\n this.destroy();\n }\n },\n offset: function() {\n return -$(this.element).height();\n }\n });\n }\n Waypoint.refreshAll();\n}\n\nfunction scrollToDiffPanel(diffPanelId, setHash = true) {\n // disable waypoints while scrolling as we do not want to\n // launch computation of diffs the user is not interested in\n // (file changes list can be large)\n Waypoint.disableAll();\n\n $('html, body').animate(\n {\n scrollTop: $(diffPanelId).offset().top\n },\n {\n duration: 500,\n complete: () => {\n if (setHash) {\n window.location.hash = diffPanelId;\n }\n // enable waypoints back after scrolling\n Waypoint.enableAll();\n // compute diffs visible in the viewport\n computeVisibleDiffs();\n }\n });\n}\n\n// callback when the user clicks on the 'Compute all diffs' button\nexport function computeAllDiffs(event) {\n $(event.currentTarget).addClass('active');\n for (let diffId in diffsUrls) {\n if (diffsUrls.hasOwnProperty(diffId)) {\n computeDiff(diffsUrls[diffId], diffId);\n }\n }\n event.stopPropagation();\n}\n\nexport async function initRevisionDiff(revisionMessageBody, diffRevisionUrl) {\n\n await import(/* webpackChunkName: \"highlightjs\" */ 'utils/highlightjs');\n\n // callback when the 'Changes' tab is activated\n $(document).on('shown.bs.tab', 'a[data-toggle=\"tab\"]', e => {\n currentTabName = e.currentTarget.text.trim();\n if (currentTabName === 'Changes') {\n window.location.hash = changesUrlFragment;\n $('#readme-panel').css('display', 'none');\n\n if (changes) {\n return;\n }\n\n // request computation of revision file changes list\n // when navigating to the 'Changes' tab and add diff panels\n // to the DOM when receiving the result\n fetch(diffRevisionUrl)\n .then(response => response.json())\n .then(data => {\n changes = data.changes;\n nbChangedFiles = data.total_nb_changes;\n let changedFilesText = `${nbChangedFiles} changed file`;\n if (nbChangedFiles !== 1) {\n changedFilesText += 's';\n }\n $('#swh-revision-changed-files').text(changedFilesText);\n $('#swh-total-nb-diffs').text(changes.length);\n $('#swh-revision-changes-list pre')[0].innerHTML = data.changes_msg;\n\n $('#swh-revision-changes-loading').css('display', 'none');\n $('#swh-revision-changes-list pre').css('display', 'block');\n $('#swh-compute-all-diffs').css('visibility', 'visible');\n $('#swh-revision-changes-list').removeClass('in');\n\n if (nbChangedFiles > changes.length) {\n $('#swh-too-large-revision-diff').css('display', 'block');\n $('#swh-nb-loaded-diffs').text(changes.length);\n }\n\n for (let i = 0; i < changes.length; ++i) {\n let diffData = changes[i];\n diffsUrls[diffData.id] = diffData.diff_url;\n $('#swh-revision-diffs').append(genDiffPanel(diffData));\n }\n\n setupWaypoints();\n computeVisibleDiffs();\n\n if (selectedDiffLinesInfo) {\n scrollToDiffPanel(selectedDiffLinesInfo.diffPanelId, false);\n }\n\n });\n } else if (currentTabName === 'Files') {\n removeUrlFragment();\n $('#readme-panel').css('display', 'block');\n }\n });\n\n $(document).ready(() => {\n\n if (revisionMessageBody.length > 0) {\n $('#swh-revision-message').addClass('in');\n } else {\n $('#swh-collapse-revision-message').attr('data-toggle', '');\n }\n\n // callback when the user requests to scroll on a specific diff or back to top\n $('#swh-revision-changes-list a[href^=\"#\"], #back-to-top a[href^=\"#\"]').click(e => {\n let href = $.attr(e.currentTarget, 'href');\n scrollToDiffPanel(href);\n return false;\n });\n\n // click callback for highlighting diff lines\n $('body').click(evt => {\n\n if (currentTabName !== 'Changes') {\n return;\n }\n\n if (evt.target.classList.contains('hljs-ln-n')) {\n\n const diffId = $(evt.target).closest('code').prop('id');\n\n const from = diffId.indexOf('-from') !== -1;\n const to = diffId.indexOf('-to') !== -1;\n\n const lineNumbers = $(evt.target).data('line-number').toString();\n\n const currentDiff = diffId.replace('-from', '').replace('-to', '');\n if (!evt.shiftKey || currentDiff !== focusedDiff || !lineNumbers.trim()) {\n resetHighlightedDiffLines();\n focusedDiff = currentDiff;\n }\n if (currentDiff === focusedDiff && lineNumbers.trim()) {\n if (!evt.shiftKey) {\n startLines = parseDiffLineNumbers(lineNumbers, from, to);\n highlightDiffLines(currentDiff, startLines, startLines, !from && !to);\n } else if (startLines) {\n resetHighlightedDiffLines(false);\n endLines = parseDiffLineNumbers(lineNumbers, from, to);\n highlightDiffLines(currentDiff, startLines, endLines, !from && !to);\n }\n }\n\n } else {\n resetHighlightedDiffLines();\n }\n });\n\n // if an URL fragment for highlighting a diff is present\n // parse highlighting info and initiate diff loading\n const fragment = window.location.hash;\n if (fragment) {\n const split = fragment.split('+');\n if (split.length === 2) {\n selectedDiffLinesInfo = fragmentToSelectedDiffLines(split[1]);\n if (selectedDiffLinesInfo) {\n selectedDiffLinesInfo.diffPanelId = split[0];\n $(`.nav-tabs a[href=\"${changesUrlFragment}\"]`).tab('show');\n }\n }\n if (fragment === changesUrlFragment) {\n $(`.nav-tabs a[href=\"${changesUrlFragment}\"]`).tab('show');\n }\n }\n\n });\n\n}\n",
"/**\n * Copyright (C) 2019 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nexport function revsOrderingTypeClicked(event) {\n let urlParams = new URLSearchParams(window.location.search);\n let orderingType = $(event.target).val();\n if (orderingType) {\n urlParams.set('revs_ordering', $(event.target).val());\n } else if (urlParams.has('revs_ordering')) {\n urlParams.delete('revs_ordering');\n }\n window.location.search = urlParams.toString();\n}\n\nexport function initRevisionsLog() {\n $(document).ready(() => {\n let urlParams = new URLSearchParams(window.location.search);\n let revsOrderingType = urlParams.get('revs_ordering');\n if (revsOrderingType) {\n $(`:input[value=\"${revsOrderingType}\"]`).prop('checked', true);\n }\n });\n}\n",
"/**\n * Copyright (C) 2019 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\nimport {staticAsset} from 'utils/functions';\n\n// Constants defining Bootstrap Breakpoints\nexport const BREAKPOINT_SM = 768;\nexport const BREAKPOINT_MD = 992;\nexport const BREAKPOINT_LG = 1200;\n\nexport const swhSpinnerSrc = staticAsset('img/swh-spinner.gif');\n",
"/**\n * Copyright (C) 2018-2020 The Software Heritage developers\n * See the AUTHORS file at the top-level directory of this distribution\n * License: GNU Affero General Public License version 3, or any later version\n * See top-level LICENSE file for more information\n */\n\n// utility functions\n\nexport function handleFetchError(response) {\n if (!response.ok) {\n throw response;\n }\n return response;\n}\n\nexport function handleFetchErrors(responses) {\n for (let i = 0; i < responses.length; ++i) {\n if (!responses[i].ok) {\n throw responses[i];\n }\n }\n return responses;\n}\n\nexport function staticAsset(asset) {\n return `${__STATIC__}${asset}`;\n}\n\nexport function csrfPost(url, headers = {}, body = null) {\n headers['X-CSRFToken'] = Cookies.get('csrftoken');\n return fetch(url, {\n credentials: 'include',\n headers: headers,\n method: 'POST',\n body: body\n });\n}\n\nexport function isGitRepoUrl(url, pathPrefix = '/') {\n let allowedProtocols = ['http:', 'https:', 'git:'];\n if (allowedProtocols.find(protocol => protocol === url.protocol) === undefined) {\n return false;\n }\n if (!url.pathname.startsWith(pathPrefix)) {\n return false;\n }\n let re = new RegExp('[\\\\w\\\\.-]+\\\\/?(?!=.git)(?:\\\\.git\\\\/?)?$');\n return re.test(url.pathname.slice(pathPrefix.length));\n};\n\nexport function removeUrlFragment() {\n history.replaceState('', document.title, window.location.pathname + window.location.search);\n}\n\nexport function selectText(startNode, endNode) {\n let selection = window.getSelection();\n selection.removeAllRanges();\n let range = document.createRange();\n range.setStart(startNode, 0);\n if (endNode.nodeName !== '#text') {\n range.setEnd(endNode, endNode.childNodes.length);\n } else {\n range.setEnd(endNode, endNode.textContent.length);\n }\n selection.addRange(range);\n}\n\nexport function htmlAlert(type, message, closable = false) {\n let closeButton = '';\n let extraClasses = '';\n if (closable) {\n closeButton =\n `<button type=\"button\" class=\"close\" data-dismiss=\"alert\" aria-label=\"Close\">\n <span aria-hidden=\"true\">&times;</span>\n </button>`;\n extraClasses = 'alert-dismissible';\n }\n return `<div class=\"alert alert-${type} ${extraClasses}\" role=\"alert\">${message}${closeButton}</div>`;\n}\n",
"module.exports = function anonymous(locals, escapeFn, include, rethrow\n) {\nescapeFn = escapeFn || function (markup) {\n return markup == undefined\n ? ''\n : String(markup)\n .replace(_MATCH_HTML, encode_char);\n};\nvar _ENCODE_HTML_RULES = {\n \"&\": \"&amp;\"\n , \"<\": \"&lt;\"\n , \">\": \"&gt;\"\n , '\"': \"&#34;\"\n , \"'\": \"&#39;\"\n }\n , _MATCH_HTML = /[&<>'\"]/g;\nfunction encode_char(c) {\n return _ENCODE_HTML_RULES[c] || c;\n};\n;\n var __output = \"\";\n function __append(s) { if (s !== undefined && s !== null) __output += s }\n with (locals || {}) {\n ; __append(\"\\n<div id=\\\"diff_\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"\\\" class=\\\"card swh-file-diff-panel\\\">\\n <div class=\\\"card-header bg-gray-light border-bottom-0\\\">\\n <a data-toggle=\\\"collapse\\\" href=\\\"#diff_\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"_content\\\">\\n <div class=\\\"float-left swh-title-color\\\">\\n <strong>\")\n ; __append(escapeFn( diffPanelTitle ))\n ; __append(\"</strong>\\n </div>\\n </a>\\n <div class=\\\"ml-auto float-right\\\">\\n <div class=\\\"btn-group btn-group-toggle diff-styles\\\" data-toggle=\\\"buttons\\\" style=\\\"visibility: hidden;\\\">\\n <label class=\\\"btn btn-default btn-sm form-check-label active unified-diff-button\\\" onclick=\\\"swh.revision.showUnifiedDiff('\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"')\\\">\\n <input type=\\\"radio\\\" name=\\\"diffs-switch\\\" id=\\\"unified\\\" autocomplete=\\\"off\\\" checked=\\\"checked\\\"> Unified\\n </label>\\n <label class=\\\"btn btn-default btn-sm form-check-label split-diff-button\\\" onclick=\\\"swh.revision.showSplitDiff('\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"')\\\">\\n <input type=\\\"radio\\\" name=\\\"diffs-switch\\\" id=\\\"side-by-side\\\" autocomplete=\\\"off\\\"> Side-by-side\\n </label>\\n </div>\\n <a href=\\\"\")\n ; __append(escapeFn( diffData.content_url ))\n ; __append(\"\\\" class=\\\"btn btn-default btn-sm\\\" role=\\\"button\\\">View file</a>\\n </div>\\n <div class=\\\"clearfix\\\"></div>\\n </div>\\n <div id=\\\"diff_\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"_content\\\" class=\\\"collapse show\\\">\\n <div class=\\\"swh-diff-loading text-center\\\" id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"-loading\\\" style=\\\"visibility: hidden;\\\">\\n <img src=\\\"\")\n ; __append(escapeFn( swhSpinnerSrc ))\n ; __append(\"\\\">\\n <p>Loading diff ...</p>\\n </div>\\n <div class=\\\"highlightjs swh-content\\\" style=\\\"display: none;\\\" id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"-highlightjs\\\">\\n <div id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"-unified-diff\\\">\\n <pre><code class=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"\\\" id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"\\\"></code></pre>\\n </div>\\n <div style=\\\"width: 100%; display: none;\\\" id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"-split-diff\\\">\\n <pre class=\\\"float-left\\\" style=\\\"width: 50%;\\\"><code class=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"\\\" id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"-from\\\"></code></pre>\\n <pre style=\\\"width: 50%;\\\"><code class=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"\\\" id=\\\"\")\n ; __append(escapeFn( diffData.id ))\n ; __append(\"-to\\\"></code></pre>\\n </div>\\n </div>\\n </div>\\n</div>\")\n }\n return __output;\n\n}",
"/*!\nWaypoints - 4.0.1\nCopyright \u00a9 2011-2016 Caleb Troughton\nLicensed under the MIT license.\nhttps://github.com/imakewebthings/waypoints/blob/master/licenses.txt\n*/\n(function() {\n 'use strict'\n\n var keyCounter = 0\n var allWaypoints = {}\n\n /* http://imakewebthings.com/waypoints/api/waypoint */\n function Waypoint(options) {\n if (!options) {\n throw new Error('No options passed to Waypoint constructor')\n }\n if (!options.element) {\n throw new Error('No element option passed to Waypoint constructor')\n }\n if (!options.handler) {\n throw new Error('No handler option passed to Waypoint constructor')\n }\n\n this.key = 'waypoint-' + keyCounter\n this.options = Waypoint.Adapter.extend({}, Waypoint.defaults, options)\n this.element = this.options.element\n this.adapter = new Waypoint.Adapter(this.element)\n this.callback = options.handler\n this.axis = this.options.horizontal ? 'horizontal' : 'vertical'\n this.enabled = this.options.enabled\n this.triggerPoint = null\n this.group = Waypoint.Group.findOrCreate({\n name: this.options.group,\n axis: this.axis\n })\n this.context = Waypoint.Context.findOrCreateByElement(this.options.context)\n\n if (Waypoint.offsetAliases[this.options.offset]) {\n this.options.offset = Waypoint.offsetAliases[this.options.offset]\n }\n this.group.add(this)\n this.context.add(this)\n allWaypoints[this.key] = this\n keyCounter += 1\n }\n\n /* Private */\n Waypoint.prototype.queueTrigger = function(direction) {\n this.group.queueTrigger(this, direction)\n }\n\n /* Private */\n Waypoint.prototype.trigger = function(args) {\n if (!this.enabled) {\n return\n }\n if (this.callback) {\n this.callback.apply(this, args)\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/destroy */\n Waypoint.prototype.destroy = function() {\n this.context.remove(this)\n this.group.remove(this)\n delete allWaypoints[this.key]\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/disable */\n Waypoint.prototype.disable = function() {\n this.enabled = false\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/enable */\n Waypoint.prototype.enable = function() {\n this.context.refresh()\n this.enabled = true\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/next */\n Waypoint.prototype.next = function() {\n return this.group.next(this)\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/previous */\n Waypoint.prototype.previous = function() {\n return this.group.previous(this)\n }\n\n /* Private */\n Waypoint.invokeAll = function(method) {\n var allWaypointsArray = []\n for (var waypointKey in allWaypoints) {\n allWaypointsArray.push(allWaypoints[waypointKey])\n }\n for (var i = 0, end = allWaypointsArray.length; i < end; i++) {\n allWaypointsArray[i][method]()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/destroy-all */\n Waypoint.destroyAll = function() {\n Waypoint.invokeAll('destroy')\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/disable-all */\n Waypoint.disableAll = function() {\n Waypoint.invokeAll('disable')\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/enable-all */\n Waypoint.enableAll = function() {\n Waypoint.Context.refreshAll()\n for (var waypointKey in allWaypoints) {\n allWaypoints[waypointKey].enabled = true\n }\n return this\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/refresh-all */\n Waypoint.refreshAll = function() {\n Waypoint.Context.refreshAll()\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/viewport-height */\n Waypoint.viewportHeight = function() {\n return window.innerHeight || document.documentElement.clientHeight\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/viewport-width */\n Waypoint.viewportWidth = function() {\n return document.documentElement.clientWidth\n }\n\n Waypoint.adapters = []\n\n Waypoint.defaults = {\n context: window,\n continuous: true,\n enabled: true,\n group: 'default',\n horizontal: false,\n offset: 0\n }\n\n Waypoint.offsetAliases = {\n 'bottom-in-view': function() {\n return this.context.innerHeight() - this.adapter.outerHeight()\n },\n 'right-in-view': function() {\n return this.context.innerWidth() - this.adapter.outerWidth()\n }\n }\n\n window.Waypoint = Waypoint\n}())\n;(function() {\n 'use strict'\n\n function requestAnimationFrameShim(callback) {\n window.setTimeout(callback, 1000 / 60)\n }\n\n var keyCounter = 0\n var contexts = {}\n var Waypoint = window.Waypoint\n var oldWindowLoad = window.onload\n\n /* http://imakewebthings.com/waypoints/api/context */\n function Context(element) {\n this.element = element\n this.Adapter = Waypoint.Adapter\n this.adapter = new this.Adapter(element)\n this.key = 'waypoint-context-' + keyCounter\n this.didScroll = false\n this.didResize = false\n this.oldScroll = {\n x: this.adapter.scrollLeft(),\n y: this.adapter.scrollTop()\n }\n this.waypoints = {\n vertical: {},\n horizontal: {}\n }\n\n element.waypointContextKey = this.key\n contexts[element.waypointContextKey] = this\n keyCounter += 1\n if (!Waypoint.windowContext) {\n Waypoint.windowContext = true\n Waypoint.windowContext = new Context(window)\n }\n\n this.createThrottledScrollHandler()\n this.createThrottledResizeHandler()\n }\n\n /* Private */\n Context.prototype.add = function(waypoint) {\n var axis = waypoint.options.horizontal ? 'horizontal' : 'vertical'\n this.waypoints[axis][waypoint.key] = waypoint\n this.refresh()\n }\n\n /* Private */\n Context.prototype.checkEmpty = function() {\n var horizontalEmpty = this.Adapter.isEmptyObject(this.waypoints.horizontal)\n var verticalEmpty = this.Adapter.isEmptyObject(this.waypoints.vertical)\n var isWindow = this.element == this.element.window\n if (horizontalEmpty && verticalEmpty && !isWindow) {\n this.adapter.off('.waypoints')\n delete contexts[this.key]\n }\n }\n\n /* Private */\n Context.prototype.createThrottledResizeHandler = function() {\n var self = this\n\n function resizeHandler() {\n self.handleResize()\n self.didResize = false\n }\n\n this.adapter.on('resize.waypoints', function() {\n if (!self.didResize) {\n self.didResize = true\n Waypoint.requestAnimationFrame(resizeHandler)\n }\n })\n }\n\n /* Private */\n Context.prototype.createThrottledScrollHandler = function() {\n var self = this\n function scrollHandler() {\n self.handleScroll()\n self.didScroll = false\n }\n\n this.adapter.on('scroll.waypoints', function() {\n if (!self.didScroll || Waypoint.isTouch) {\n self.didScroll = true\n Waypoint.requestAnimationFrame(scrollHandler)\n }\n })\n }\n\n /* Private */\n Context.prototype.handleResize = function() {\n Waypoint.Context.refreshAll()\n }\n\n /* Private */\n Context.prototype.handleScroll = function() {\n var triggeredGroups = {}\n var axes = {\n horizontal: {\n newScroll: this.adapter.scrollLeft(),\n oldScroll: this.oldScroll.x,\n forward: 'right',\n backward: 'left'\n },\n vertical: {\n newScroll: this.adapter.scrollTop(),\n oldScroll: this.oldScroll.y,\n forward: 'down',\n backward: 'up'\n }\n }\n\n for (var axisKey in axes) {\n var axis = axes[axisKey]\n var isForward = axis.newScroll > axis.oldScroll\n var direction = isForward ? axis.forward : axis.backward\n\n for (var waypointKey in this.waypoints[axisKey]) {\n var waypoint = this.waypoints[axisKey][waypointKey]\n if (waypoint.triggerPoint === null) {\n continue\n }\n var wasBeforeTriggerPoint = axis.oldScroll < waypoint.triggerPoint\n var nowAfterTriggerPoint = axis.newScroll >= waypoint.triggerPoint\n var crossedForward = wasBeforeTriggerPoint && nowAfterTriggerPoint\n var crossedBackward = !wasBeforeTriggerPoint && !nowAfterTriggerPoint\n if (crossedForward || crossedBackward) {\n waypoint.queueTrigger(direction)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n }\n }\n\n for (var groupKey in triggeredGroups) {\n triggeredGroups[groupKey].flushTriggers()\n }\n\n this.oldScroll = {\n x: axes.horizontal.newScroll,\n y: axes.vertical.newScroll\n }\n }\n\n /* Private */\n Context.prototype.innerHeight = function() {\n /*eslint-disable eqeqeq */\n if (this.element == this.element.window) {\n return Waypoint.viewportHeight()\n }\n /*eslint-enable eqeqeq */\n return this.adapter.innerHeight()\n }\n\n /* Private */\n Context.prototype.remove = function(waypoint) {\n delete this.waypoints[waypoint.axis][waypoint.key]\n this.checkEmpty()\n }\n\n /* Private */\n Context.prototype.innerWidth = function() {\n /*eslint-disable eqeqeq */\n if (this.element == this.element.window) {\n return Waypoint.viewportWidth()\n }\n /*eslint-enable eqeqeq */\n return this.adapter.innerWidth()\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-destroy */\n Context.prototype.destroy = function() {\n var allWaypoints = []\n for (var axis in this.waypoints) {\n for (var waypointKey in this.waypoints[axis]) {\n allWaypoints.push(this.waypoints[axis][waypointKey])\n }\n }\n for (var i = 0, end = allWaypoints.length; i < end; i++) {\n allWaypoints[i].destroy()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-refresh */\n Context.prototype.refresh = function() {\n /*eslint-disable eqeqeq */\n var isWindow = this.element == this.element.window\n /*eslint-enable eqeqeq */\n var contextOffset = isWindow ? undefined : this.adapter.offset()\n var triggeredGroups = {}\n var axes\n\n this.handleScroll()\n axes = {\n horizontal: {\n contextOffset: isWindow ? 0 : contextOffset.left,\n contextScroll: isWindow ? 0 : this.oldScroll.x,\n contextDimension: this.innerWidth(),\n oldScroll: this.oldScroll.x,\n forward: 'right',\n backward: 'left',\n offsetProp: 'left'\n },\n vertical: {\n contextOffset: isWindow ? 0 : contextOffset.top,\n contextScroll: isWindow ? 0 : this.oldScroll.y,\n contextDimension: this.innerHeight(),\n oldScroll: this.oldScroll.y,\n forward: 'down',\n backward: 'up',\n offsetProp: 'top'\n }\n }\n\n for (var axisKey in axes) {\n var axis = axes[axisKey]\n for (var waypointKey in this.waypoints[axisKey]) {\n var waypoint = this.waypoints[axisKey][waypointKey]\n var adjustment = waypoint.options.offset\n var oldTriggerPoint = waypoint.triggerPoint\n var elementOffset = 0\n var freshWaypoint = oldTriggerPoint == null\n var contextModifier, wasBeforeScroll, nowAfterScroll\n var triggeredBackward, triggeredForward\n\n if (waypoint.element !== waypoint.element.window) {\n elementOffset = waypoint.adapter.offset()[axis.offsetProp]\n }\n\n if (typeof adjustment === 'function') {\n adjustment = adjustment.apply(waypoint)\n }\n else if (typeof adjustment === 'string') {\n adjustment = parseFloat(adjustment)\n if (waypoint.options.offset.indexOf('%') > - 1) {\n adjustment = Math.ceil(axis.contextDimension * adjustment / 100)\n }\n }\n\n contextModifier = axis.contextScroll - axis.contextOffset\n waypoint.triggerPoint = Math.floor(elementOffset + contextModifier - adjustment)\n wasBeforeScroll = oldTriggerPoint < axis.oldScroll\n nowAfterScroll = waypoint.triggerPoint >= axis.oldScroll\n triggeredBackward = wasBeforeScroll && nowAfterScroll\n triggeredForward = !wasBeforeScroll && !nowAfterScroll\n\n if (!freshWaypoint && triggeredBackward) {\n waypoint.queueTrigger(axis.backward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n else if (!freshWaypoint && triggeredForward) {\n waypoint.queueTrigger(axis.forward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n else if (freshWaypoint && axis.oldScroll >= waypoint.triggerPoint) {\n waypoint.queueTrigger(axis.forward)\n triggeredGroups[waypoint.group.id] = waypoint.group\n }\n }\n }\n\n Waypoint.requestAnimationFrame(function() {\n for (var groupKey in triggeredGroups) {\n triggeredGroups[groupKey].flushTriggers()\n }\n })\n\n return this\n }\n\n /* Private */\n Context.findOrCreateByElement = function(element) {\n return Context.findByElement(element) || new Context(element)\n }\n\n /* Private */\n Context.refreshAll = function() {\n for (var contextId in contexts) {\n contexts[contextId].refresh()\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/context-find-by-element */\n Context.findByElement = function(element) {\n return contexts[element.waypointContextKey]\n }\n\n window.onload = function() {\n if (oldWindowLoad) {\n oldWindowLoad()\n }\n Context.refreshAll()\n }\n\n\n Waypoint.requestAnimationFrame = function(callback) {\n var requestFn = window.requestAnimationFrame ||\n window.mozRequestAnimationFrame ||\n window.webkitRequestAnimationFrame ||\n requestAnimationFrameShim\n requestFn.call(window, callback)\n }\n Waypoint.Context = Context\n}())\n;(function() {\n 'use strict'\n\n function byTriggerPoint(a, b) {\n return a.triggerPoint - b.triggerPoint\n }\n\n function byReverseTriggerPoint(a, b) {\n return b.triggerPoint - a.triggerPoint\n }\n\n var groups = {\n vertical: {},\n horizontal: {}\n }\n var Waypoint = window.Waypoint\n\n /* http://imakewebthings.com/waypoints/api/group */\n function Group(options) {\n this.name = options.name\n this.axis = options.axis\n this.id = this.name + '-' + this.axis\n this.waypoints = []\n this.clearTriggerQueues()\n groups[this.axis][this.name] = this\n }\n\n /* Private */\n Group.prototype.add = function(waypoint) {\n this.waypoints.push(waypoint)\n }\n\n /* Private */\n Group.prototype.clearTriggerQueues = function() {\n this.triggerQueues = {\n up: [],\n down: [],\n left: [],\n right: []\n }\n }\n\n /* Private */\n Group.prototype.flushTriggers = function() {\n for (var direction in this.triggerQueues) {\n var waypoints = this.triggerQueues[direction]\n var reverse = direction === 'up' || direction === 'left'\n waypoints.sort(reverse ? byReverseTriggerPoint : byTriggerPoint)\n for (var i = 0, end = waypoints.length; i < end; i += 1) {\n var waypoint = waypoints[i]\n if (waypoint.options.continuous || i === waypoints.length - 1) {\n waypoint.trigger([direction])\n }\n }\n }\n this.clearTriggerQueues()\n }\n\n /* Private */\n Group.prototype.next = function(waypoint) {\n this.waypoints.sort(byTriggerPoint)\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n var isLast = index === this.waypoints.length - 1\n return isLast ? null : this.waypoints[index + 1]\n }\n\n /* Private */\n Group.prototype.previous = function(waypoint) {\n this.waypoints.sort(byTriggerPoint)\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n return index ? this.waypoints[index - 1] : null\n }\n\n /* Private */\n Group.prototype.queueTrigger = function(waypoint, direction) {\n this.triggerQueues[direction].push(waypoint)\n }\n\n /* Private */\n Group.prototype.remove = function(waypoint) {\n var index = Waypoint.Adapter.inArray(waypoint, this.waypoints)\n if (index > -1) {\n this.waypoints.splice(index, 1)\n }\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/first */\n Group.prototype.first = function() {\n return this.waypoints[0]\n }\n\n /* Public */\n /* http://imakewebthings.com/waypoints/api/last */\n Group.prototype.last = function() {\n return this.waypoints[this.waypoints.length - 1]\n }\n\n /* Private */\n Group.findOrCreate = function(options) {\n return groups[options.axis][options.name] || new Group(options)\n }\n\n Waypoint.Group = Group\n}())\n;(function() {\n 'use strict'\n\n var $ = window.jQuery\n var Waypoint = window.Waypoint\n\n function JQueryAdapter(element) {\n this.$element = $(element)\n }\n\n $.each([\n 'innerHeight',\n 'innerWidth',\n 'off',\n 'offset',\n 'on',\n 'outerHeight',\n 'outerWidth',\n 'scrollLeft',\n 'scrollTop'\n ], function(i, method) {\n JQueryAdapter.prototype[method] = function() {\n var args = Array.prototype.slice.call(arguments)\n return this.$element[method].apply(this.$element, args)\n }\n })\n\n $.each([\n 'extend',\n 'inArray',\n 'isEmptyObject'\n ], function(i, method) {\n JQueryAdapter[method] = $[method]\n })\n\n Waypoint.adapters.push({\n name: 'jquery',\n Adapter: JQueryAdapter\n })\n Waypoint.Adapter = JQueryAdapter\n}())\n;(function() {\n 'use strict'\n\n var Waypoint = window.Waypoint\n\n function createExtension(framework) {\n return function() {\n var waypoints = []\n var overrides = arguments[0]\n\n if (framework.isFunction(arguments[0])) {\n overrides = framework.extend({}, arguments[1])\n overrides.handler = arguments[0]\n }\n\n this.each(function() {\n var options = framework.extend({}, overrides, {\n element: this\n })\n if (typeof options.context === 'string') {\n options.context = framework(this).closest(options.context)[0]\n }\n waypoints.push(new Waypoint(options))\n })\n\n return waypoints\n }\n }\n\n if (window.jQuery) {\n window.jQuery.fn.waypoint = createExtension(window.jQuery)\n }\n if (window.Zepto) {\n window.Zepto.fn.waypoint = createExtension(window.Zepto)\n }\n}())\n;",
"// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n// expose the modules object (__webpack_modules__)\n__webpack_require__.m = __webpack_modules__;\n\n",
"var inProgress = {};\nvar dataWebpackPrefix = \"swh.revision:\";\n// loadScript function to load a script via script tag\n__webpack_require__.l = function(url, done, key, chunkId) {\n\tif(inProgress[url]) { inProgress[url].push(done); return; }\n\tvar script, needAttach;\n\tif(key !== undefined) {\n\t\tvar scripts = document.getElementsByTagName(\"script\");\n\t\tfor(var i = 0; i < scripts.length; i++) {\n\t\t\tvar s = scripts[i];\n\t\t\tif(s.getAttribute(\"src\") == url || s.getAttribute(\"data-webpack\") == dataWebpackPrefix + key) { script = s; break; }\n\t\t}\n\t}\n\tif(!script) {\n\t\tneedAttach = true;\n\t\tscript = document.createElement('script');\n\n\t\tscript.charset = 'utf-8';\n\t\tscript.timeout = 120;\n\t\tif (__webpack_require__.nc) {\n\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n\t\t}\n\t\tscript.setAttribute(\"data-webpack\", dataWebpackPrefix + key);\n\t\tscript.src = url;\n\t}\n\tinProgress[url] = [done];\n\tvar onScriptComplete = function(prev, event) {\n\t\t// avoid mem leaks in IE.\n\t\tscript.onerror = script.onload = null;\n\t\tclearTimeout(timeout);\n\t\tvar doneFns = inProgress[url];\n\t\tdelete inProgress[url];\n\t\tscript.parentNode && script.parentNode.removeChild(script);\n\t\tdoneFns && doneFns.forEach(function(fn) { return fn(event); });\n\t\tif(prev) return prev(event);\n\t}\n\t;\n\tvar timeout = setTimeout(onScriptComplete.bind(null, undefined, { type: 'timeout', target: script }), 120000);\n\tscript.onerror = onScriptComplete.bind(null, script.onerror);\n\tscript.onload = onScriptComplete.bind(null, script.onload);\n\tneedAttach && document.head.appendChild(script);\n};",
"var createStylesheet = function(chunkId, fullhref, resolve, reject) {\n\tvar linkTag = document.createElement(\"link\");\n\n\tlinkTag.rel = \"stylesheet\";\n\tlinkTag.type = \"text/css\";\n\tvar onLinkComplete = function(event) {\n\t\t// avoid mem leaks.\n\t\tlinkTag.onerror = linkTag.onload = null;\n\t\tif (event.type === 'load') {\n\t\t\tresolve();\n\t\t} else {\n\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\tvar realHref = event && event.target && event.target.href || fullhref;\n\t\t\tvar err = new Error(\"Loading CSS chunk \" + chunkId + \" failed.\\n(\" + realHref + \")\");\n\t\t\terr.code = \"CSS_CHUNK_LOAD_FAILED\";\n\t\t\terr.type = errorType;\n\t\t\terr.request = realHref;\n\t\t\tlinkTag.parentNode.removeChild(linkTag)\n\t\t\treject(err);\n\t\t}\n\t}\n\tlinkTag.onerror = linkTag.onload = onLinkComplete;\n\tlinkTag.href = fullhref;\n\n\tdocument.head.appendChild(linkTag);\n\treturn linkTag;\n};\nvar findStylesheet = function(href, fullhref) {\n\tvar existingLinkTags = document.getElementsByTagName(\"link\");\n\tfor(var i = 0; i < existingLinkTags.length; i++) {\n\t\tvar tag = existingLinkTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\") || tag.getAttribute(\"href\");\n\t\tif(tag.rel === \"stylesheet\" && (dataHref === href || dataHref === fullhref)) return tag;\n\t}\n\tvar existingStyleTags = document.getElementsByTagName(\"style\");\n\tfor(var i = 0; i < existingStyleTags.length; i++) {\n\t\tvar tag = existingStyleTags[i];\n\t\tvar dataHref = tag.getAttribute(\"data-href\");\n\t\tif(dataHref === href || dataHref === fullhref) return tag;\n\t}\n};\nvar loadStylesheet = function(chunkId) {\n\treturn new Promise(function(resolve, reject) {\n\t\tvar href = __webpack_require__.miniCssF(chunkId);\n\t\tvar fullhref = __webpack_require__.p + href;\n\t\tif(findStylesheet(href, fullhref)) return resolve();\n\t\tcreateStylesheet(chunkId, fullhref, resolve, reject);\n\t});\n}\n// object to store loaded CSS chunks\nvar installedCssChunks = {\n\t679: 0\n};\n\n__webpack_require__.f.miniCss = function(chunkId, promises) {\n\tvar cssChunks = {\"399\":1};\n\tif(installedCssChunks[chunkId]) promises.push(installedCssChunks[chunkId]);\n\telse if(installedCssChunks[chunkId] !== 0 && cssChunks[chunkId]) {\n\t\tpromises.push(installedCssChunks[chunkId] = loadStylesheet(chunkId).then(function() {\n\t\t\tinstalledCssChunks[chunkId] = 0;\n\t\t}, function(e) {\n\t\t\tdelete installedCssChunks[chunkId];\n\t\t\tthrow e;\n\t\t}));\n\t}\n};\n\n// no hmr",
"// getDefaultExport function for compatibility with non-harmony modules\n__webpack_require__.n = function(module) {\n\tvar getter = module && module.__esModule ?\n\t\tfunction() { return module['default']; } :\n\t\tfunction() { return module; };\n\t__webpack_require__.d(getter, { a: getter });\n\treturn getter;\n};",
"// define getter functions for harmony exports\n__webpack_require__.d = function(exports, definition) {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};",
"__webpack_require__.f = {};\n// This file contains only the entry chunk.\n// The chunk loading function for additional chunks\n__webpack_require__.e = function(chunkId) {\n\treturn Promise.all(Object.keys(__webpack_require__.f).reduce(function(promises, key) {\n\t\t__webpack_require__.f[key](chunkId, promises);\n\t\treturn promises;\n\t}, []));\n};",
"// This function allow to reference async chunks\n__webpack_require__.u = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"js/\" + \"highlightjs\" + \".\" + \"20b210fb4e503f75c059\" + \".js\";\n};",
"// This function allow to reference all chunks\n__webpack_require__.miniCssF = function(chunkId) {\n\t// return url for filenames based on template\n\treturn \"css/\" + \"highlightjs\" + \".\" + \"7b7705451651153be1c8\" + \".css\";\n};",
"__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();",
"__webpack_require__.o = function(obj, prop) { return Object.prototype.hasOwnProperty.call(obj, prop); }",
"// define __esModule on exports\n__webpack_require__.r = function(exports) {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};",
"__webpack_require__.p = \"/static/\";",
"// no baseURI\n\n// object to store loaded and loading chunks\n// undefined = chunk not loaded, null = chunk preloaded/prefetched\n// [resolve, reject, Promise] = chunk loading, 0 = chunk loaded\nvar installedChunks = {\n\t679: 0\n};\n\n__webpack_require__.f.j = function(chunkId, promises) {\n\t\t// JSONP chunk loading for javascript\n\t\tvar installedChunkData = __webpack_require__.o(installedChunks, chunkId) ? installedChunks[chunkId] : undefined;\n\t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n\t\t\t// a Promise means \"currently loading\".\n\t\t\tif(installedChunkData) {\n\t\t\t\tpromises.push(installedChunkData[2]);\n\t\t\t} else {\n\t\t\t\tif(true) { // all chunks have JS\n\t\t\t\t\t// setup Promise in chunk cache\n\t\t\t\t\tvar promise = new Promise(function(resolve, reject) { installedChunkData = installedChunks[chunkId] = [resolve, reject]; });\n\t\t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n\t\t\t\t\t// start chunk loading\n\t\t\t\t\tvar url = __webpack_require__.p + __webpack_require__.u(chunkId);\n\t\t\t\t\t// create error before stack unwound to get useful stacktrace later\n\t\t\t\t\tvar error = new Error();\n\t\t\t\t\tvar loadingEnded = function(event) {\n\t\t\t\t\t\tif(__webpack_require__.o(installedChunks, chunkId)) {\n\t\t\t\t\t\t\tinstalledChunkData = installedChunks[chunkId];\n\t\t\t\t\t\t\tif(installedChunkData !== 0) installedChunks[chunkId] = undefined;\n\t\t\t\t\t\t\tif(installedChunkData) {\n\t\t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n\t\t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n\t\t\t\t\t\t\t\terror.message = 'Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')';\n\t\t\t\t\t\t\t\terror.name = 'ChunkLoadError';\n\t\t\t\t\t\t\t\terror.type = errorType;\n\t\t\t\t\t\t\t\terror.request = realSrc;\n\t\t\t\t\t\t\t\tinstalledChunkData[1](error);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\t\t\t\t\t__webpack_require__.l(url, loadingEnded, \"chunk-\" + chunkId, chunkId);\n\t\t\t\t} else installedChunks[chunkId] = 0;\n\t\t\t}\n\t\t}\n};\n\n// no prefetching\n\n// no preloaded\n\n// no HMR\n\n// no HMR manifest\n\n// no on chunks loaded\n\n// install a JSONP callback for chunk loading\nvar webpackJsonpCallback = function(parentChunkLoadingFunction, data) {\n\tvar chunkIds = data[0];\n\tvar moreModules = data[1];\n\tvar runtime = data[2];\n\t// add \"moreModules\" to the modules object,\n\t// then flag all \"chunkIds\" as loaded and fire callback\n\tvar moduleId, chunkId, i = 0;\n\tfor(moduleId in moreModules) {\n\t\tif(__webpack_require__.o(moreModules, moduleId)) {\n\t\t\t__webpack_require__.m[moduleId] = moreModules[moduleId];\n\t\t}\n\t}\n\tif(runtime) var result = runtime(__webpack_require__);\n\tif(parentChunkLoadingFunction) parentChunkLoadingFunction(data);\n\tfor(;i < chunkIds.length; i++) {\n\t\tchunkId = chunkIds[i];\n\t\tif(__webpack_require__.o(installedChunks, chunkId) && installedChunks[chunkId]) {\n\t\t\tinstalledChunks[chunkId][0]();\n\t\t}\n\t\tinstalledChunks[chunkIds[i]] = 0;\n\t}\n\n}\n\nvar chunkLoadingGlobal = self[\"webpackChunkswh_name_\"] = self[\"webpackChunkswh_name_\"] || [];\nchunkLoadingGlobal.forEach(webpackJsonpCallback.bind(null, 0));\nchunkLoadingGlobal.push = webpackJsonpCallback.bind(null, chunkLoadingGlobal.push.bind(chunkLoadingGlobal));"
],
"sourceRoot": ""
}

File Metadata

Mime Type
application/json
Expires
Jul 4 2025, 6:44 PM (5 w, 5 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3431070

Event Timeline