Page MenuHomeSoftware Heritage

browse.0f243d164dcdaeda84db.js.map
No OneTemporary

browse.0f243d164dcdaeda84db.js.map

{
"version": 3,
"sources": [
"webpack://swh.browse/webpack/universalModuleDefinition",
"webpack://swh.browse/webpack/bootstrap",
"webpack://swh.browse/./node_modules/clipboard/dist/clipboard.js",
"webpack://swh.browse/./swh/web/assets/src/bundles/browse/snapshot-navigation.js",
"webpack://swh.browse/./swh/web/assets/src/bundles/browse/origin-search.js",
"webpack://swh.browse/./swh/web/assets/src/bundles/browse/browse-utils.js",
"webpack://swh.browse/./swh/web/assets/src/bundles/browse/swhid-utils.js",
"webpack://swh.browse/./swh/web/assets/src/utils/functions.js",
"webpack://swh.browse/./swh/web/assets/src/utils/constants.js",
"webpack://swh.browse/./swh/web/assets/src/bundles/browse/index.js",
"webpack://swh.browse/./swh/web/assets/src/thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.js"
],
"names": [
"root",
"factory",
"exports",
"module",
"define",
"amd",
"window",
"installedModules",
"__webpack_require__",
"moduleId",
"i",
"l",
"modules",
"call",
"m",
"c",
"d",
"name",
"getter",
"o",
"Object",
"defineProperty",
"enumerable",
"get",
"r",
"Symbol",
"toStringTag",
"value",
"t",
"mode",
"__esModule",
"ns",
"create",
"key",
"bind",
"n",
"object",
"property",
"prototype",
"hasOwnProperty",
"p",
"s",
"element",
"selectedText",
"nodeName",
"focus",
"isReadOnly",
"hasAttribute",
"setAttribute",
"select",
"setSelectionRange",
"length",
"removeAttribute",
"selection",
"getSelection",
"range",
"document",
"createRange",
"selectNodeContents",
"removeAllRanges",
"addRange",
"toString",
"E",
"on",
"callback",
"ctx",
"e",
"this",
"push",
"fn",
"once",
"self",
"listener",
"off",
"apply",
"arguments",
"_",
"emit",
"data",
"slice",
"evtArr",
"len",
"evts",
"liveEvents",
"TinyEmitter",
"is",
"delegate",
"target",
"type",
"Error",
"string",
"TypeError",
"node",
"addEventListener",
"destroy",
"removeEventListener",
"listenNode",
"nodeList",
"Array",
"forEach",
"listenNodeList",
"selector",
"body",
"listenSelector",
"undefined",
"HTMLElement",
"nodeType",
"String",
"closest",
"_delegate",
"useCapture",
"listenerFn",
"delegateTarget",
"elements",
"querySelectorAll",
"map",
"Element",
"matches",
"proto",
"matchesSelector",
"mozMatchesSelector",
"msMatchesSelector",
"oMatchesSelector",
"webkitMatchesSelector",
"parentNode",
"__webpack_exports__",
"src_select",
"select_default",
"_typeof",
"iterator",
"obj",
"constructor",
"_createClass",
"defineProperties",
"props",
"descriptor",
"configurable",
"writable",
"Constructor",
"protoProps",
"staticProps",
"clipboard_action",
"ClipboardAction",
"options",
"instance",
"_classCallCheck",
"resolveOptions",
"initSelection",
"action",
"container",
"emitter",
"text",
"trigger",
"selectFake",
"selectTarget",
"_this",
"isRTL",
"documentElement",
"getAttribute",
"removeFake",
"fakeHandlerCallback",
"fakeHandler",
"fakeElem",
"createElement",
"style",
"fontSize",
"border",
"padding",
"margin",
"position",
"yPosition",
"pageYOffset",
"scrollTop",
"top",
"appendChild",
"copyText",
"removeChild",
"succeeded",
"execCommand",
"err",
"handleResult",
"clearSelection",
"activeElement",
"blur",
"set",
"_action",
"_target",
"tiny_emitter",
"tiny_emitter_default",
"listen",
"listen_default",
"clipboard_typeof",
"clipboard_createClass",
"clipboard_Clipboard",
"_Emitter",
"Clipboard",
"clipboard_classCallCheck",
"ReferenceError",
"_possibleConstructorReturn",
"__proto__",
"getPrototypeOf",
"listenClick",
"subClass",
"superClass",
"setPrototypeOf",
"_inherits",
"defaultAction",
"defaultTarget",
"defaultText",
"_this2",
"onClick",
"currentTarget",
"clipboardAction",
"getAttributeValue",
"querySelector",
"actions",
"support",
"queryCommandSupported",
"a",
"suffix",
"attribute",
"initSnapshotNavigation",
"snapshotContext",
"branch",
"setBranchesTabActive",
"$",
"removeClass",
"addClass",
"setReleasesTabActive",
"ready",
"click",
"stopPropagation",
"dropdownResized",
"dropdownWidth",
"width",
"linksPrev",
"linkNext",
"linkCurrent",
"inSearch",
"clearOriginSearchResultsTable",
"remove",
"populateOriginSearchResultsTable",
"origins",
"show",
"hide",
"table",
"origin",
"browseUrl",
"Urls",
"browse_origin",
"url",
"tableRow",
"encodeURI",
"append",
"latestSnapshotUrl",
"api_1_origin_visit_latest",
"fetch",
"then",
"response",
"json",
"html",
"children",
"prop",
"entries",
"setTimeout",
"removeAttr",
"scrollTo",
"searchOrigins",
"searchUrl",
"handleFetchError",
"resp",
"headers",
"has",
"parsedLink",
"match",
"status",
"statusText",
"doSearch",
"searchQueryText",
"val",
"startsWith",
"resolveSWHIDUrl",
"api_1_resolve_swhid",
"location",
"browse_url",
"reason",
"limit",
"baseSearchUrl",
"URL",
"api_1_origin_metadata_search",
"searchParams",
"api_1_origin_search",
"withVisit",
"searchOriginsFirst",
"initOriginSearch",
"submit",
"event",
"preventDefault",
"trim",
"withContent",
"searchMetadata",
"queryParameters",
"URLSearchParams",
"browse_search",
"hasClass",
"pop",
"urlParams",
"search",
"query",
"initBrowseNavbar",
"pathname",
"browse_origin_visits",
"browse_origin_branches",
"browse_snapshot_branches",
"browse_origin_releases",
"browse_snapshot_releases",
"next",
"toggle",
"css",
"popover",
"boundary",
"placement",
"BREAKPOINT_SM",
"template",
"content",
"attr",
"title",
"offset",
"sanitize",
"id",
"parents",
"swhIdObjectTypeToggled",
"tab",
"swhIdContextOptionToggled",
"swhIdElt",
"find",
"swhIdWithContext",
"currentSwhId",
"pos",
"indexOf",
"addLinesInfo",
"lines",
"linesPart",
"linesRegexp",
"RegExp",
"line",
"exec",
"hash",
"parseInt",
"replace",
"ClipboardJS",
"swhId",
"innerWidth",
"tabSlideOptions",
"tabLocation",
"clickScreenToCloseFilters",
"innerHeight",
"tabSlideOut",
"ok",
"handleFetchErrors",
"responses",
"staticAsset",
"asset",
"__STATIC__",
"csrfPost",
"Cookies",
"credentials",
"method",
"isGitRepoUrl",
"domain",
"test",
"removeUrlFragment",
"history",
"replaceState",
"selectText",
"startNode",
"endNode",
"setStart",
"setEnd",
"childNodes",
"textContent",
"htmlAlert",
"message",
"closable",
"closeButton",
"extraClasses",
"BREAKPOINT_MD",
"swhSpinnerSrc",
"callerSettings",
"heightAsString",
"outerHeight",
"calculatePanelSize",
"available",
"height",
"edge",
"settings",
"otherOffset",
"panel",
"isOpen",
"extend",
"tabHandle",
"hoverTimeout",
"offsetReverse",
"handleOffset",
"handleOffsetReverse",
"bounceDistance",
"bounceTimes",
"bounceSpeed",
"tabImage",
"tabImageHeight",
"tabImageWidth",
"onLoadSlideOut",
"clickScreenToClose",
"onOpen",
"onClose",
"handle",
"toggleButton",
"imageHeight",
"imageWidth",
"img",
"Image",
"src",
"naturalHeight",
"naturalWidth",
"panelOffsetFrom",
"handleOffsetFrom",
"borderWidth",
"resize",
"close",
"open",
"moveIn",
"moveOut",
"contains",
"clicked",
"filter",
"timer",
"hover",
"temp",
"animate",
"bounceIn",
"bounceOut",
"jQuery"
],
"mappings": ";CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAgB,OAAID,KAEpBD,EAAU,IAAIA,EAAU,KAAK,GAAIA,EAAU,IAAU,OAAIC,KAR3D,CASGK,QAAQ,WACX,O,YCTE,IAAIC,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,WAIjBhC,EAAoBA,EAAoBiC,EAAI,K,sBC5ErD,IAAiDxC,IASxC,WACT,OAAgB,SAAUW,GAEhB,IAAIL,EAAmB,GAGvB,SAASC,EAAoBC,GAG5B,GAAGF,EAAiBE,GACnB,OAAOF,EAAiBE,GAAUP,QAGnC,IAAIC,EAASI,EAAiBE,GAAY,CACzCC,EAAGD,EACHE,GAAG,EACHT,QAAS,IAUV,OANAU,EAAQH,GAAUI,KAAKV,EAAOD,QAASC,EAAQA,EAAOD,QAASM,GAG/DL,EAAOQ,GAAI,EAGJR,EAAOD,QA0Df,OArDAM,EAAoBM,EAAIF,EAGxBJ,EAAoBO,EAAIR,EAGxBC,EAAoBQ,EAAI,SAASd,EAASe,EAAMC,GAC3CV,EAAoBW,EAAEjB,EAASe,IAClCG,OAAOC,eAAenB,EAASe,EAAM,CAAEK,YAAY,EAAMC,IAAKL,KAKhEV,EAAoBgB,EAAI,SAAStB,GACX,oBAAXuB,QAA0BA,OAAOC,aAC1CN,OAAOC,eAAenB,EAASuB,OAAOC,YAAa,CAAEC,MAAO,WAE7DP,OAAOC,eAAenB,EAAS,aAAc,CAAEyB,OAAO,KAQvDnB,EAAoBoB,EAAI,SAASD,EAAOE,GAEvC,GADU,EAAPA,IAAUF,EAAQnB,EAAoBmB,IAC/B,EAAPE,EAAU,OAAOF,EACpB,GAAW,EAAPE,GAA8B,iBAAVF,GAAsBA,GAASA,EAAMG,WAAY,OAAOH,EAChF,IAAII,EAAKX,OAAOY,OAAO,MAGvB,GAFAxB,EAAoBgB,EAAEO,GACtBX,OAAOC,eAAeU,EAAI,UAAW,CAAET,YAAY,EAAMK,MAAOA,IACtD,EAAPE,GAA4B,iBAATF,EAAmB,IAAI,IAAIM,KAAON,EAAOnB,EAAoBQ,EAAEe,EAAIE,EAAK,SAASA,GAAO,OAAON,EAAMM,IAAQC,KAAK,KAAMD,IAC9I,OAAOF,GAIRvB,EAAoB2B,EAAI,SAAShC,GAChC,IAAIe,EAASf,GAAUA,EAAO2B,WAC7B,WAAwB,OAAO3B,EAAgB,SAC/C,WAA8B,OAAOA,GAEtC,OADAK,EAAoBQ,EAAEE,EAAQ,IAAKA,GAC5BA,GAIRV,EAAoBW,EAAI,SAASiB,EAAQC,GAAY,OAAOjB,OAAOkB,UAAUC,eAAe1B,KAAKuB,EAAQC,IAGzG7B,EAAoBgC,EAAI,GAIjBhC,EAAoBA,EAAoBiC,EAAI,GAnF7C,CAsFN,CAEJ,SAAUtC,EAAQD,GA4CxBC,EAAOD,QA1CP,SAAgBwC,GACZ,IAAIC,EAEJ,GAAyB,WAArBD,EAAQE,SACRF,EAAQG,QAERF,EAAeD,EAAQf,WAEtB,GAAyB,UAArBe,EAAQE,UAA6C,aAArBF,EAAQE,SAAyB,CACtE,IAAIE,EAAaJ,EAAQK,aAAa,YAEjCD,GACDJ,EAAQM,aAAa,WAAY,IAGrCN,EAAQO,SACRP,EAAQQ,kBAAkB,EAAGR,EAAQf,MAAMwB,QAEtCL,GACDJ,EAAQU,gBAAgB,YAG5BT,EAAeD,EAAQf,UAEtB,CACGe,EAAQK,aAAa,oBACrBL,EAAQG,QAGZ,IAAIQ,EAAY/C,OAAOgD,eACnBC,EAAQC,SAASC,cAErBF,EAAMG,mBAAmBhB,GACzBW,EAAUM,kBACVN,EAAUO,SAASL,GAEnBZ,EAAeU,EAAUQ,WAG7B,OAAOlB,IAQL,SAAUxC,EAAQD,GAExB,SAAS4D,KAKTA,EAAExB,UAAY,CACZyB,GAAI,SAAU9C,EAAM+C,EAAUC,GAC5B,IAAIC,EAAIC,KAAKD,IAAMC,KAAKD,EAAI,IAO5B,OALCA,EAAEjD,KAAUiD,EAAEjD,GAAQ,KAAKmD,KAAK,CAC/BC,GAAIL,EACJC,IAAKA,IAGAE,MAGTG,KAAM,SAAUrD,EAAM+C,EAAUC,GAC9B,IAAIM,EAAOJ,KACX,SAASK,IACPD,EAAKE,IAAIxD,EAAMuD,GACfR,EAASU,MAAMT,EAAKU,WAItB,OADAH,EAASI,EAAIZ,EACNG,KAAKJ,GAAG9C,EAAMuD,EAAUP,IAGjCY,KAAM,SAAU5D,GAMd,IALA,IAAI6D,EAAO,GAAGC,MAAMlE,KAAK8D,UAAW,GAChCK,IAAWb,KAAKD,IAAMC,KAAKD,EAAI,KAAKjD,IAAS,IAAI8D,QACjDrE,EAAI,EACJuE,EAAMD,EAAO7B,OAETzC,EAAIuE,EAAKvE,IACfsE,EAAOtE,GAAG2D,GAAGK,MAAMM,EAAOtE,GAAGuD,IAAKa,GAGpC,OAAOX,MAGTM,IAAK,SAAUxD,EAAM+C,GACnB,IAAIE,EAAIC,KAAKD,IAAMC,KAAKD,EAAI,IACxBgB,EAAOhB,EAAEjD,GACTkE,EAAa,GAEjB,GAAID,GAAQlB,EACV,IAAK,IAAItD,EAAI,EAAGuE,EAAMC,EAAK/B,OAAQzC,EAAIuE,EAAKvE,IACtCwE,EAAKxE,GAAG2D,KAAOL,GAAYkB,EAAKxE,GAAG2D,GAAGO,IAAMZ,GAC9CmB,EAAWf,KAAKc,EAAKxE,IAY3B,OAJCyE,EAAiB,OACdjB,EAAEjD,GAAQkE,SACHjB,EAAEjD,GAENkD,OAIXhE,EAAOD,QAAU4D,EACjB3D,EAAOD,QAAQkF,YAActB,GAKvB,SAAU3D,EAAQD,EAASM,GAEjC,IAAI6E,EAAK7E,EAAoB,GACzB8E,EAAW9E,EAAoB,GA6FnCL,EAAOD,QAlFP,SAAgBqF,EAAQC,EAAMxB,GAC1B,IAAKuB,IAAWC,IAASxB,EACrB,MAAM,IAAIyB,MAAM,8BAGpB,IAAKJ,EAAGK,OAAOF,GACX,MAAM,IAAIG,UAAU,oCAGxB,IAAKN,EAAGhB,GAAGL,GACP,MAAM,IAAI2B,UAAU,qCAGxB,GAAIN,EAAGO,KAAKL,GACR,OAsBR,SAAoBK,EAAMJ,EAAMxB,GAG5B,OAFA4B,EAAKC,iBAAiBL,EAAMxB,GAErB,CACH8B,QAAS,WACLF,EAAKG,oBAAoBP,EAAMxB,KA3B5BgC,CAAWT,EAAQC,EAAMxB,GAE/B,GAAIqB,EAAGY,SAASV,GACjB,OAsCR,SAAwBU,EAAUT,EAAMxB,GAKpC,OAJAkC,MAAM5D,UAAU6D,QAAQtF,KAAKoF,GAAU,SAASL,GAC5CA,EAAKC,iBAAiBL,EAAMxB,MAGzB,CACH8B,QAAS,WACLI,MAAM5D,UAAU6D,QAAQtF,KAAKoF,GAAU,SAASL,GAC5CA,EAAKG,oBAAoBP,EAAMxB,QA9ChCoC,CAAeb,EAAQC,EAAMxB,GAEnC,GAAIqB,EAAGK,OAAOH,GACf,OA0DR,SAAwBc,EAAUb,EAAMxB,GACpC,OAAOsB,EAAS9B,SAAS8C,KAAMD,EAAUb,EAAMxB,GA3DpCuC,CAAehB,EAAQC,EAAMxB,GAGpC,MAAM,IAAI2B,UAAU,+EAgEtB,SAAUxF,EAAQD,GAQxBA,EAAQ0F,KAAO,SAASjE,GACpB,YAAiB6E,IAAV7E,GACAA,aAAiB8E,aACE,IAAnB9E,EAAM+E,UASjBxG,EAAQ+F,SAAW,SAAStE,GACxB,IAAI6D,EAAOpE,OAAOkB,UAAUuB,SAAShD,KAAKc,GAE1C,YAAiB6E,IAAV7E,IACU,sBAAT6D,GAAyC,4BAATA,IAChC,WAAY7D,IACK,IAAjBA,EAAMwB,QAAgBjD,EAAQ0F,KAAKjE,EAAM,MASrDzB,EAAQwF,OAAS,SAAS/D,GACtB,MAAwB,iBAAVA,GACPA,aAAiBgF,QAS5BzG,EAAQmE,GAAK,SAAS1C,GAGlB,MAAgB,sBAFLP,OAAOkB,UAAUuB,SAAShD,KAAKc,KAQxC,SAAUxB,EAAQD,EAASM,GAEjC,IAAIoG,EAAUpG,EAAoB,GAYlC,SAASqG,EAAUnE,EAAS2D,EAAUb,EAAMxB,EAAU8C,GAClD,IAAIC,EAAavC,EAASE,MAAMP,KAAMQ,WAItC,OAFAjC,EAAQmD,iBAAiBL,EAAMuB,EAAYD,GAEpC,CACHhB,QAAS,WACLpD,EAAQqD,oBAAoBP,EAAMuB,EAAYD,KAgD1D,SAAStC,EAAS9B,EAAS2D,EAAUb,EAAMxB,GACvC,OAAO,SAASE,GACZA,EAAE8C,eAAiBJ,EAAQ1C,EAAEqB,OAAQc,GAEjCnC,EAAE8C,gBACFhD,EAASnD,KAAK6B,EAASwB,IAKnC/D,EAAOD,QA3CP,SAAkB+G,EAAUZ,EAAUb,EAAMxB,EAAU8C,GAElD,MAAyC,mBAA9BG,EAASpB,iBACTgB,EAAUnC,MAAM,KAAMC,WAIb,mBAATa,EAGAqB,EAAU3E,KAAK,KAAMsB,UAAUkB,MAAM,KAAMC,YAI9B,iBAAbsC,IACPA,EAAWzD,SAAS0D,iBAAiBD,IAIlCf,MAAM5D,UAAU6E,IAAItG,KAAKoG,GAAU,SAAUvE,GAChD,OAAOmE,EAAUnE,EAAS2D,EAAUb,EAAMxB,EAAU8C,SA4BtD,SAAU3G,EAAQD,GAOxB,GAAuB,oBAAZkH,UAA4BA,QAAQ9E,UAAU+E,QAAS,CAC9D,IAAIC,EAAQF,QAAQ9E,UAEpBgF,EAAMD,QAAUC,EAAMC,iBACND,EAAME,oBACNF,EAAMG,mBACNH,EAAMI,kBACNJ,EAAMK,sBAoB1BxH,EAAOD,QAVP,SAAkBwC,EAAS2D,GACvB,KAAO3D,GAvBc,IAuBHA,EAAQgE,UAAiC,CACvD,GAA+B,mBAApBhE,EAAQ2E,SACf3E,EAAQ2E,QAAQhB,GAClB,OAAO3D,EAETA,EAAUA,EAAQkF,cASpB,SAAUzH,EAAQ0H,EAAqBrH,GAE7C,aACAA,EAAoBgB,EAAEqG,GAGtB,IAAIC,EAAatH,EAAoB,GACjCuH,EAA8BvH,EAAoB2B,EAAE2F,GAGpDE,EAA4B,mBAAXvG,QAAoD,iBAApBA,OAAOwG,SAAwB,SAAUC,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,mBAAXzG,QAAyByG,EAAIC,cAAgB1G,QAAUyG,IAAQzG,OAAOa,UAAY,gBAAkB4F,GAElQE,EAAe,WAAc,SAASC,EAAiB9C,EAAQ+C,GAAS,IAAK,IAAI5H,EAAI,EAAGA,EAAI4H,EAAMnF,OAAQzC,IAAK,CAAE,IAAI6H,EAAaD,EAAM5H,GAAI6H,EAAWjH,WAAaiH,EAAWjH,aAAc,EAAOiH,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMrH,OAAOC,eAAekE,EAAQgD,EAAWtG,IAAKsG,IAAiB,OAAO,SAAUG,EAAaC,EAAYC,GAAiJ,OAA9HD,GAAYN,EAAiBK,EAAYpG,UAAWqG,GAAiBC,GAAaP,EAAiBK,EAAaE,GAAqBF,GAA7gB,GA8PcG,EAnPM,WAInC,SAASC,EAAgBC,IAb7B,SAAyBC,EAAUN,GAAe,KAAMM,aAAoBN,GAAgB,MAAM,IAAI/C,UAAU,qCAcxGsD,CAAgB9E,KAAM2E,GAEtB3E,KAAK+E,eAAeH,GACpB5E,KAAKgF,gBAwOT,OA/NAf,EAAaU,EAAiB,CAAC,CAC3B7G,IAAK,iBACLN,MAAO,WACH,IAAIoH,EAAUpE,UAAUxB,OAAS,QAAsBqD,IAAjB7B,UAAU,GAAmBA,UAAU,GAAK,GAElFR,KAAKiF,OAASL,EAAQK,OACtBjF,KAAKkF,UAAYN,EAAQM,UACzBlF,KAAKmF,QAAUP,EAAQO,QACvBnF,KAAKoB,OAASwD,EAAQxD,OACtBpB,KAAKoF,KAAOR,EAAQQ,KACpBpF,KAAKqF,QAAUT,EAAQS,QAEvBrF,KAAKxB,aAAe,KAQzB,CACCV,IAAK,gBACLN,MAAO,WACCwC,KAAKoF,KACLpF,KAAKsF,aACEtF,KAAKoB,QACZpB,KAAKuF,iBASd,CACCzH,IAAK,aACLN,MAAO,WACH,IAAIgI,EAAQxF,KAERyF,EAAwD,OAAhDpG,SAASqG,gBAAgBC,aAAa,OAElD3F,KAAK4F,aAEL5F,KAAK6F,oBAAsB,WACvB,OAAOL,EAAMI,cAEjB5F,KAAK8F,YAAc9F,KAAKkF,UAAUxD,iBAAiB,QAAS1B,KAAK6F,uBAAwB,EAEzF7F,KAAK+F,SAAW1G,SAAS2G,cAAc,YAEvChG,KAAK+F,SAASE,MAAMC,SAAW,OAE/BlG,KAAK+F,SAASE,MAAME,OAAS,IAC7BnG,KAAK+F,SAASE,MAAMG,QAAU,IAC9BpG,KAAK+F,SAASE,MAAMI,OAAS,IAE7BrG,KAAK+F,SAASE,MAAMK,SAAW,WAC/BtG,KAAK+F,SAASE,MAAMR,EAAQ,QAAU,QAAU,UAEhD,IAAIc,EAAYpK,OAAOqK,aAAenH,SAASqG,gBAAgBe,UAC/DzG,KAAK+F,SAASE,MAAMS,IAAMH,EAAY,KAEtCvG,KAAK+F,SAASlH,aAAa,WAAY,IACvCmB,KAAK+F,SAASvI,MAAQwC,KAAKoF,KAE3BpF,KAAKkF,UAAUyB,YAAY3G,KAAK+F,UAEhC/F,KAAKxB,aAAeoF,IAAiB5D,KAAK+F,UAC1C/F,KAAK4G,aAQV,CACC9I,IAAK,aACLN,MAAO,WACCwC,KAAK8F,cACL9F,KAAKkF,UAAUtD,oBAAoB,QAAS5B,KAAK6F,qBACjD7F,KAAK8F,YAAc,KACnB9F,KAAK6F,oBAAsB,MAG3B7F,KAAK+F,WACL/F,KAAKkF,UAAU2B,YAAY7G,KAAK+F,UAChC/F,KAAK+F,SAAW,QAQzB,CACCjI,IAAK,eACLN,MAAO,WACHwC,KAAKxB,aAAeoF,IAAiB5D,KAAKoB,QAC1CpB,KAAK4G,aAOV,CACC9I,IAAK,WACLN,MAAO,WACH,IAAIsJ,OAAY,EAEhB,IACIA,EAAYzH,SAAS0H,YAAY/G,KAAKiF,QACxC,MAAO+B,GACLF,GAAY,EAGhB9G,KAAKiH,aAAaH,KAQvB,CACChJ,IAAK,eACLN,MAAO,SAAsBsJ,GACzB9G,KAAKmF,QAAQzE,KAAKoG,EAAY,UAAY,QAAS,CAC/C7B,OAAQjF,KAAKiF,OACbG,KAAMpF,KAAKxB,aACX6G,QAASrF,KAAKqF,QACd6B,eAAgBlH,KAAKkH,eAAenJ,KAAKiC,UAQlD,CACClC,IAAK,iBACLN,MAAO,WACCwC,KAAKqF,SACLrF,KAAKqF,QAAQ3G,QAEjBW,SAAS8H,cAAcC,OACvBjL,OAAOgD,eAAeK,oBAQ3B,CACC1B,IAAK,UAMLN,MAAO,WACHwC,KAAK4F,eAEV,CACC9H,IAAK,SACLuJ,IAAK,WACD,IAAIpC,EAASzE,UAAUxB,OAAS,QAAsBqD,IAAjB7B,UAAU,GAAmBA,UAAU,GAAK,OAIjF,GAFAR,KAAKsH,QAAUrC,EAEM,SAAjBjF,KAAKsH,SAAuC,QAAjBtH,KAAKsH,QAChC,MAAM,IAAIhG,MAAM,uDASxBlE,IAAK,WACD,OAAO4C,KAAKsH,UASjB,CACCxJ,IAAK,SACLuJ,IAAK,SAAajG,GACd,QAAeiB,IAAXjB,EAAsB,CACtB,IAAIA,GAA8E,iBAAjD,IAAXA,EAAyB,YAAcyC,EAAQzC,KAA6C,IAApBA,EAAOmB,SAWjG,MAAM,IAAIjB,MAAM,+CAVhB,GAAoB,SAAhBtB,KAAKiF,QAAqB7D,EAAOxC,aAAa,YAC9C,MAAM,IAAI0C,MAAM,qFAGpB,GAAoB,QAAhBtB,KAAKiF,SAAqB7D,EAAOxC,aAAa,aAAewC,EAAOxC,aAAa,aACjF,MAAM,IAAI0C,MAAM,0GAGpBtB,KAAKuH,QAAUnG,IAY3BhE,IAAK,WACD,OAAO4C,KAAKuH,YAIb5C,EAhP4B,GAqPnC6C,EAAenL,EAAoB,GACnCoL,EAAoCpL,EAAoB2B,EAAEwJ,GAG1DE,EAASrL,EAAoB,GAC7BsL,EAA8BtL,EAAoB2B,EAAE0J,GAGpDE,EAAqC,mBAAXtK,QAAoD,iBAApBA,OAAOwG,SAAwB,SAAUC,GAAO,cAAcA,GAAS,SAAUA,GAAO,OAAOA,GAAyB,mBAAXzG,QAAyByG,EAAIC,cAAgB1G,QAAUyG,IAAQzG,OAAOa,UAAY,gBAAkB4F,GAE3Q8D,EAAwB,WAAc,SAAS3D,EAAiB9C,EAAQ+C,GAAS,IAAK,IAAI5H,EAAI,EAAGA,EAAI4H,EAAMnF,OAAQzC,IAAK,CAAE,IAAI6H,EAAaD,EAAM5H,GAAI6H,EAAWjH,WAAaiH,EAAWjH,aAAc,EAAOiH,EAAWC,cAAe,EAAU,UAAWD,IAAYA,EAAWE,UAAW,GAAMrH,OAAOC,eAAekE,EAAQgD,EAAWtG,IAAKsG,IAAiB,OAAO,SAAUG,EAAaC,EAAYC,GAAiJ,OAA9HD,GAAYN,EAAiBK,EAAYpG,UAAWqG,GAAiBC,GAAaP,EAAiBK,EAAaE,GAAqBF,GAA7gB,GAiBxBuD,EAAsB,SAAUC,GAOhC,SAASC,EAAU3C,EAAST,IAtBhC,SAAkCC,EAAUN,GAAe,KAAMM,aAAoBN,GAAgB,MAAM,IAAI/C,UAAU,qCAuBjHyG,CAAyBjI,KAAMgI,GAE/B,IAAIxC,EAvBZ,SAAoCpF,EAAM1D,GAAQ,IAAK0D,EAAQ,MAAM,IAAI8H,eAAe,6DAAgE,OAAOxL,GAAyB,iBAATA,GAAqC,mBAATA,EAA8B0D,EAAP1D,EAuB9MyL,CAA2BnI,MAAOgI,EAAUI,WAAanL,OAAOoL,eAAeL,IAAYtL,KAAKsD,OAI5G,OAFAwF,EAAMT,eAAeH,GACrBY,EAAM8C,YAAYjD,GACXG,EAsIX,OA/JJ,SAAmB+C,EAAUC,GAAc,GAA0B,mBAAfA,GAA4C,OAAfA,EAAuB,MAAM,IAAIhH,UAAU,kEAAoEgH,GAAeD,EAASpK,UAAYlB,OAAOY,OAAO2K,GAAcA,EAAWrK,UAAW,CAAE6F,YAAa,CAAExG,MAAO+K,EAAUpL,YAAY,EAAOmH,UAAU,EAAMD,cAAc,KAAemE,IAAYvL,OAAOwL,eAAiBxL,OAAOwL,eAAeF,EAAUC,GAAcD,EAASH,UAAYI,GAY7dE,CAAUV,EAAWD,GAuBrBF,EAAsBG,EAAW,CAAC,CAC9BlK,IAAK,iBACLN,MAAO,WACH,IAAIoH,EAAUpE,UAAUxB,OAAS,QAAsBqD,IAAjB7B,UAAU,GAAmBA,UAAU,GAAK,GAElFR,KAAKiF,OAAmC,mBAAnBL,EAAQK,OAAwBL,EAAQK,OAASjF,KAAK2I,cAC3E3I,KAAKoB,OAAmC,mBAAnBwD,EAAQxD,OAAwBwD,EAAQxD,OAASpB,KAAK4I,cAC3E5I,KAAKoF,KAA+B,mBAAjBR,EAAQQ,KAAsBR,EAAQQ,KAAOpF,KAAK6I,YACrE7I,KAAKkF,UAAoD,WAAxC0C,EAAiBhD,EAAQM,WAA0BN,EAAQM,UAAY7F,SAAS8C,OAQtG,CACCrE,IAAK,cACLN,MAAO,SAAqB6H,GACxB,IAAIyD,EAAS9I,KAEbA,KAAKK,SAAWsH,IAAiBtC,EAAS,SAAS,SAAUtF,GACzD,OAAO+I,EAAOC,QAAQhJ,QAS/B,CACCjC,IAAK,UACLN,MAAO,SAAiBuC,GACpB,IAAIsF,EAAUtF,EAAE8C,gBAAkB9C,EAAEiJ,cAEhChJ,KAAKiJ,kBACLjJ,KAAKiJ,gBAAkB,MAG3BjJ,KAAKiJ,gBAAkB,IAAIvE,EAAiB,CACxCO,OAAQjF,KAAKiF,OAAOI,GACpBjE,OAAQpB,KAAKoB,OAAOiE,GACpBD,KAAMpF,KAAKoF,KAAKC,GAChBH,UAAWlF,KAAKkF,UAChBG,QAASA,EACTF,QAASnF,SASlB,CACClC,IAAK,gBACLN,MAAO,SAAuB6H,GAC1B,OAAO6D,EAAkB,SAAU7D,KAQxC,CACCvH,IAAK,gBACLN,MAAO,SAAuB6H,GAC1B,IAAInD,EAAWgH,EAAkB,SAAU7D,GAE3C,GAAInD,EACA,OAAO7C,SAAS8J,cAAcjH,KAUvC,CACCpE,IAAK,cAOLN,MAAO,SAAqB6H,GACxB,OAAO6D,EAAkB,OAAQ7D,KAOtC,CACCvH,IAAK,UACLN,MAAO,WACHwC,KAAKK,SAASsB,UAEV3B,KAAKiJ,kBACLjJ,KAAKiJ,gBAAgBtH,UACrB3B,KAAKiJ,gBAAkB,SAG/B,CAAC,CACDnL,IAAK,cACLN,MAAO,WACH,IAAIyH,EAASzE,UAAUxB,OAAS,QAAsBqD,IAAjB7B,UAAU,GAAmBA,UAAU,GAAK,CAAC,OAAQ,OAEtF4I,EAA4B,iBAAXnE,EAAsB,CAACA,GAAUA,EAClDoE,IAAYhK,SAASiK,sBAMzB,OAJAF,EAAQpH,SAAQ,SAAUiD,GACtBoE,EAAUA,KAAahK,SAASiK,sBAAsBrE,MAGnDoE,MAIRrB,EApJe,CAqJxBP,EAAqB8B,GASvB,SAASL,EAAkBM,EAAQjL,GAC/B,IAAIkL,EAAY,kBAAoBD,EAEpC,GAAKjL,EAAQK,aAAa6K,GAI1B,OAAOlL,EAAQoH,aAAa8D,GAGa/F,EAA6B,QAAI,KAGzD,SAn8BnB1H,EAAOD,QAAUD,K,iCCDZ,SAAS4N,EAAuBC,EAAiBC,GAEtD,SAASC,IACPC,EAAE,wBAAwBC,YAAY,UACtCD,EAAE,wBAAwBE,SAAS,UACnCF,EAAE,qBAAqBC,YAAY,UACnCD,EAAE,qBAAqBE,SAAS,UAGlC,SAASC,IACPH,EAAE,wBAAwBC,YAAY,UACtCD,EAAE,wBAAwBE,SAAS,UACnCF,EAAE,qBAAqBC,YAAY,UACnCD,EAAE,qBAAqBE,SAAS,UAGlCF,EAAEzK,UAAU6K,OAAM,WAChBJ,EAAE,wCAAwCK,OAAM,SAAApK,GAC9C8J,IACA9J,EAAEqK,qBAGJN,EAAE,wCAAwCK,OAAM,SAAApK,GAC9CkK,IACAlK,EAAEqK,qBAGJ,IAAIC,GAAkB,EAItBP,EAAE,6BAA6BlK,GAAG,oBAAoB,WACpD,IAAIyK,EAAJ,CACA,IAAIC,EAAgBR,EAAE,0BAA0BS,QAChDT,EAAE,0BAA0BS,MAAMD,EAAgB,IAClDD,GAAkB,MAGhBV,IACEC,EACFC,IAEAI,QAjDR,mC,g5BCSA,IACIO,EAAY,GACZC,EAAW,KACXC,EAAc,KACdC,GAAW,EAaf,SAASC,IACPd,EAAE,mCAAmCe,SAGvC,SAASC,EAAiCC,GACxC,GAAIA,EAAQ/L,OAAS,EAAG,CACtB8K,EAAE,8BAA8BkB,OAChClB,EAAE,kBAAkBmB,OACpBL,IAEA,IADA,IACA,EADIM,EAAQpB,EAAE,gCAJQ,2BAKZvN,EALY,KAKT4O,EALS,KAMhBC,EAAeC,KAAKC,gBAAX,eAAyCH,EAAOI,IACzDC,EAAQ,kBACQjP,EADR,4DAEZiP,GACE,6BAA6BjP,EAA7B,0HAGFiP,GACE,6CACYC,UAAUL,GADtB,KACqCK,UAAUN,EAAOI,KADtD,YAEFC,GACE,wDAAwDjP,EAAxD,gGAGFiP,GAAY,QACZN,EAAMQ,OAAOF,GAEb,IAAIG,EAAoBN,KAAKO,0BAA0BT,EAAOI,KAE9DM,MADAF,GAAqB,0BAElBG,MAAK,SAAAC,GAAQ,OAAIA,EAASC,UAC1BF,MAAK,SAAAnL,GACJmJ,EAAE,sBAAsBvN,GAAK0P,KAAKtL,EAAKU,MACvCyI,EAAE,wBAAwBvN,GAAK2P,WAAWrB,SACtClK,EACFmJ,EAAE,wBAAwBvN,GAAK0P,KAC7B,qHAGFnC,EAAE,wBAAwBvN,GAAK0P,KAC7B,+HAEEnC,EAAE,4BAA4BqC,KAAK,YACrCrC,EAAE,WAAWvN,GAAKsO,cAlC5B,IAAwBE,EAAQqB,aAAhC,aAA2C,IAf7CC,YAAW,WACTvC,EAAE,mCAAmCwC,WAAW,iBAuDhDxC,EAAE,8BAA8BmB,OAChCnB,EAAE,kBAAkB1E,KAAK,uDACzB0E,EAAE,kBAAkBkB,OAGL,OAAbP,EACFX,EAAE,gCAAgCE,SAAS,YAE3CF,EAAE,gCAAgCC,YAAY,YAGvB,IAArBS,EAAUxL,OACZ8K,EAAE,gCAAgCE,SAAS,YAE3CF,EAAE,gCAAgCC,YAAY,YAGhDY,GAAW,EACX0B,YAAW,WACTlQ,OAAOoQ,SAAS,EAAG,MAqBvB,SAASC,EAAcC,GACrB7B,IACAd,EAAE,gBAAgBE,SAAS,QAC3B,IAAI+B,EAAWF,MAAMY,GAClBX,KAAKY,KACLZ,MAAK,SAAAa,GAEJ,OADAZ,EAAWY,GACKX,UAEjBF,MAAK,SAAAnL,GAKJ,GAHA+J,EAAc+B,EAEdhC,EAAW,KACPsB,EAASa,QAAQC,IAAI,QAAS,CAChC,IAAIC,EAA6Bf,EAASa,QAAQxP,IAAI,QAnHnD2P,MADA,sBACU,QAoHM1K,IAAfyK,IACFrC,EAAWqC,GAMfhD,EAAE,gBAAgBC,YAAY,QAC9Be,EAAiCnK,MArBtB,OAuBN,SAAAoL,GACLjC,EAAE,gBAAgBC,YAAY,QAC9BY,GAAW,EACXb,EAAE,8BAA8BmB,OAChCnB,EAAE,kBAAkB1E,KAApB,SAAkC2G,EAASiB,OAA3C,KAAsDjB,EAASkB,YAC/DnD,EAAE,kBAAkBkB,UAI1B,SAASkC,IACPpD,EAAE,kBAAkBmB,OACpB,IAAIkC,EAAkBrD,EAAE,yBAAyBsD,MAEjD,GADAzC,GAAW,EACPwC,EAAgBE,WAAW,QAAS,CAEtC,IAAIC,EAAkBjC,KAAKkC,oBAAoBJ,GAC/CtB,MAAMyB,GACHxB,KAAKY,KACLZ,MAAK,SAAAC,GAAQ,OAAIA,EAASC,UAC1BF,MAAK,SAAAnL,GAGJxE,OAAOqR,SAAW7M,EAAK8M,cAN3B,OAQS,SAAA1B,GAGLA,EAASC,OAAOF,MAAK,SAAAnL,GACnBmJ,EAAE,8BAA8BmB,OAChCnB,EAAE,0BAA0BmB,OAC5BnB,EAAE,kBAAkB1E,KAAKzE,EAAK+M,QAC9B5D,EAAE,kBAAkBkB,kBAM1BlB,EAAE,8BAA8BkB,OAChClB,EAAE,0BAA0BkB,OAjFhC,SAA4BmC,EAAiBQ,GAC3C,IAAIC,EACiB9D,EAAE,+BAA+BqC,KAAK,YAEzDyB,EAAgB,IAAIC,IAAIxC,KAAKyC,+BAAgC3R,OAAOqR,WACtDO,aAAarC,OAAO,WAAYyB,GAE9CS,EAAgB,IAAIC,IAAIxC,KAAK2C,oBAAoBb,GAAkBhR,OAAOqR,UAG5E,IAAIS,EAAYnE,EAAE,kCAAkCqC,KAAK,WACzDyB,EAAcG,aAAarC,OAAO,QAASiC,GAC3CC,EAAcG,aAAarC,OAAO,aAAcuC,GAEhDzB,EADgBoB,EAAclO,YAqE5BwO,CAAmBf,EA7KT,KAiLP,SAASgB,IACdrE,EAAEzK,UAAU6K,OAAM,WAChBJ,EAAE,uBAAuBsE,QAAO,SAAAC,GAC9BA,EAAMC,iBACN,IAAInB,EAAkBrD,EAAE,yBAAyBsD,MAAMmB,OACnDN,EAAYnE,EAAE,kCAAkCqC,KAAK,WACrDqC,EAAc1E,EAAE,4BAA4BqC,KAAK,WACjDsC,EAAiB3E,EAAE,+BAA+BqC,KAAK,WACvDuC,EAAkB,IAAIC,gBAC1BD,EAAgBhD,OAAO,IAAKyB,GACxBc,GACFS,EAAgBhD,OAAO,aAAcuC,GAEnCO,GACFE,EAAgBhD,OAAO,eAAgB8C,GAErCC,GACFC,EAAgBhD,OAAO,kBAAmB+C,GAG5CtS,OAAOqR,SAAcnC,KAAKuD,gBAA1B,IAA6CF,EAAgBhP,cAG/DoK,EAAE,gCAAgCK,OAAM,SAAAkE,GAClCvE,EAAE,gCAAgC+E,SAAS,aAAelE,IAG9DA,GAAW,EACXH,EAAUvK,KAAKyK,GACf8B,EAAc/B,GACd4D,EAAMC,qBAGRxE,EAAE,gCAAgCK,OAAM,SAAAkE,GAClCvE,EAAE,gCAAgC+E,SAAS,aAAelE,IAG9DA,GAAW,EACX6B,EAAchC,EAAUsE,OACxBT,EAAMC,qBAGR,IAAIS,EAAY,IAAIJ,gBAAgBxS,OAAOqR,SAASwB,QAChDC,EAAQF,EAAU3R,IAAI,KACtB6Q,EAAYc,EAAUlC,IAAI,cAC1B2B,EAAcO,EAAUlC,IAAI,gBAC5B4B,EAAiBM,EAAUlC,IAAI,mBAC/BoC,IACFnF,EAAE,yBAAyBsD,IAAI6B,GAC/BnF,EAAE,kCAAkCqC,KAAK,UAAW8B,GACpDnE,EAAE,4BAA4BqC,KAAK,UAAWqC,GAC9C1E,EAAE,+BAA+BqC,KAAK,UAAWsC,GACjDvB,U,iCC9ON,8CAyEO,SAASgC,IACV/S,OAAOqR,SAAS2B,WAAa9D,KAAK+D,uBACpCtF,EAAE,sCAAsCE,SAAS,UACxC7N,OAAOqR,SAAS2B,WAAa9D,KAAKgE,0BAC3ClT,OAAOqR,SAAS2B,WAAa9D,KAAKiE,2BAClCxF,EAAE,0CAA0CE,SAAS,UAC5C7N,OAAOqR,SAAS2B,WAAa9D,KAAKkE,0BAClCpT,OAAOqR,SAAS2B,WAAa9D,KAAKmE,2BAC3C1F,EAAE,0CAA0CE,SAAS,UAErDF,EAAE,6BAA6BE,SAAS,UA1E5CF,EAAEzK,UAAU6K,OAAM,WAEhBJ,EAAE,qCAAqClK,GAAG,SAAS,SAAAG,GACjD+J,EAAE/J,EAAEqB,QAAQqO,KAAK,OAAOC,SACuB,SAA3C5F,EAAE/J,EAAEqB,QAAQqO,KAAK,OAAOE,IAAI,WAC9B7F,EAAE/J,EAAEqB,QAAQ1C,QAEZoL,EAAE/J,EAAEqB,QAAQgG,OAEdrH,EAAEqK,kBACFrK,EAAEuO,oBAGJxE,EAAE,wBAAwB8F,QAAQ,CAChCC,SAAU,WACV3K,UAAW,OACX+G,MAAM,EACN6D,UAAW,WAET,OADchG,EAAE3N,QAAQoO,QACZwF,IACH,MAEA,SAGXC,SAAU,4NAKVC,QAAS,WACP,IAAIA,EAAUnG,EAAE9J,MAAMkQ,KAAK,wBAC3B,OAAOpG,EAAEmG,GAAS/D,SAAS,iBAAiBrB,SAASoB,QAEvDkE,MAAO,WACL,IAAIA,EAAQrG,EAAE9J,MAAMkQ,KAAK,wBACzB,OAAOpG,EAAEqG,GAAOjE,SAAS,oBAAoBD,QAE/CmE,OAAQ,OACRC,UAAU,IAGZvG,EAAE,mCAAmClK,GAAG,SAAS,SAAAG,GAC/C+J,EAAE,wBAAwB8F,QAAQ,WAGpC9F,EAAE,wBAAwBlK,GAAG,mBAAmB,SAACG,GAC/C+J,EAAE,6BAA6B/J,EAAEiJ,cAAcsH,GAA9C,KAAqDV,QAAQ,QAC9D9F,EAAE,kCAAkCmB,UAGtCnB,EAAE,yBAAyBlK,GAAG,oBAAoB,WAChDkK,EAAE,kCAAkCmB,OACpCnB,EAAE,wBAAwB8F,QAAQ,WAGpC9F,EAAE,QAAQlK,GAAG,SAAS,SAAAG,GAChB+J,EAAE/J,EAAEqB,QAAQmP,QAAQ,gBAAgBvR,QACtCe,EAAEqK,yB,iCCnER,kHAaO,SAASoG,EAAuBnC,GACrCA,EAAMC,iBACNxE,EAAEuE,EAAMjN,QAAQqP,IAAI,QAGf,SAASC,EAA0BrC,GACxCA,EAAMjE,kBACN,IAAIuG,EAAW7G,EAAEuE,EAAMjN,QAAQqB,QAAQ,aAAamO,KAAK,UACrDC,EAAmB/G,EAAEuE,EAAMjN,QAAQT,KAAK,sBACxCmQ,EAAeH,EAASvL,OAC5B,GAAI0E,EAAEuE,EAAMjN,QAAQ+K,KAAK,WACvB2E,EAAeD,MACV,CACL,IAAME,EAAMD,EAAaE,QAAQ,MACpB,IAATD,IACFD,EAAeA,EAAalQ,MAAM,EAAGmQ,IAGzCJ,EAASvL,KAAK0L,GACdH,EAAST,KAAK,OAAQ,IAAMY,EAAe,KAE3CG,IAGF,SAASA,IAOP,IANA,IAAIN,EAAW7G,EAAE,sBAAsB8G,KAAK,UACxCE,EAAeH,EAASvL,OACxB8L,EAAQ,GACRC,EAAY,UACZC,EAAc,IAAIC,OAAO,WACzBC,EAAOF,EAAYG,KAAKpV,OAAOqR,SAASgE,MACrCF,GACLJ,EAAMjR,KAAKwR,SAASH,EAAK,KACzBA,EAAOF,EAAYG,KAAKpV,OAAOqR,SAASgE,MAEtCN,EAAMlS,OAAS,IACjBmS,GAAaD,EAAM,IAEjBA,EAAMlS,OAAS,IACjBmS,GAAa,IAAMD,EAAM,IAGvBpH,EAAE,iCAAiCqC,KAAK,aAC1C2E,EAAeA,EAAaY,QAAQ,mBAAoB,IACpDR,EAAMlS,OAAS,IACjB8R,GAAgBK,GAGlBR,EAASvL,KAAK0L,GACdH,EAAST,KAAK,OAAQ,IAAMY,EAAe,MAI/ChH,EAAEzK,UAAU6K,OAAM,WAChB,IAAIyH,IAAY,kBAAmB,CACjCvM,KAAM,SAAAC,GAEJ,OADYyE,EAAEzE,GAAS5C,QAAQ,aAAamO,KAAK,UAAUxL,UAK/D,IAAIuM,IAAY,sBAAuB,CACrCvM,KAAM,SAAAC,GACJ,IAAIuM,EAAQ9H,EAAEzE,GAAS5C,QAAQ,aAAamO,KAAK,UAAUxL,OAC3D,OAAOjJ,OAAOqR,SAASrC,OAAS,IAAMyG,EAAQ,OAI1B,GAApBzV,OAAO0V,WAAmB,KAC5B/H,EAAE,oBAAoB6F,IAAI,QAAS,UAGrC,IAAImC,EAAkB,CACpBC,YAAa,QACbC,0BAA2B,CAAC,wBAAyB,UACrD5B,OAAQ,WAEN,OADctG,EAAE3N,QAAQoO,QACZwF,IACH,QAEA,WAKT5T,OAAO8V,YAAc,KAAO9V,OAAO0V,WAAa,OAClDC,EAAe,YAAkB,QAInChI,EAAE,oBAAoBoI,YAAYJ,GAGlChI,EAAE,oBAAoB6F,IAAI,UAAW,SACrC7F,EAAE,yBAAyBzE,QAAQ,SAGnCyE,EAAE3N,QAAQyD,GAAG,cAAc,WACzBqR,OAIFnH,EAAE,QAAQK,OAAM,WACd8G,W,+BC3GG,SAASvE,EAAiBX,GAC/B,IAAKA,EAASoG,GACZ,MAAMpG,EAER,OAAOA,EAGF,SAASqG,EAAkBC,GAChC,IAAK,IAAI9V,EAAI,EAAGA,EAAI8V,EAAUrT,SAAUzC,EACtC,IAAK8V,EAAU9V,GAAG4V,GAChB,MAAME,EAAU9V,GAGpB,OAAO8V,EAGF,SAASC,EAAYC,GAC1B,MAAUC,WAAaD,EAGlB,SAASE,EAASlH,EAAKqB,EAAczK,GAE1C,YAFuD,IAA3ByK,MAAU,SAAiB,IAAbzK,MAAO,MACjDyK,EAAQ,eAAiB8F,QAAQtV,IAAI,aAC9ByO,MAAMN,EAAK,CAChBoH,YAAa,UACb/F,QAASA,EACTgG,OAAQ,OACRzQ,KAAMA,IAIH,SAAS0Q,EAAatH,EAAKuH,GAIhC,OADS,IAAIzB,OADC,oCAAoCyB,EAApC,wFAEJC,KAAKxH,GAGV,SAASyH,IACdC,QAAQC,aAAa,GAAI7T,SAAS8Q,MAAOhU,OAAOqR,SAAS2B,SAAWhT,OAAOqR,SAASwB,QAG/E,SAASmE,EAAWC,EAAWC,GACpC,IAAInU,EAAY/C,OAAOgD,eACvBD,EAAUM,kBACV,IAAIJ,EAAQC,SAASC,cACrBF,EAAMkU,SAASF,EAAW,GACD,UAArBC,EAAQ5U,SACVW,EAAMmU,OAAOF,EAASA,EAAQG,WAAWxU,QAEzCI,EAAMmU,OAAOF,EAASA,EAAQI,YAAYzU,QAE5CE,EAAUO,SAASL,GAGd,SAASsU,EAAUrS,EAAMsS,EAASC,QAAkB,IAAlBA,OAAW,GAClD,IAAIC,EAAc,GACdC,EAAe,GAQnB,OAPIF,IACFC,EAAW,iJAIXC,EAAe,qBAEjB,2BAAkCzS,EAAlC,IAA0CyS,EAA1C,kBAAwEH,EAAUE,EAAlF,SAzEF,iR,gCCAA,iHAUa9D,EAAgB,IAChBgE,EAAgB,IAGhBC,EAAgB1B,YAAY,wB,uECdzC,4W,2GC+CA,SAAUxI,GACRA,EAAE5J,GAAGgS,YAAc,SAAS+B,GAM1B,SAASC,EAAezS,GACtB,OAAOgQ,SAAShQ,EAAK0S,cAAgB,EAAG,IAAM,KAiBhD,SAASC,IACP,IAAIC,EAAYvK,EAAE3N,QAAQmY,SAI1B,MAHa,QAATC,GAA2B,WAATA,IACpBF,EAAYvK,EAAE3N,QAAQoO,SAEjB8J,EAAY5C,SAAS+C,EAASC,aAAehD,SAAS+C,EAASpE,QAGxE,IAAIsE,EAAQ1U,KAOZ,SAAS2U,IACP,OAAOD,EAAM7F,SAAS,uBAGxB,GAA8B,iBAAnBoF,EAET,OAAQA,GACN,IAAK,OAEH,OADAjU,KAAKqF,QAAQ,QACNrF,KACT,IAAK,QAEH,OADAA,KAAKqF,QAAQ,SACNrF,KACT,IAAK,SACH,OAAO2U,IACT,IAAK,SAEH,OADA3U,KAAKqF,QAAQ,UACNrF,KACT,IAAK,SAEH,OADAA,KAAKqF,QAAQ,UACNrF,KACT,QACE,MAAM,IAAIsB,MAAM,mCAEf,CAEL,IAAIkT,EAAW1K,EAAE8K,OAAO,CACtB7C,YAAa,OACb8C,UAAW,UACX5P,OAAQ,QACR6P,aAAc,IACd1E,OAAQ,QACR2E,eAAe,EACfN,YAAa,KACbO,aAAc,KACdC,qBAAqB,EACrBC,eAAgB,OAChBC,YAAa,EACbC,YAAa,IACbC,SAAU,KACVC,eAAgB,KAChBC,cAAe,KACfC,gBAAgB,EAChBC,oBAAoB,EACpBzD,0BAA2B,CAAC,yBAC5B0D,OAAQ,aACRC,QAAS,cACR1B,GAAkB,IAEjBM,EAAOC,EAASzC,YAChB6D,EAASpB,EAASK,UAAY/K,EAAE0K,EAASK,UAAWH,GAcxD,GAZAA,EAAM1K,SAAS,wBACZA,SAAS,kBAAoBuK,GAC5BC,EAASO,eACXL,EAAM1K,SAAS,gCAEjB4L,EAAO5L,SAAS,yBACZwK,EAASS,qBACXW,EAAO5L,SAAS,iCAElBwK,EAASqB,aAAe/L,EAAE0K,EAASqB,cAGT,OAAtBrB,EAASa,SAAmB,CAC9B,IAAIS,EAAc,EACdC,EAAa,EACjB,GAAgC,OAA5BvB,EAASc,gBAAsD,OAA3Bd,EAASe,cAC/CO,EAActB,EAASc,eACvBS,EAAavB,EAASe,kBACjB,CACL,IAAIS,EAAM,IAAIC,MACdD,EAAIE,IAAM1B,EAASa,SACnBS,EAAcE,EAAIG,cAClBJ,EAAaC,EAAII,aAGnBR,EAAO5L,SAAS,+BAChB4L,EAAOjG,IAAI,CACT,WAAc,OAAS6E,EAASa,SAAW,cAC3C,MAASU,EACT,OAAUD,IAKD,QAATvB,GAA2B,WAATA,GACpBC,EAAS6B,gBACO7B,EAASO,cAAgB,QAAU,OACnDP,EAAS8B,iBACO9B,EAASS,oBAAsB,QAAU,SAEzDT,EAAS6B,gBACO7B,EAASO,cAAgB,SAAW,MACpDP,EAAS8B,iBACO9B,EAASS,oBAAsB,SAAW,OAI9B,OAA1BT,EAASQ,eACXR,EAASQ,aAAe,IA1H5B,SAAqBzW,EAASgW,GAC5B,OAAO9C,SAASlT,EAAQoR,IAAI,UAAY4E,EAAO,UAAW,IAyH1BgC,CAAY7B,EAAOF,EAAS8B,kBAAoB,MAGnE,QAAT/B,GAA2B,WAATA,GAEpBG,EAAM/E,IAAI6E,EAAS6B,gBAAiB7B,EAASpE,QAC7CwF,EAAOjG,IAAI6E,EAAS8B,iBAAkB9B,EAASQ,cAGlB,OAAzBR,EAASC,cACXC,EAAM/E,IAAI,QAASyE,IAAuB,MAE1CtK,EAAE3N,QAAQqa,QAAO,WACf9B,EAAM/E,IAAI,QAASyE,IAAuB,UAIjC,QAATG,EACFqB,EAAOjG,IAAI,CAAC,OAAU,IAAMuE,EAAe0B,KAE3CA,EAAOjG,IAAI,CAAC,IAAO,IAAMuE,EAAe0B,OAI1ClB,EAAM/E,IAAI6E,EAAS6B,gBAAiB7B,EAASpE,QAC7CwF,EAAOjG,IAAI6E,EAAS8B,iBAAkB9B,EAASQ,cAGlB,OAAzBR,EAASC,cACXC,EAAM/E,IAAI,SAAUyE,IAAuB,MAE3CtK,EAAE3N,QAAQqa,QAAO,WACf9B,EAAM/E,IAAI,SAAUyE,IAAuB,UAIlC,SAATG,EACFqB,EAAOjG,IAAI,CAAC,MAAS,MAErBiG,EAAOjG,IAAI,CAAC,KAAQ,OAIxBiG,EAAOzL,OAAM,SAASkE,GACpBA,EAAMC,oBAERkG,EAASqB,aAAa1L,OAAM,SAASkE,GACnCA,EAAMC,oBAIRoG,EAAM1K,SAAS,wBAEf,IAAIyM,EAAQ,WACV/B,EAAM3K,YAAY,uBAAuB1E,QAAQ,oBACjDmP,EAASmB,WAGPe,EAAO,WACThC,EAAM1K,SAAS,uBAAuB3E,QAAQ,mBAC9CmP,EAASkB,UAGPhG,EAAS,WACPiF,IACF8B,IAEAC,KAKAC,EAAS,GACbA,EAAOpC,GAAQ,KAAOC,EAASU,eAC/B,IAAI0B,EAAU,GACdA,EAAQrC,GAAQ,KAAOC,EAASU,eAqDhC,GAhCIV,EAASiB,oBAGX3L,EAAEzK,UAAU8K,OAAM,SAASkE,GAEzB,GAAIsG,MAAaD,EAAM,GAAGmC,SAASxI,EAAMjN,QAAS,CAKhD,IAHA,IAAI0V,EAAUhN,EAAEuE,EAAMjN,QAGb7E,EAAI,EAAGA,EAAIiY,EAASxC,0BAA0BhT,OAAQzC,IAAK,CAClE,IAAIwa,EAASvC,EAASxC,0BAA0BzV,GAChD,GAAsB,iBAAXwa,GAET,GAAID,EAAQ5V,GAAG6V,IAAWD,EAAQvG,UAAUrP,GAAG6V,GAC7C,YAEG,GAAsB,mBAAXA,GAEZA,EAAOra,KAAKgY,EAAOrG,GACrB,OAMNoI,QAMkB,UAApBjC,EAASvP,OACX2Q,EAAOzL,OAAM,SAASkE,GACpBqB,YAEG,GAAwB,UAApB8E,EAASvP,OAAoB,CACtC,IAAI+R,EAAQ,KACZtC,EAAMuC,OACJ,WACOtC,KACH+B,IAEFM,EAAQ,QAEV,WACMrC,KAAsB,OAAVqC,IACdA,EAAQ3K,YAAW,WACb2K,GACFP,IAEFO,EAAQ,OACPxC,EAASM,kBAIlBc,EAAOzL,OAAM,SAASkE,GAChBsG,KACF8B,OAKFjC,EAASgB,iBACXkB,IACArK,WAAWqK,EAAM,MAInBhC,EAAM9U,GAAG,QAAQ,SAASyO,GACnBsG,KACH+B,OAGJhC,EAAM9U,GAAG,SAAS,SAASyO,GACrBsG,KACF8B,OAGJ/B,EAAM9U,GAAG,UAAU,SAASyO,GAC1BqB,OAEFgF,EAAM9U,GAAG,UAAU,SAASyO,GACtBsG,IAtGS,WAEb,IADA,IAAIuC,EAAOxC,EACFnY,EAAI,EAAGA,EAAIiY,EAASW,YAAa5Y,IACxC2a,EAAOA,EAAKC,QAAQR,EAAQnC,EAASY,aAClC+B,QAAQP,EAASpC,EAASY,aAE/BV,EAAMrP,QAAQ,qBAiGZ+R,GA9FY,WAEd,IADA,IAAIF,EAAOxC,EACFnY,EAAI,EAAGA,EAAIiY,EAASW,YAAa5Y,IACxC2a,EAAOA,EAAKC,QAAQP,EAASpC,EAASY,aACnC+B,QAAQR,EAAQnC,EAASY,aAE9BV,EAAMrP,QAAQ,qBA0FZgS,MAKN,OAAOrX,MAvUX,CAyUGsX,S",
"file": "js/browse.0f243d164dcdaeda84db.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[\"browse\"] = factory();\n\telse\n\t\troot[\"swh\"] = root[\"swh\"] || {}, root[\"swh\"][\"browse\"] = factory();\n})(window, function() {\nreturn ",
" \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"/static/\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 246);\n",
"/*!\n * clipboard.js v2.0.6\n * https://clipboardjs.com/\n * \n * Licensed MIT \u00a9 Zeno Rocha\n */\n(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[\"ClipboardJS\"] = factory();\n\telse\n\t\troot[\"ClipboardJS\"] = factory();\n})(this, function() {\nreturn /******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// define __esModule on exports\n/******/ \t__webpack_require__.r = function(exports) {\n/******/ \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n/******/ \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n/******/ \t\t}\n/******/ \t\tObject.defineProperty(exports, '__esModule', { value: true });\n/******/ \t};\n/******/\n/******/ \t// create a fake namespace object\n/******/ \t// mode & 1: value is a module id, require it\n/******/ \t// mode & 2: merge all properties of value into the ns\n/******/ \t// mode & 4: return value when already ns object\n/******/ \t// mode & 8|1: behave like require\n/******/ \t__webpack_require__.t = function(value, mode) {\n/******/ \t\tif(mode & 1) value = __webpack_require__(value);\n/******/ \t\tif(mode & 8) return value;\n/******/ \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n/******/ \t\tvar ns = Object.create(null);\n/******/ \t\t__webpack_require__.r(ns);\n/******/ \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n/******/ \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n/******/ \t\treturn ns;\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 6);\n/******/ })\n/************************************************************************/\n/******/ ([\n/* 0 */\n/***/ (function(module, exports) {\n\nfunction select(element) {\n var selectedText;\n\n if (element.nodeName === 'SELECT') {\n element.focus();\n\n selectedText = element.value;\n }\n else if (element.nodeName === 'INPUT' || element.nodeName === 'TEXTAREA') {\n var isReadOnly = element.hasAttribute('readonly');\n\n if (!isReadOnly) {\n element.setAttribute('readonly', '');\n }\n\n element.select();\n element.setSelectionRange(0, element.value.length);\n\n if (!isReadOnly) {\n element.removeAttribute('readonly');\n }\n\n selectedText = element.value;\n }\n else {\n if (element.hasAttribute('contenteditable')) {\n element.focus();\n }\n\n var selection = window.getSelection();\n var range = document.createRange();\n\n range.selectNodeContents(element);\n selection.removeAllRanges();\n selection.addRange(range);\n\n selectedText = selection.toString();\n }\n\n return selectedText;\n}\n\nmodule.exports = select;\n\n\n/***/ }),\n/* 1 */\n/***/ (function(module, exports) {\n\nfunction E () {\n // Keep this empty so it's easier to inherit from\n // (via https://github.com/lipsmack from https://github.com/scottcorgan/tiny-emitter/issues/3)\n}\n\nE.prototype = {\n on: function (name, callback, ctx) {\n var e = this.e || (this.e = {});\n\n (e[name] || (e[name] = [])).push({\n fn: callback,\n ctx: ctx\n });\n\n return this;\n },\n\n once: function (name, callback, ctx) {\n var self = this;\n function listener () {\n self.off(name, listener);\n callback.apply(ctx, arguments);\n };\n\n listener._ = callback\n return this.on(name, listener, ctx);\n },\n\n emit: function (name) {\n var data = [].slice.call(arguments, 1);\n var evtArr = ((this.e || (this.e = {}))[name] || []).slice();\n var i = 0;\n var len = evtArr.length;\n\n for (i; i < len; i++) {\n evtArr[i].fn.apply(evtArr[i].ctx, data);\n }\n\n return this;\n },\n\n off: function (name, callback) {\n var e = this.e || (this.e = {});\n var evts = e[name];\n var liveEvents = [];\n\n if (evts && callback) {\n for (var i = 0, len = evts.length; i < len; i++) {\n if (evts[i].fn !== callback && evts[i].fn._ !== callback)\n liveEvents.push(evts[i]);\n }\n }\n\n // Remove event from queue to prevent memory leak\n // Suggested by https://github.com/lazd\n // Ref: https://github.com/scottcorgan/tiny-emitter/commit/c6ebfaa9bc973b33d110a84a307742b7cf94c953#commitcomment-5024910\n\n (liveEvents.length)\n ? e[name] = liveEvents\n : delete e[name];\n\n return this;\n }\n};\n\nmodule.exports = E;\nmodule.exports.TinyEmitter = E;\n\n\n/***/ }),\n/* 2 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar is = __webpack_require__(3);\nvar delegate = __webpack_require__(4);\n\n/**\n * Validates all params and calls the right\n * listener function based on its target type.\n *\n * @param {String|HTMLElement|HTMLCollection|NodeList} target\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listen(target, type, callback) {\n if (!target && !type && !callback) {\n throw new Error('Missing required arguments');\n }\n\n if (!is.string(type)) {\n throw new TypeError('Second argument must be a String');\n }\n\n if (!is.fn(callback)) {\n throw new TypeError('Third argument must be a Function');\n }\n\n if (is.node(target)) {\n return listenNode(target, type, callback);\n }\n else if (is.nodeList(target)) {\n return listenNodeList(target, type, callback);\n }\n else if (is.string(target)) {\n return listenSelector(target, type, callback);\n }\n else {\n throw new TypeError('First argument must be a String, HTMLElement, HTMLCollection, or NodeList');\n }\n}\n\n/**\n * Adds an event listener to a HTML element\n * and returns a remove listener function.\n *\n * @param {HTMLElement} node\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNode(node, type, callback) {\n node.addEventListener(type, callback);\n\n return {\n destroy: function() {\n node.removeEventListener(type, callback);\n }\n }\n}\n\n/**\n * Add an event listener to a list of HTML elements\n * and returns a remove listener function.\n *\n * @param {NodeList|HTMLCollection} nodeList\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenNodeList(nodeList, type, callback) {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.addEventListener(type, callback);\n });\n\n return {\n destroy: function() {\n Array.prototype.forEach.call(nodeList, function(node) {\n node.removeEventListener(type, callback);\n });\n }\n }\n}\n\n/**\n * Add an event listener to a selector\n * and returns a remove listener function.\n *\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Object}\n */\nfunction listenSelector(selector, type, callback) {\n return delegate(document.body, selector, type, callback);\n}\n\nmodule.exports = listen;\n\n\n/***/ }),\n/* 3 */\n/***/ (function(module, exports) {\n\n/**\n * Check if argument is a HTML element.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.node = function(value) {\n return value !== undefined\n && value instanceof HTMLElement\n && value.nodeType === 1;\n};\n\n/**\n * Check if argument is a list of HTML elements.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.nodeList = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return value !== undefined\n && (type === '[object NodeList]' || type === '[object HTMLCollection]')\n && ('length' in value)\n && (value.length === 0 || exports.node(value[0]));\n};\n\n/**\n * Check if argument is a string.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.string = function(value) {\n return typeof value === 'string'\n || value instanceof String;\n};\n\n/**\n * Check if argument is a function.\n *\n * @param {Object} value\n * @return {Boolean}\n */\nexports.fn = function(value) {\n var type = Object.prototype.toString.call(value);\n\n return type === '[object Function]';\n};\n\n\n/***/ }),\n/* 4 */\n/***/ (function(module, exports, __webpack_require__) {\n\nvar closest = __webpack_require__(5);\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction _delegate(element, selector, type, callback, useCapture) {\n var listenerFn = listener.apply(this, arguments);\n\n element.addEventListener(type, listenerFn, useCapture);\n\n return {\n destroy: function() {\n element.removeEventListener(type, listenerFn, useCapture);\n }\n }\n}\n\n/**\n * Delegates event to a selector.\n *\n * @param {Element|String|Array} [elements]\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @param {Boolean} useCapture\n * @return {Object}\n */\nfunction delegate(elements, selector, type, callback, useCapture) {\n // Handle the regular Element usage\n if (typeof elements.addEventListener === 'function') {\n return _delegate.apply(null, arguments);\n }\n\n // Handle Element-less usage, it defaults to global delegation\n if (typeof type === 'function') {\n // Use `document` as the first parameter, then apply arguments\n // This is a short way to .unshift `arguments` without running into deoptimizations\n return _delegate.bind(null, document).apply(null, arguments);\n }\n\n // Handle Selector-based usage\n if (typeof elements === 'string') {\n elements = document.querySelectorAll(elements);\n }\n\n // Handle Array-like based usage\n return Array.prototype.map.call(elements, function (element) {\n return _delegate(element, selector, type, callback, useCapture);\n });\n}\n\n/**\n * Finds closest match and invokes callback.\n *\n * @param {Element} element\n * @param {String} selector\n * @param {String} type\n * @param {Function} callback\n * @return {Function}\n */\nfunction listener(element, selector, type, callback) {\n return function(e) {\n e.delegateTarget = closest(e.target, selector);\n\n if (e.delegateTarget) {\n callback.call(element, e);\n }\n }\n}\n\nmodule.exports = delegate;\n\n\n/***/ }),\n/* 5 */\n/***/ (function(module, exports) {\n\nvar DOCUMENT_NODE_TYPE = 9;\n\n/**\n * A polyfill for Element.matches()\n */\nif (typeof Element !== 'undefined' && !Element.prototype.matches) {\n var proto = Element.prototype;\n\n proto.matches = proto.matchesSelector ||\n proto.mozMatchesSelector ||\n proto.msMatchesSelector ||\n proto.oMatchesSelector ||\n proto.webkitMatchesSelector;\n}\n\n/**\n * Finds the closest parent that matches a selector.\n *\n * @param {Element} element\n * @param {String} selector\n * @return {Function}\n */\nfunction closest (element, selector) {\n while (element && element.nodeType !== DOCUMENT_NODE_TYPE) {\n if (typeof element.matches === 'function' &&\n element.matches(selector)) {\n return element;\n }\n element = element.parentNode;\n }\n}\n\nmodule.exports = closest;\n\n\n/***/ }),\n/* 6 */\n/***/ (function(module, __webpack_exports__, __webpack_require__) {\n\n\"use strict\";\n__webpack_require__.r(__webpack_exports__);\n\n// EXTERNAL MODULE: ./node_modules/select/src/select.js\nvar src_select = __webpack_require__(0);\nvar select_default = /*#__PURE__*/__webpack_require__.n(src_select);\n\n// CONCATENATED MODULE: ./src/clipboard-action.js\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\n\n\n/**\n * Inner class which performs selection from either `text` or `target`\n * properties and then executes copy or cut operations.\n */\n\nvar clipboard_action_ClipboardAction = function () {\n /**\n * @param {Object} options\n */\n function ClipboardAction(options) {\n _classCallCheck(this, ClipboardAction);\n\n this.resolveOptions(options);\n this.initSelection();\n }\n\n /**\n * Defines base properties passed from constructor.\n * @param {Object} options\n */\n\n\n _createClass(ClipboardAction, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = options.action;\n this.container = options.container;\n this.emitter = options.emitter;\n this.target = options.target;\n this.text = options.text;\n this.trigger = options.trigger;\n\n this.selectedText = '';\n }\n\n /**\n * Decides which selection strategy is going to be applied based\n * on the existence of `text` and `target` properties.\n */\n\n }, {\n key: 'initSelection',\n value: function initSelection() {\n if (this.text) {\n this.selectFake();\n } else if (this.target) {\n this.selectTarget();\n }\n }\n\n /**\n * Creates a fake textarea element, sets its value from `text` property,\n * and makes a selection on it.\n */\n\n }, {\n key: 'selectFake',\n value: function selectFake() {\n var _this = this;\n\n var isRTL = document.documentElement.getAttribute('dir') == 'rtl';\n\n this.removeFake();\n\n this.fakeHandlerCallback = function () {\n return _this.removeFake();\n };\n this.fakeHandler = this.container.addEventListener('click', this.fakeHandlerCallback) || true;\n\n this.fakeElem = document.createElement('textarea');\n // Prevent zooming on iOS\n this.fakeElem.style.fontSize = '12pt';\n // Reset box model\n this.fakeElem.style.border = '0';\n this.fakeElem.style.padding = '0';\n this.fakeElem.style.margin = '0';\n // Move element out of screen horizontally\n this.fakeElem.style.position = 'absolute';\n this.fakeElem.style[isRTL ? 'right' : 'left'] = '-9999px';\n // Move element to the same position vertically\n var yPosition = window.pageYOffset || document.documentElement.scrollTop;\n this.fakeElem.style.top = yPosition + 'px';\n\n this.fakeElem.setAttribute('readonly', '');\n this.fakeElem.value = this.text;\n\n this.container.appendChild(this.fakeElem);\n\n this.selectedText = select_default()(this.fakeElem);\n this.copyText();\n }\n\n /**\n * Only removes the fake element after another click event, that way\n * a user can hit `Ctrl+C` to copy because selection still exists.\n */\n\n }, {\n key: 'removeFake',\n value: function removeFake() {\n if (this.fakeHandler) {\n this.container.removeEventListener('click', this.fakeHandlerCallback);\n this.fakeHandler = null;\n this.fakeHandlerCallback = null;\n }\n\n if (this.fakeElem) {\n this.container.removeChild(this.fakeElem);\n this.fakeElem = null;\n }\n }\n\n /**\n * Selects the content from element passed on `target` property.\n */\n\n }, {\n key: 'selectTarget',\n value: function selectTarget() {\n this.selectedText = select_default()(this.target);\n this.copyText();\n }\n\n /**\n * Executes the copy operation based on the current selection.\n */\n\n }, {\n key: 'copyText',\n value: function copyText() {\n var succeeded = void 0;\n\n try {\n succeeded = document.execCommand(this.action);\n } catch (err) {\n succeeded = false;\n }\n\n this.handleResult(succeeded);\n }\n\n /**\n * Fires an event based on the copy operation result.\n * @param {Boolean} succeeded\n */\n\n }, {\n key: 'handleResult',\n value: function handleResult(succeeded) {\n this.emitter.emit(succeeded ? 'success' : 'error', {\n action: this.action,\n text: this.selectedText,\n trigger: this.trigger,\n clearSelection: this.clearSelection.bind(this)\n });\n }\n\n /**\n * Moves focus away from `target` and back to the trigger, removes current selection.\n */\n\n }, {\n key: 'clearSelection',\n value: function clearSelection() {\n if (this.trigger) {\n this.trigger.focus();\n }\n document.activeElement.blur();\n window.getSelection().removeAllRanges();\n }\n\n /**\n * Sets the `action` to be performed which can be either 'copy' or 'cut'.\n * @param {String} action\n */\n\n }, {\n key: 'destroy',\n\n\n /**\n * Destroy lifecycle.\n */\n value: function destroy() {\n this.removeFake();\n }\n }, {\n key: 'action',\n set: function set() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 'copy';\n\n this._action = action;\n\n if (this._action !== 'copy' && this._action !== 'cut') {\n throw new Error('Invalid \"action\" value, use either \"copy\" or \"cut\"');\n }\n }\n\n /**\n * Gets the `action` property.\n * @return {String}\n */\n ,\n get: function get() {\n return this._action;\n }\n\n /**\n * Sets the `target` property using an element\n * that will be have its content copied.\n * @param {Element} target\n */\n\n }, {\n key: 'target',\n set: function set(target) {\n if (target !== undefined) {\n if (target && (typeof target === 'undefined' ? 'undefined' : _typeof(target)) === 'object' && target.nodeType === 1) {\n if (this.action === 'copy' && target.hasAttribute('disabled')) {\n throw new Error('Invalid \"target\" attribute. Please use \"readonly\" instead of \"disabled\" attribute');\n }\n\n if (this.action === 'cut' && (target.hasAttribute('readonly') || target.hasAttribute('disabled'))) {\n throw new Error('Invalid \"target\" attribute. You can\\'t cut text from elements with \"readonly\" or \"disabled\" attributes');\n }\n\n this._target = target;\n } else {\n throw new Error('Invalid \"target\" value, use a valid Element');\n }\n }\n }\n\n /**\n * Gets the `target` property.\n * @return {String|HTMLElement}\n */\n ,\n get: function get() {\n return this._target;\n }\n }]);\n\n return ClipboardAction;\n}();\n\n/* harmony default export */ var clipboard_action = (clipboard_action_ClipboardAction);\n// EXTERNAL MODULE: ./node_modules/tiny-emitter/index.js\nvar tiny_emitter = __webpack_require__(1);\nvar tiny_emitter_default = /*#__PURE__*/__webpack_require__.n(tiny_emitter);\n\n// EXTERNAL MODULE: ./node_modules/good-listener/src/listen.js\nvar listen = __webpack_require__(2);\nvar listen_default = /*#__PURE__*/__webpack_require__.n(listen);\n\n// CONCATENATED MODULE: ./src/clipboard.js\nvar clipboard_typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj; };\n\nvar clipboard_createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if (\"value\" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();\n\nfunction clipboard_classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError(\"Cannot call a class as a function\"); } }\n\nfunction _possibleConstructorReturn(self, call) { if (!self) { throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\"); } return call && (typeof call === \"object\" || typeof call === \"function\") ? call : self; }\n\nfunction _inherits(subClass, superClass) { if (typeof superClass !== \"function\" && superClass !== null) { throw new TypeError(\"Super expression must either be null or a function, not \" + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }\n\n\n\n\n\n/**\n * Base class which takes one or more elements, adds event listeners to them,\n * and instantiates a new `ClipboardAction` on each click.\n */\n\nvar clipboard_Clipboard = function (_Emitter) {\n _inherits(Clipboard, _Emitter);\n\n /**\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n * @param {Object} options\n */\n function Clipboard(trigger, options) {\n clipboard_classCallCheck(this, Clipboard);\n\n var _this = _possibleConstructorReturn(this, (Clipboard.__proto__ || Object.getPrototypeOf(Clipboard)).call(this));\n\n _this.resolveOptions(options);\n _this.listenClick(trigger);\n return _this;\n }\n\n /**\n * Defines if attributes would be resolved using internal setter functions\n * or custom functions that were passed in the constructor.\n * @param {Object} options\n */\n\n\n clipboard_createClass(Clipboard, [{\n key: 'resolveOptions',\n value: function resolveOptions() {\n var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};\n\n this.action = typeof options.action === 'function' ? options.action : this.defaultAction;\n this.target = typeof options.target === 'function' ? options.target : this.defaultTarget;\n this.text = typeof options.text === 'function' ? options.text : this.defaultText;\n this.container = clipboard_typeof(options.container) === 'object' ? options.container : document.body;\n }\n\n /**\n * Adds a click event listener to the passed trigger.\n * @param {String|HTMLElement|HTMLCollection|NodeList} trigger\n */\n\n }, {\n key: 'listenClick',\n value: function listenClick(trigger) {\n var _this2 = this;\n\n this.listener = listen_default()(trigger, 'click', function (e) {\n return _this2.onClick(e);\n });\n }\n\n /**\n * Defines a new `ClipboardAction` on each click event.\n * @param {Event} e\n */\n\n }, {\n key: 'onClick',\n value: function onClick(e) {\n var trigger = e.delegateTarget || e.currentTarget;\n\n if (this.clipboardAction) {\n this.clipboardAction = null;\n }\n\n this.clipboardAction = new clipboard_action({\n action: this.action(trigger),\n target: this.target(trigger),\n text: this.text(trigger),\n container: this.container,\n trigger: trigger,\n emitter: this\n });\n }\n\n /**\n * Default `action` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultAction',\n value: function defaultAction(trigger) {\n return getAttributeValue('action', trigger);\n }\n\n /**\n * Default `target` lookup function.\n * @param {Element} trigger\n */\n\n }, {\n key: 'defaultTarget',\n value: function defaultTarget(trigger) {\n var selector = getAttributeValue('target', trigger);\n\n if (selector) {\n return document.querySelector(selector);\n }\n }\n\n /**\n * Returns the support of the given action, or all actions if no action is\n * given.\n * @param {String} [action]\n */\n\n }, {\n key: 'defaultText',\n\n\n /**\n * Default `text` lookup function.\n * @param {Element} trigger\n */\n value: function defaultText(trigger) {\n return getAttributeValue('text', trigger);\n }\n\n /**\n * Destroy lifecycle.\n */\n\n }, {\n key: 'destroy',\n value: function destroy() {\n this.listener.destroy();\n\n if (this.clipboardAction) {\n this.clipboardAction.destroy();\n this.clipboardAction = null;\n }\n }\n }], [{\n key: 'isSupported',\n value: function isSupported() {\n var action = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : ['copy', 'cut'];\n\n var actions = typeof action === 'string' ? [action] : action;\n var support = !!document.queryCommandSupported;\n\n actions.forEach(function (action) {\n support = support && !!document.queryCommandSupported(action);\n });\n\n return support;\n }\n }]);\n\n return Clipboard;\n}(tiny_emitter_default.a);\n\n/**\n * Helper function to retrieve attribute value.\n * @param {String} suffix\n * @param {Element} element\n */\n\n\nfunction getAttributeValue(suffix, element) {\n var attribute = 'data-clipboard-' + suffix;\n\n if (!element.hasAttribute(attribute)) {\n return;\n }\n\n return element.getAttribute(attribute);\n}\n\n/* harmony default export */ var clipboard = __webpack_exports__[\"default\"] = (clipboard_Clipboard);\n\n/***/ })\n/******/ ])[\"default\"];\n});",
"/**\n * Copyright (C) 2018 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 initSnapshotNavigation(snapshotContext, branch) {\n\n function setBranchesTabActive() {\n $('.swh-releases-switch').removeClass('active');\n $('.swh-branches-switch').addClass('active');\n $('#swh-tab-releases').removeClass('active');\n $('#swh-tab-branches').addClass('active');\n }\n\n function setReleasesTabActive() {\n $('.swh-branches-switch').removeClass('active');\n $('.swh-releases-switch').addClass('active');\n $('#swh-tab-branches').removeClass('active');\n $('#swh-tab-releases').addClass('active');\n }\n\n $(document).ready(() => {\n $('.dropdown-menu a.swh-branches-switch').click(e => {\n setBranchesTabActive();\n e.stopPropagation();\n });\n\n $('.dropdown-menu a.swh-releases-switch').click(e => {\n setReleasesTabActive();\n e.stopPropagation();\n });\n\n let dropdownResized = false;\n\n // hack to resize the branches/releases dropdown content,\n // taking icons into account, in order to make the whole names readable\n $('#swh-branches-releases-dd').on('show.bs.dropdown', () => {\n if (dropdownResized) return;\n let dropdownWidth = $('.swh-branches-releases').width();\n $('.swh-branches-releases').width(dropdownWidth + 25);\n dropdownResized = true;\n });\n\n if (snapshotContext) {\n if (branch) {\n setBranchesTabActive();\n } else {\n setReleasesTabActive();\n }\n }\n\n });\n\n}\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 {handleFetchError} from 'utils/functions';\n\nconst limit = 100;\nlet linksPrev = [];\nlet linkNext = null;\nlet linkCurrent = null;\nlet inSearch = false;\n\nfunction parseLinkHeader(s) {\n let re = /<(.+)>; rel=\"next\"/;\n return s.match(re)[1];\n}\n\nfunction fixTableRowsStyle() {\n setTimeout(() => {\n $('#origin-search-results tbody tr').removeAttr('style');\n });\n}\n\nfunction clearOriginSearchResultsTable() {\n $('#origin-search-results tbody tr').remove();\n}\n\nfunction populateOriginSearchResultsTable(origins) {\n if (origins.length > 0) {\n $('#swh-origin-search-results').show();\n $('#swh-no-result').hide();\n clearOriginSearchResultsTable();\n let table = $('#origin-search-results tbody');\n for (let [i, origin] of origins.entries()) {\n let browseUrl = `${Urls.browse_origin()}?origin_url=${origin.url}`;\n let tableRow =\n `<tr id=\"origin-${i}\" class=\"swh-search-result-entry swh-tr-hover-highlight\">`;\n tableRow +=\n `<td id=\"visit-type-origin-${i}\" style=\"width: 120px;\">` +\n '<i title=\"Checking software origin type\" class=\"mdi mdi-sync mdi-spin mdi-fw\"></i>' +\n 'Checking</td>';\n tableRow +=\n '<td style=\"white-space: nowrap;\">' +\n `<a href=\"${encodeURI(browseUrl)}\">${encodeURI(origin.url)}</a></td>`;\n tableRow +=\n `<td class=\"swh-visit-status\" id=\"visit-status-origin-${i}\">` +\n '<i title=\"Checking archiving status\" class=\"mdi mdi-sync mdi-spin mdi-fw\"></i>' +\n 'Checking</td>';\n tableRow += '</tr>';\n table.append(tableRow);\n // get async latest visit snapshot and update visit status icon\n let latestSnapshotUrl = Urls.api_1_origin_visit_latest(origin.url);\n latestSnapshotUrl += '?require_snapshot=true';\n fetch(latestSnapshotUrl)\n .then(response => response.json())\n .then(data => {\n $(`#visit-type-origin-${i}`).html(data.type);\n $(`#visit-status-origin-${i}`).children().remove();\n if (data) {\n $(`#visit-status-origin-${i}`).html(\n '<i title=\"Software origin has been archived by Software Heritage\" ' +\n 'class=\"mdi mdi-check-bold mdi-fw\"></i>Archived');\n } else {\n $(`#visit-status-origin-${i}`).html(\n '<i title=\"Software origin archival by Software Heritage is pending\" ' +\n 'class=\"mdi mdi-close-thick mdi-fw\"></i>Pending archival');\n if ($('#swh-filter-empty-visits').prop('checked')) {\n $(`#origin-${i}`).remove();\n }\n }\n });\n }\n fixTableRowsStyle();\n } else {\n $('#swh-origin-search-results').hide();\n $('#swh-no-result').text('No origins matching the search criteria were found.');\n $('#swh-no-result').show();\n }\n\n if (linkNext === null) {\n $('#origins-next-results-button').addClass('disabled');\n } else {\n $('#origins-next-results-button').removeClass('disabled');\n }\n\n if (linksPrev.length === 0) {\n $('#origins-prev-results-button').addClass('disabled');\n } else {\n $('#origins-prev-results-button').removeClass('disabled');\n }\n\n inSearch = false;\n setTimeout(() => {\n window.scrollTo(0, 0);\n });\n}\n\nfunction searchOriginsFirst(searchQueryText, limit) {\n let baseSearchUrl;\n let searchMetadata = $('#swh-search-origin-metadata').prop('checked');\n if (searchMetadata) {\n baseSearchUrl = new URL(Urls.api_1_origin_metadata_search(), window.location);\n baseSearchUrl.searchParams.append('fulltext', searchQueryText);\n } else {\n baseSearchUrl = new URL(Urls.api_1_origin_search(searchQueryText), window.location);\n }\n\n let withVisit = $('#swh-search-origins-with-visit').prop('checked');\n baseSearchUrl.searchParams.append('limit', limit);\n baseSearchUrl.searchParams.append('with_visit', withVisit);\n let searchUrl = baseSearchUrl.toString();\n searchOrigins(searchUrl);\n}\n\nfunction searchOrigins(searchUrl) {\n clearOriginSearchResultsTable();\n $('.swh-loading').addClass('show');\n let response = fetch(searchUrl)\n .then(handleFetchError)\n .then(resp => {\n response = resp;\n return response.json();\n })\n .then(data => {\n // Save link to the current results page\n linkCurrent = searchUrl;\n // Save link to the next results page.\n linkNext = null;\n if (response.headers.has('Link')) {\n let parsedLink = parseLinkHeader(response.headers.get('Link'));\n if (parsedLink !== undefined) {\n linkNext = parsedLink;\n }\n }\n // prevLinks is updated by the caller, which is the one to know if\n // we're going forward or backward in the pages.\n\n $('.swh-loading').removeClass('show');\n populateOriginSearchResultsTable(data);\n })\n .catch(response => {\n $('.swh-loading').removeClass('show');\n inSearch = false;\n $('#swh-origin-search-results').hide();\n $('#swh-no-result').text(`Error ${response.status}: ${response.statusText}`);\n $('#swh-no-result').show();\n });\n}\n\nfunction doSearch() {\n $('#swh-no-result').hide();\n let searchQueryText = $('#origins-url-patterns').val();\n inSearch = true;\n if (searchQueryText.startsWith('swh:')) {\n // searchQueryText may be a PID so sending search queries to PID resolve endpoint\n let resolveSWHIDUrl = Urls.api_1_resolve_swhid(searchQueryText);\n fetch(resolveSWHIDUrl)\n .then(handleFetchError)\n .then(response => response.json())\n .then(data => {\n // SWHID has been successfully resolved,\n // so redirect to browse page\n window.location = data.browse_url;\n })\n .catch(response => {\n // display a useful error message if the input\n // looks like a SWHID\n response.json().then(data => {\n $('#swh-origin-search-results').hide();\n $('.swh-search-pagination').hide();\n $('#swh-no-result').text(data.reason);\n $('#swh-no-result').show();\n });\n\n });\n } else {\n // otherwise, proceed with origins search\n $('#swh-origin-search-results').show();\n $('.swh-search-pagination').show();\n searchOriginsFirst(searchQueryText, limit);\n }\n}\n\nexport function initOriginSearch() {\n $(document).ready(() => {\n $('#swh-search-origins').submit(event => {\n event.preventDefault();\n let searchQueryText = $('#origins-url-patterns').val().trim();\n let withVisit = $('#swh-search-origins-with-visit').prop('checked');\n let withContent = $('#swh-filter-empty-visits').prop('checked');\n let searchMetadata = $('#swh-search-origin-metadata').prop('checked');\n let queryParameters = new URLSearchParams();\n queryParameters.append('q', searchQueryText);\n if (withVisit) {\n queryParameters.append('with_visit', withVisit);\n }\n if (withContent) {\n queryParameters.append('with_content', withContent);\n }\n if (searchMetadata) {\n queryParameters.append('search_metadata', searchMetadata);\n }\n // Update the url, triggering page reload and effective search\n window.location = `${Urls.browse_search()}?${queryParameters.toString()}`;\n });\n\n $('#origins-next-results-button').click(event => {\n if ($('#origins-next-results-button').hasClass('disabled') || inSearch) {\n return;\n }\n inSearch = true;\n linksPrev.push(linkCurrent);\n searchOrigins(linkNext);\n event.preventDefault();\n });\n\n $('#origins-prev-results-button').click(event => {\n if ($('#origins-prev-results-button').hasClass('disabled') || inSearch) {\n return;\n }\n inSearch = true;\n searchOrigins(linksPrev.pop());\n event.preventDefault();\n });\n\n let urlParams = new URLSearchParams(window.location.search);\n let query = urlParams.get('q');\n let withVisit = urlParams.has('with_visit');\n let withContent = urlParams.has('with_content');\n let searchMetadata = urlParams.has('search_metadata');\n if (query) {\n $('#origins-url-patterns').val(query);\n $('#swh-search-origins-with-visit').prop('checked', withVisit);\n $('#swh-filter-empty-visits').prop('checked', withContent);\n $('#swh-search-origin-metadata').prop('checked', searchMetadata);\n doSearch();\n }\n });\n}\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 {BREAKPOINT_SM} from 'utils/constants';\n\n$(document).ready(() => {\n\n $('.dropdown-submenu a.dropdown-item').on('click', e => {\n $(e.target).next('div').toggle();\n if ($(e.target).next('div').css('display') !== 'none') {\n $(e.target).focus();\n } else {\n $(e.target).blur();\n }\n e.stopPropagation();\n e.preventDefault();\n });\n\n $('.swh-popover-toggler').popover({\n boundary: 'viewport',\n container: 'body',\n html: true,\n placement: function() {\n const width = $(window).width();\n if (width < BREAKPOINT_SM) {\n return 'top';\n } else {\n return 'right';\n }\n },\n template: `<div class=\"popover\" role=\"tooltip\">\n <div class=\"arrow\"></div>\n <h3 class=\"popover-header\"></h3>\n <div class=\"popover-body swh-popover\"></div>\n </div>`,\n content: function() {\n var content = $(this).attr('data-popover-content');\n return $(content).children('.popover-body').remove().html();\n },\n title: function() {\n var title = $(this).attr('data-popover-content');\n return $(title).children('.popover-heading').html();\n },\n offset: '50vh',\n sanitize: false\n });\n\n $('.swh-vault-menu a.dropdown-item').on('click', e => {\n $('.swh-popover-toggler').popover('hide');\n });\n\n $('.swh-popover-toggler').on('show.bs.popover', (e) => {\n $(`.swh-popover-toggler:not(#${e.currentTarget.id})`).popover('hide');\n $('.swh-vault-menu .dropdown-menu').hide();\n });\n\n $('.swh-actions-dropdown').on('hide.bs.dropdown', () => {\n $('.swh-vault-menu .dropdown-menu').hide();\n $('.swh-popover-toggler').popover('hide');\n });\n\n $('body').on('click', e => {\n if ($(e.target).parents('.swh-popover').length) {\n e.stopPropagation();\n }\n });\n\n});\n\nexport function initBrowseNavbar() {\n if (window.location.pathname === Urls.browse_origin_visits()) {\n $('#swh-browse-origin-visits-nav-link').addClass('active');\n } else if (window.location.pathname === Urls.browse_origin_branches() ||\n window.location.pathname === Urls.browse_snapshot_branches()) {\n $('#swh-browse-snapshot-branches-nav-link').addClass('active');\n } else if (window.location.pathname === Urls.browse_origin_releases() ||\n window.location.pathname === Urls.browse_snapshot_releases()) {\n $('#swh-browse-snapshot-releases-nav-link').addClass('active');\n } else {\n $('#swh-browse-code-nav-link').addClass('active');\n }\n}\n",
"/**\n * Copyright (C) 2018-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 ClipboardJS from 'clipboard';\nimport 'thirdparty/jquery.tabSlideOut/jquery.tabSlideOut';\nimport 'thirdparty/jquery.tabSlideOut/jquery.tabSlideOut.css';\n\nimport {BREAKPOINT_SM} from 'utils/constants';\n\nexport function swhIdObjectTypeToggled(event) {\n event.preventDefault();\n $(event.target).tab('show');\n}\n\nexport function swhIdContextOptionToggled(event) {\n event.stopPropagation();\n let swhIdElt = $(event.target).closest('.swhid-ui').find('.swhid');\n let swhIdWithContext = $(event.target).data('swhid-with-context');\n let currentSwhId = swhIdElt.text();\n if ($(event.target).prop('checked')) {\n currentSwhId = swhIdWithContext;\n } else {\n const pos = currentSwhId.indexOf(';');\n if (pos !== -1) {\n currentSwhId = currentSwhId.slice(0, pos);\n }\n }\n swhIdElt.text(currentSwhId);\n swhIdElt.attr('href', '/' + currentSwhId + '/');\n\n addLinesInfo();\n}\n\nfunction addLinesInfo() {\n let swhIdElt = $('#swhid-tab-content').find('.swhid');\n let currentSwhId = swhIdElt.text();\n let lines = [];\n let linesPart = ';lines=';\n let linesRegexp = new RegExp(/L(\\d+)/g);\n let line = linesRegexp.exec(window.location.hash);\n while (line) {\n lines.push(parseInt(line[1]));\n line = linesRegexp.exec(window.location.hash);\n }\n if (lines.length > 0) {\n linesPart += lines[0];\n }\n if (lines.length > 1) {\n linesPart += '-' + lines[1];\n }\n\n if ($('#swhid-context-option-content').prop('checked')) {\n currentSwhId = currentSwhId.replace(/;lines=\\d+-*\\d*/g, '');\n if (lines.length > 0) {\n currentSwhId += linesPart;\n }\n\n swhIdElt.text(currentSwhId);\n swhIdElt.attr('href', '/' + currentSwhId + '/');\n }\n}\n\n$(document).ready(() => {\n new ClipboardJS('.btn-swhid-copy', {\n text: trigger => {\n let swhId = $(trigger).closest('.swhid-ui').find('.swhid').text();\n return swhId;\n }\n });\n\n new ClipboardJS('.btn-swhid-url-copy', {\n text: trigger => {\n let swhId = $(trigger).closest('.swhid-ui').find('.swhid').text();\n return window.location.origin + '/' + swhId + '/';\n }\n });\n\n if (window.innerWidth * 0.7 > 1000) {\n $('#swh-identifiers').css('width', '1000px');\n }\n\n let tabSlideOptions = {\n tabLocation: 'right',\n clickScreenToCloseFilters: ['.ui-slideouttab-panel', '.modal'],\n offset: function() {\n const width = $(window).width();\n if (width < BREAKPOINT_SM) {\n return '250px';\n } else {\n return '200px';\n }\n }\n };\n // ensure tab scrolling on small screens\n if (window.innerHeight < 600 || window.innerWidth < 500) {\n tabSlideOptions['otherOffset'] = '20px';\n }\n\n // initiate the sliding identifiers tab\n $('#swh-identifiers').tabSlideOut(tabSlideOptions);\n\n // set the tab visible once the close animation is terminated\n $('#swh-identifiers').css('display', 'block');\n $('.swhid-context-option').trigger('click');\n\n // highlighted code lines changed\n $(window).on('hashchange', () => {\n addLinesInfo();\n });\n\n // highlighted code lines removed\n $('body').click(() => {\n addLinesInfo();\n });\n\n});\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, domain) {\n let endOfPattern = '\\\\/[\\\\w\\\\.-]+\\\\/?(?!=.git)(?:\\\\.git(?:\\\\/?|\\\\#[\\\\w\\\\.\\\\-_]+)?)?$';\n let pattern = `(?:git|https?|git@)(?:\\\\:\\\\/\\\\/)?${domain}[/|:][A-Za-z0-9-/]+?` + endOfPattern;\n let re = new RegExp(pattern);\n return re.test(url);\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",
"/**\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 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// main bundle for the swh-web/browse application\n\nimport './browse.css';\nimport './breadcrumbs.css';\nimport './content.css';\nimport './snapshot-navigation.css';\n\nexport * from './snapshot-navigation';\nexport * from './origin-search';\nexport * from './browse-utils';\nexport * from './swhid-utils';\n",
"/*\n tabSlideOUt v2.4\n\n Originally by William Paoli: http://code.google.com/p/tab-slide-out\n Maintained by Michael Fielding: https://github.com/hawk-ip/jquery.tabSlideOut.js\n License: GPL v3.0\n\n To use this you need an element for the tab panel content ('panel'), and inside it an element for the\n tab which will stick out from the window edge and be clickable ('handle'). By default the selector\n for handles is '.handle'.\n\n example HTML:\n\n <div id=\"my-tab\"><span class=\"handle\">Click me</span>Hello World</div>\n\n example JavaScript (puts the tab on the right, and opens it on hover rather than click):\n\n $('#my-tab').tabSlideOut( {'tabLocation':'right','action':'hover'} );\n\n Style the tab panel and handle using CSS. Add the class ui-slideouttab-handle-rounded to handles to give them\n rounded outer corners.\n\n You can use some methods to programmatically interact with tabs. Methods except 'isOpen' are chainable.\n\n $('#my-tab').tabSlideOut('isOpen'); // return true or false\n $('#my-tab').tabSlideOut('open'); // opens it\n $('#my-tab').tabSlideOut('close'); // closes it\n $('#my-tab').tabSlideOut('toggle'); // toggles it\n $('#my-tab').tabSlideOut('bounce'); // bounces the tab\n\n You can also send JQuery events to initiate actions:\n\n $('#my-tab').trigger('open'); // opens it\n $('#my-tab').trigger('close'); // closes it\n $('#my-tab').trigger('toggle'); // toggles it\n $('#my-tab').trigger('bounce'); // bounces the tab\n\n Three events are defined and can be caught when tabs open and close:\n\n $(document).on('slideouttabopen slideouttabclose slideouttabbounce',function(event){\n var $panel = $(event.target);\n var eventType = event.type;\n // your code here\n });\n\n Features are demonstrated on the related demo page.\n*/\n(function($) {\n $.fn.tabSlideOut = function(callerSettings) {\n\n /**\n * @param node Element to get the height of.\n * @return string e.g. '123px'\n */\n function heightAsString(node) {\n return parseInt(node.outerHeight() + 1, 10) + 'px';\n }\n\n /*\n * Get the width of the given border, in pixels.\n *\n * @param node element\n * @param string edge\n * @returns int\n */\n function borderWidth(element, edge) {\n return parseInt(element.css('border-' + edge + '-width'), 10);\n }\n\n /**\n * Return the desired height of the panel to maintain both offsets.\n */\n function calculatePanelSize() {\n var available = $(window).height();\n if (edge === 'top' || edge === 'bottom') {\n available = $(window).width();\n }\n return available - parseInt(settings.otherOffset) - parseInt(settings.offset);\n }\n\n var panel = this;\n\n /**\n * True if the tab is open.\n *\n * @returns boolean\n */\n function isOpen() {\n return panel.hasClass('ui-slideouttab-open');\n }\n\n if (typeof callerSettings === 'string') {\n // param is a string, use command mode\n switch (callerSettings) {\n case 'open':\n this.trigger('open');\n return this;\n case 'close':\n this.trigger('close');\n return this;\n case 'isOpen':\n return isOpen();\n case 'toggle':\n this.trigger('toggle');\n return this;\n case 'bounce':\n this.trigger('bounce');\n return this;\n default:\n throw new Error('Invalid tabSlideOut command');\n }\n } else {\n // param is an object, it's initialisation mode\n var settings = $.extend({\n tabLocation: 'left', // left, right, top or bottom\n tabHandle: '.handle', // JQuery selector for the tab, can use any JQuery selector\n action: 'click', // action which will open the panel, e.g. 'hover'\n hoverTimeout: 5000, // ms to keep tab open after no longer hovered - only if action = 'hover'\n offset: '200px', // panel dist from top or left (bottom or right if offsetReverse is true)\n offsetReverse: false, // if true, panel is offset from right or bottom of window instead of left or top\n otherOffset: null, // if set, panel size is also set to maintain this dist from bottom or right of view port (top or left if offsetReverse)\n handleOffset: null, // e.g. '10px'. If null, detects panel border to align handle nicely on edge\n handleOffsetReverse: false, // if true, handle is offset from right or bottom of panel instead of left or top\n bounceDistance: '50px', // how far bounce event will move everything\n bounceTimes: 4, // how many bounces when 'bounce' is called\n bounceSpeed: 300, // time to animate bounces\n tabImage: null, // optional image to show in the tab\n tabImageHeight: null, // optional IE8 and lower only, else autodetected size\n tabImageWidth: null, // optional IE8 and lower only, else autodetected size\n onLoadSlideOut: false, // slide out after DOM load\n clickScreenToClose: true, // close tab when somewhere outside the tab is clicked\n clickScreenToCloseFilters: ['.ui-slideouttab-panel'], // if click target or parents match any of these, click won't close this tab\n onOpen: function() {}, // handler called after opening\n onClose: function() {} // handler called after closing\n }, callerSettings || {});\n\n var edge = settings.tabLocation;\n var handle = settings.tabHandle = $(settings.tabHandle, panel);\n\n panel.addClass('ui-slideouttab-panel')\n .addClass('ui-slideouttab-' + edge);\n if (settings.offsetReverse) {\n panel.addClass('ui-slideouttab-panel-reverse');\n }\n handle.addClass('ui-slideouttab-handle'); // need this to find it later\n if (settings.handleOffsetReverse) {\n handle.addClass('ui-slideouttab-handle-reverse');\n }\n settings.toggleButton = $(settings.toggleButton);\n\n // apply an image to the tab if one is defined\n if (settings.tabImage !== null) {\n var imageHeight = 0;\n var imageWidth = 0;\n if (settings.tabImageHeight !== null && settings.tabImageWidth !== null) {\n imageHeight = settings.tabImageHeight;\n imageWidth = settings.tabImageWidth;\n } else {\n var img = new Image();\n img.src = settings.tabImage;\n imageHeight = img.naturalHeight;\n imageWidth = img.naturalWidth;\n }\n\n handle.addClass('ui-slideouttab-handle-image');\n handle.css({\n 'background': 'url(' + settings.tabImage + ') no-repeat',\n 'width': imageWidth,\n 'height': imageHeight\n });\n }\n\n // determine whether panel and handle are positioned from top, bottom, left, or right\n if (edge === 'top' || edge === 'bottom') {\n settings.panelOffsetFrom =\n settings.offsetReverse ? 'right' : 'left';\n settings.handleOffsetFrom =\n settings.handleOffsetReverse ? 'right' : 'left';\n } else {\n settings.panelOffsetFrom =\n settings.offsetReverse ? 'bottom' : 'top';\n settings.handleOffsetFrom =\n settings.handleOffsetReverse ? 'bottom' : 'top';\n }\n\n /* autodetect the correct offset for the handle using appropriate panel border */\n if (settings.handleOffset === null) {\n settings.handleOffset = '-' + borderWidth(panel, settings.handleOffsetFrom) + 'px';\n }\n\n if (edge === 'top' || edge === 'bottom') {\n /* set left or right edges */\n panel.css(settings.panelOffsetFrom, settings.offset);\n handle.css(settings.handleOffsetFrom, settings.handleOffset);\n\n // possibly drive the panel size\n if (settings.otherOffset !== null) {\n panel.css('width', calculatePanelSize() + 'px');\n // install resize handler\n $(window).resize(function() {\n panel.css('width', calculatePanelSize() + 'px');\n });\n }\n\n if (edge === 'top') {\n handle.css({'bottom': '-' + heightAsString(handle)});\n } else {\n handle.css({'top': '-' + heightAsString(handle)});\n }\n } else {\n /* set top or bottom edge */\n panel.css(settings.panelOffsetFrom, settings.offset);\n handle.css(settings.handleOffsetFrom, settings.handleOffset);\n\n // possibly drive the panel size\n if (settings.otherOffset !== null) {\n panel.css('height', calculatePanelSize() + 'px');\n // install resize handler\n $(window).resize(function() {\n panel.css('height', calculatePanelSize() + 'px');\n });\n }\n\n if (edge === 'left') {\n handle.css({'right': '0'});\n } else {\n handle.css({'left': '0'});\n }\n }\n\n handle.click(function(event) {\n event.preventDefault();\n });\n settings.toggleButton.click(function(event) {\n event.preventDefault();\n });\n\n // now everything is set up, add the class which enables CSS tab animation\n panel.addClass('ui-slideouttab-ready');\n\n var close = function() {\n panel.removeClass('ui-slideouttab-open').trigger('slideouttabclose');\n settings.onClose();\n };\n\n var open = function() {\n panel.addClass('ui-slideouttab-open').trigger('slideouttabopen');\n settings.onOpen();\n };\n\n var toggle = function() {\n if (isOpen()) {\n close();\n } else {\n open();\n }\n };\n\n // animate the tab in and out when 'bounced'\n var moveIn = [];\n moveIn[edge] = '-=' + settings.bounceDistance;\n var moveOut = [];\n moveOut[edge] = '+=' + settings.bounceDistance;\n\n var bounceIn = function() {\n var temp = panel;\n for (var i = 0; i < settings.bounceTimes; i++) {\n temp = temp.animate(moveIn, settings.bounceSpeed)\n .animate(moveOut, settings.bounceSpeed);\n }\n panel.trigger('slideouttabbounce');\n };\n\n var bounceOut = function() {\n var temp = panel;\n for (var i = 0; i < settings.bounceTimes; i++) {\n temp = temp.animate(moveOut, settings.bounceSpeed)\n .animate(moveIn, settings.bounceSpeed);\n }\n panel.trigger('slideouttabbounce');\n };\n\n // handle clicks in rest of document to close tabs if they're open\n if (settings.clickScreenToClose) {\n // install a click handler to close tab if anywhere outside the tab is clicked,\n // that isn't filtered out by the configured filters\n $(document).click(function(event) {\n // first check the tab is open and the click isn't inside it\n if (isOpen() && !panel[0].contains(event.target)) {\n // something other than this panel was clicked\n var clicked = $(event.target);\n\n // check to see if any filters return true\n for (var i = 0; i < settings.clickScreenToCloseFilters.length; i++) {\n var filter = settings.clickScreenToCloseFilters[i];\n if (typeof filter === 'string') {\n // checked clicked element itself, and all parents\n if (clicked.is(filter) || clicked.parents().is(filter)) {\n return; // don't close the tab\n }\n } else if (typeof filter === 'function') {\n // call custom filter\n if (filter.call(panel, event)) {\n return;\n } // don't close the tab\n }\n }\n\n // we haven't returned true from any filter, so close the tab\n close();\n }\n });\n };\n\n // choose which type of action to bind\n if (settings.action === 'click') {\n handle.click(function(event) {\n toggle();\n });\n } else if (settings.action === 'hover') {\n var timer = null;\n panel.hover(\n function() {\n if (!isOpen()) {\n open();\n }\n timer = null; // eliminate the timer, ensure we don't close now\n },\n function() {\n if (isOpen() && timer === null) {\n timer = setTimeout(function() {\n if (timer) {\n close();\n }\n timer = null;\n }, settings.hoverTimeout);\n }\n });\n\n handle.click(function(event) {\n if (isOpen()) {\n close();\n }\n });\n }\n\n if (settings.onLoadSlideOut) {\n open();\n setTimeout(open, 500);\n }\n\n // custom event handlers -------\n panel.on('open', function(event) {\n if (!isOpen()) {\n open();\n }\n });\n panel.on('close', function(event) {\n if (isOpen()) {\n close();\n }\n });\n panel.on('toggle', function(event) {\n toggle();\n });\n panel.on('bounce', function(event) {\n if (isOpen()) {\n bounceIn();\n } else {\n bounceOut();\n }\n });\n\n }\n return this;\n };\n})(jQuery);\n"
],
"sourceRoot": ""
}

File Metadata

Mime Type
application/json
Expires
Fri, Jul 4, 3:22 PM (6 d, 19 h ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
3259208

Event Timeline