Warmcat homepage andy@warmcat.com
libwebsockets
{"schema":"libjg2-1", "vpath":"/git/", "avatar":"/git/avatar/", "alang":"", "gen_ut":1713626864, "reponame":"gitohashi", "desc":"Git web frontend with clientside rendering", "owner": { "name": "Andy Green", "email": "andy@warmcat.com", "md5": "c50933ca2aa61e0fe2c43d46bb6b59cb" },"url":"https://warmcat.com/repo/gitohashi", "f":3, "items": [ {"schema":"libjg2-1", "cid":"aaf10bda2ffa4957c4c841b88f45ba69", "oid":{ "oid": "9961e6fef5f0f2458efc1c2a40d63f7cc50ebfce", "alias": [ "refs/heads/main","refs/heads/master"]},"blobname": "assets/jg2.js", "blob": "/* jg2.js: javascript functions for gitohashi\n *\n * Copyright (C) 2018 - 2020 Andy Green \u003candy@warmcat.com\u003e\n *\n * This library is free software; you can redistribute it and/or\n * modify it under the terms of the GNU Lesser General Public\n * License as published by the Free Software Foundation:\n * version 2.1 of the License.\n */\n\n/* http://i18njs.com/ this from http://i18njs.com/js/i18n.js */\n(function() {\n var Translator, i18n, translator,\n __bind \u003d function(fn, me){ return function(){ return fn.apply(me, arguments); }; };\n\n Translator \u003d (function() {\n function Translator() {\n this.translate \u003d __bind(this.translate, this); this.data \u003d {\n values: {},\n contexts: []\n };\n this.globalContext \u003d {};\n }\n\n Translator.prototype.translate \u003d function(text, defaultNumOrFormatting, numOrFormattingOrContext, formattingOrContext, context) {\n var defaultText, formatting, isObject, num;\n\n if (context \u003d\u003d null) {\n context \u003d this.globalContext;\n }\n isObject \u003d function(obj) {\n var type;\n\n type \u003d typeof obj;\n return type \u003d\u003d\u003d \u0022function\u0022 || type \u003d\u003d\u003d \u0022object\u0022 \u0026\u0026 !!obj;\n };\n if (isObject(defaultNumOrFormatting)) {\n defaultText \u003d null;\n num \u003d null;\n formatting \u003d defaultNumOrFormatting;\n context \u003d numOrFormattingOrContext || this.globalContext;\n } else {\n if (typeof defaultNumOrFormatting \u003d\u003d\u003d \u0022number\u0022) {\n defaultText \u003d null;\n num \u003d defaultNumOrFormatting;\n formatting \u003d numOrFormattingOrContext;\n context \u003d formattingOrContext || this.globalContext;\n } else {\n defaultText \u003d defaultNumOrFormatting;\n if (typeof numOrFormattingOrContext \u003d\u003d\u003d \u0022number\u0022) {\n num \u003d numOrFormattingOrContext;\n formatting \u003d formattingOrContext;\n // context \u003d context;\n } else {\n num \u003d null;\n formatting \u003d numOrFormattingOrContext;\n context \u003d formattingOrContext || this.globalContext;\n }\n }\n }\n if (isObject(text)) {\n if (isObject(text['i18n'])) {\n text \u003d text['i18n'];\n }\n return this.translateHash(text, context);\n } else {\n return this.translateText(text, num, formatting, context, defaultText);\n }\n };\n\n Translator.prototype.add \u003d function(d) {\n var c, v, _i, _len, _ref, _ref1, _results;\n\n if ((d.values !\u003d null)) {\n _ref \u003d d.values;\n var k;\n for (k in _ref) {\n \t if ({}.hasOwnProperty.call(_ref, k)) {\n v \u003d _ref[k];\n this.data.values[k] \u003d v;\n \t }\n }\n }\n if ((d.contexts !\u003d null)) {\n _ref1 \u003d d.contexts;\n _results \u003d [];\n for (_i \u003d 0, _len \u003d _ref1.length; _i \u003c _len; _i++) {\n c \u003d _ref1[_i];\n _results.push(this.data.contexts.push(c));\n }\n return _results;\n }\n };\n\n Translator.prototype.setContext \u003d function(key, value) {\n return this.globalContext[key] \u003d value;\n };\n\n Translator.prototype.clearContext \u003d function(key) {\n return this.lobalContext[key] \u003d null;\n };\n\n Translator.prototype.reset \u003d function() {\n this.data \u003d {\n values: {},\n contexts: []\n };\n return this.globalContext \u003d {};\n };\n\n Translator.prototype.resetData \u003d function() {\n return this.data \u003d {\n values: {},\n contexts: []\n };\n };\n\n Translator.prototype.resetContext \u003d function() {\n return this.globalContext \u003d {};\n };\n\n Translator.prototype.translateHash \u003d function(hash, context) {\n var k, v;\n\n for (k in hash) {\n \t if ({}.hasOwnProperty.call(hash, k)) {\n\t v \u003d hash[k];\n\t if (typeof v \u003d\u003d\u003d \u0022string\u0022) {\n\t hash[k] \u003d this.translateText(v, null, null, context);\n\t }\n \t }\n }\n return hash;\n };\n\n Translator.prototype.translateText \u003d function(text, num, formatting, context, defaultText) {\n var contextData, result;\n\n if (context \u003d\u003d null) {\n context \u003d this.globalContext;\n }\n if (this.data \u003d\u003d null) {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n contextData \u003d this.getContextData(this.data, context);\n if (contextData !\u003d null) {\n result \u003d this.findTranslation(text, num, formatting, contextData.values, defaultText);\n }\n if (result \u003d\u003d null) {\n result \u003d this.findTranslation(text, num, formatting, this.data.values, defaultText);\n }\n if (result \u003d\u003d null) {\n return this.useOriginalText(defaultText || text, num, formatting);\n }\n return result;\n };\n\n Translator.prototype.findTranslation \u003d function(text, num, formatting, data) {\n var result, triple, value, _i, _len;\n\n value \u003d data[text];\n if (value \u003d\u003d null) {\n return null;\n }\n if (num \u003d\u003d null) {\n if (typeof value \u003d\u003d\u003d \u0022string\u0022) {\n return this.applyFormatting(value, num, formatting);\n }\n } else {\n if (value instanceof Array || value.length) {\n for (_i \u003d 0, _len \u003d value.length; _i \u003c _len; _i++) {\n triple \u003d value[_i];\n if ((num \u003e\u003d triple[0] || triple[0] \u003d\u003d\u003d null) \u0026\u0026 (num \u003c\u003d triple[1] || triple[1] \u003d\u003d\u003d null)) {\n result \u003d this.applyFormatting(triple[2].replace(\u0022-%n\u0022, String(-num)), num, formatting);\n return this.applyFormatting(result.replace(\u0022%n\u0022, String(num)), num, formatting);\n }\n }\n }\n }\n return null;\n };\n\n Translator.prototype.getContextData \u003d function(data, context) {\n var c, equal, key, value, _i, _len, _ref, _ref1;\n\n if (data.contexts \u003d\u003d null) {\n return null;\n }\n _ref \u003d data.contexts;\n for (_i \u003d 0, _len \u003d _ref.length; _i \u003c _len; _i++) {\n c \u003d _ref[_i];\n equal \u003d true;\n _ref1 \u003d c.matches;\n for (key in _ref1) {\n \tif ({}.hasOwnProperty.call(_ref1, key)) {\n \t\tvalue \u003d _ref1[key];\n \t\tequal \u003d equal \u0026\u0026 value \u003d\u003d\u003d context[key];\n \t}\n }\n if (equal) {\n return c;\n }\n }\n return null;\n };\n\n Translator.prototype.useOriginalText \u003d function(text, num, formatting) {\n if (num \u003d\u003d null) {\n return this.applyFormatting(text, num, formatting);\n }\n return this.applyFormatting(text.replace(\u0022%n\u0022, String(num)), num, formatting);\n };\n\n Translator.prototype.applyFormatting \u003d function(text, num, formatting) {\n var ind, regex;\n\n for (ind in formatting) {\n \t if ({}.hasOwnProperty.call(formatting, ind)) {\n\t regex \u003d new RegExp(\u0022%{\u0022 + ind + \u0022}\u0022, \u0022g\u0022);\n\t text \u003d text.replace(regex, formatting[ind]);\n \t }\n }\n return text;\n };\n\n return Translator;\n\n })();\n\n translator \u003d new Translator();\n\n i18n \u003d translator.translate;\n\n i18n.translator \u003d translator;\n\n i18n.create \u003d function(data) {\n var trans;\n\n trans \u003d new Translator();\n if (data !\u003d null) {\n trans.add(data);\n }\n trans.translate.create \u003d i18n.create;\n return trans.translate;\n };\n\n (typeof module !\u003d\u003d \u0022undefined\u0022 \u0026\u0026 module !\u003d\u003d null ? module.exports \u003d i18n : void 0) || \n \t(this.i18n \u003d i18n);\n\n}.call(this));\n\nvar lang_ja \u003d \u0022{\u0022 +\n \u0022\u005c\u0022values\u005c\u0022:{\u0022 +\n \u0022\u005c\u0022Summary\u005c\u0022: \u005c\u0022概要\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Log\u005c\u0022: \u005c\u0022ログ\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tree\u005c\u0022: \u005c\u0022木構造\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Blame\u005c\u0022: \u005c\u0022責任\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Copy Lines\u005c\u0022: \u005c\u0022コピーライン\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Copy Link\u005c\u0022: \u005c\u0022リンクをコピーする\u005c\u0022,\u0022 +\n \u0022\u005c\u0022View Blame\u005c\u0022: \u005c\u0022責任がある\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Remove Blame\u005c\u0022: \u005c\u0022責任を取り除く\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Mode\u005c\u0022: \u005c\u0022モード\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Size\u005c\u0022: \u005c\u0022サイズ\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Name\u005c\u0022: \u005c\u0022名\u005c\u0022,\u0022 +\n \u0022\u005c\u0022s\u005c\u0022: \u005c\u0022秒\u005c\u0022,\u0022 +\n \u0022\u005c\u0022m\u005c\u0022: \u005c\u0022分\u005c\u0022,\u0022 +\n \u0022\u005c\u0022h\u005c\u0022: \u005c\u0022時間\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 days\u005c\u0022: \u005c\u0022日々\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022 weeks\u005c\u0022: \u005c\u0022週\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022 months\u005c\u0022: \u005c\u0022数ヶ月\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022 years\u005c\u0022: \u005c\u0022年\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Branch Snapshot\u005c\u0022: \u005c\u0022ブランチスナップショット\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Tag Snapshot\u005c\u0022: \u005c\u0022タグスナップショット\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Commit Snapshot\u005c\u0022: \u005c\u0022スナップショットをコミットする\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Description\u005c\u0022: \u005c\u0022説明\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Owner\u005c\u0022: \u005c\u0022オーナー\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Branch\u005c\u0022: \u005c\u0022ブランチ\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Tag\u005c\u0022: \u005c\u0022タグ\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Author\u005c\u0022: \u005c\u0022著者\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Age\u005c\u0022: \u005c\u0022年齢\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Page fetched\u005c\u0022: \u005c\u0022ページを取得した\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022creation time\u005c\u0022: \u005c\u0022作成時間\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022created\u005c\u0022: \u005c\u0022作成した\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022ago\u005c\u0022: \u005c\u0022前\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Message\u005c\u0022: \u005c\u0022メッセージ\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Download\u005c\u0022: \u005c\u0022ダウンロード\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022root\u005c\u0022: \u005c\u0022ルート\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Committer\u005c\u0022: \u005c\u0022コミッター\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Raw Patch\u005c\u0022: \u005c\u0022生パッチ\u005c\u0022,\u0022 +\n\t\u0022\u005c\u0022Page fetched %{pf} ago, creation time: %{ct}ms \u0022 +\n \t \u0022(vhost etag hits: %{ve}%, cache hits: %{ch}%)\u005c\u0022: \u0022 +\n \t\u0022\u005c\u0022%{pf}間前に取得されたページ, 作成にかかった時間: %{ct}ms \u0022 +\n \t \u0022(vhost etag キャッシュヒット: %{ve}%, キャッシュヒット: %{ch}%)\u005c\u0022,\u0022 +\n \t\u0022\u005c\u0022Created %{pf} ago, creation time: %{ct}ms \u005c\u0022:\u0022 +\n \t \u0022\u005c\u0022%{pf}間前に作成されました, 作成にかかった時間: %{ct}ms\u005c\u0022\u0022 +\n \u0022}}\u0022;\n\nvar lang_zht \u003d \u0022{\u0022 +\n\u0022\u005c\u0022values\u005c\u0022:{\u0022 +\n \u0022\u005c\u0022Summary\u005c\u0022: \u005c\u0022概要\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Log\u005c\u0022: \u005c\u0022日誌\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tree\u005c\u0022: \u005c\u0022樹\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Blame\u005c\u0022: \u005c\u0022責怪\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Copy Lines\u005c\u0022: \u005c\u0022複製線\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Copy Link\u005c\u0022: \u005c\u0022複製鏈接\u005c\u0022,\u0022 +\n \u0022\u005c\u0022View Blame\u005c\u0022: \u005c\u0022看責怪\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Remove Blame\u005c\u0022: \u005c\u0022刪除責怪\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Mode\u005c\u0022: \u005c\u0022模式\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Size\u005c\u0022: \u005c\u0022尺寸\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Name\u005c\u0022: \u005c\u0022名稱\u005c\u0022,\u0022 +\n \u0022\u005c\u0022s\u005c\u0022: \u005c\u0022秒\u005c\u0022,\u0022 +\n \u0022\u005c\u0022m\u005c\u0022: \u005c\u0022分鐘\u005c\u0022,\u0022 +\n \u0022\u005c\u0022h\u005c\u0022: \u005c\u0022小時\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 days\u005c\u0022: \u005c\u0022天\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 weeks\u005c\u0022: \u005c\u0022週\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 months\u005c\u0022: \u005c\u0022個月\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 years\u005c\u0022: \u005c\u0022年份\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Branch Snapshot\u005c\u0022: \u005c\u0022科快照\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tag Snapshot\u005c\u0022: \u005c\u0022标签快照\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Commit Snapshot\u005c\u0022: \u005c\u0022提交快照\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Description\u005c\u0022: \u005c\u0022描述\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Owner\u005c\u0022: \u005c\u0022所有者\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Branch\u005c\u0022: \u005c\u0022科\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tag\u005c\u0022: \u005c\u0022標籤\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Author\u005c\u0022: \u005c\u0022作者\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Age\u005c\u0022: \u005c\u0022年齡\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Page fetched\u005c\u0022: \u005c\u0022頁面已獲取\u005c\u0022,\u0022 +\n \u0022\u005c\u0022creation time\u005c\u0022: \u005c\u0022創作時間\u005c\u0022,\u0022 +\n \u0022\u005c\u0022created\u005c\u0022: \u005c\u0022創建\u005c\u0022,\u0022 +\n \u0022\u005c\u0022ago\u005c\u0022: \u005c\u0022前\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Message\u005c\u0022: \u005c\u0022信息\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Download\u005c\u0022: \u005c\u0022下載\u005c\u0022,\u0022 +\n \u0022\u005c\u0022root\u005c\u0022: \u005c\u0022根源\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Committer\u005c\u0022: \u005c\u0022提交者\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Raw Patch\u005c\u0022: \u005c\u0022原始補丁\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Page fetched %{pf} ago, creation time: %{ct}ms \u0022 +\n \t \u0022(vhost etag hits: %{ve}%, cache hits: %{ch}%)\u005c\u0022: \u0022 +\n \t\u0022\u005c\u0022頁面%{pf}前獲取, 創作時間: %{ct}ms \u0022 +\n \t \u0022(vhost etag 緩存命中: %{ve}%, 緩存命中: %{ch}%)\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Created %{pf} ago, creation time: %{ct}ms \u005c\u0022:\u0022 +\n \t\u0022\u005c\u0022%{pf}前創建, 創作時間: %{ct}ms \u005c\u0022\u0022 +\n\u0022}}\u0022;\n\nvar lang_zhs \u003d \u0022{\u0022 +\n\u0022\u005c\u0022values\u005c\u0022:{\u0022 +\n \u0022\u005c\u0022Summary\u005c\u0022: \u005c\u0022概要\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Log\u005c\u0022: \u005c\u0022日志\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tree\u005c\u0022: \u005c\u0022木\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Blame\u005c\u0022: \u005c\u0022归咎\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Copy Lines\u005c\u0022: \u005c\u0022复制线\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Copy Link\u005c\u0022: \u005c\u0022复制链接\u005c\u0022,\u0022 +\n \u0022\u005c\u0022View Blame\u005c\u0022: \u005c\u0022看责备\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Remove Blame\u005c\u0022: \u005c\u0022删除责备\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Mode\u005c\u0022: \u005c\u0022模式\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Size\u005c\u0022: \u005c\u0022尺寸\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Name\u005c\u0022: \u005c\u0022名称\u005c\u0022,\u0022 +\n \u0022\u005c\u0022s\u005c\u0022: \u005c\u0022秒\u005c\u0022,\u0022 +\n \u0022\u005c\u0022m\u005c\u0022: \u005c\u0022分钟\u005c\u0022,\u0022 +\n \u0022\u005c\u0022h\u005c\u0022: \u005c\u0022小时\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 days\u005c\u0022: \u005c\u0022天\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 weeks\u005c\u0022: \u005c\u0022周\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 months\u005c\u0022: \u005c\u0022个月\u005c\u0022,\u0022 +\n \u0022\u005c\u0022 years\u005c\u0022: \u005c\u0022年份\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Branch Snapshot\u005c\u0022: \u005c\u0022科快照\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tag Snapshot\u005c\u0022: \u005c\u0022标签快照\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Commit Snapshot\u005c\u0022: \u005c\u0022提交快照\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Description\u005c\u0022: \u005c\u0022描述\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Owner\u005c\u0022: \u005c\u0022所有者\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Branch\u005c\u0022: \u005c\u0022科\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Tag\u005c\u0022: \u005c\u0022标签\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Author\u005c\u0022: \u005c\u0022作者\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Age\u005c\u0022: \u005c\u0022年龄\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Page fetched\u005c\u0022: \u005c\u0022页面已获取\u005c\u0022,\u0022 +\n \u0022\u005c\u0022creation time\u005c\u0022: \u005c\u0022创作时间\u005c\u0022,\u0022 +\n \u0022\u005c\u0022created\u005c\u0022: \u005c\u0022创建\u005c\u0022,\u0022 +\n \u0022\u005c\u0022ago\u005c\u0022: \u005c\u0022前\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Message\u005c\u0022: \u005c\u0022信息\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Download\u005c\u0022: \u005c\u0022下载\u005c\u0022,\u0022 +\n \u0022\u005c\u0022root\u005c\u0022: \u005c\u0022根源\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Committer\u005c\u0022: \u005c\u0022提交者\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Raw Patch\u005c\u0022: \u005c\u0022原始补丁\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Page fetched %{pf} ago, creation time: %{ct}ms \u0022 +\n\t \u0022(vhost etag hits: %{ve}%, cache hits: %{ch}%)\u005c\u0022: \u0022 +\n\t\u0022\u005c\u0022页面%{pf}前获取, 创作时间: %{ct}ms \u0022 +\n\t \u0022(vhost etag 缓存命中: %{ve}%, 缓存命中: %{ch}%)\u005c\u0022,\u0022 +\n \u0022\u005c\u0022Created %{pf} ago, creation time: %{ct}ms \u005c\u0022:\u0022 +\n\t \t\u0022\u005c\u0022%{pf}前创建, 创作时间: %{ct}ms \u005c\u0022\u0022 +\t \n\u0022}}\u0022;\n\n\n(function () {\n\t\nfunction san(s)\n{\n\tif (!s)\n\t\treturn \u0022\u0022;\n\n\treturn s.replace(/\u0026/g, \u0022\u0026amp;\u0022).\n\t\t replace(/\u005c\u003c/g, \u0022\u0026lt;\u0022).\n\t\t replace(/\u005c\u003e/g, \u0022\u0026gt;\u0022).\n\t\t\t replace(/\u005c\u0022/g, \u0022\u0026quot;\u0022).\n\t\t\t replace(/%/g, \u0022\u0026#37;\u0022);\n}\n\nfunction san_nq(s)\n{\n\tif (!s)\n\t\treturn \u0022\u0022;\n\n\treturn s.replace(/\u0026/g, \u0022\u0026amp;\u0022).\n\t\t replace(/\u003c/g, \u0022\u0026lt;\u0026#8203;\u0022).\n\t\t replace(/\u003e/g, \u0022\u0026gt;\u0022).\n\t\t\t replace(/%/g, \u0022\u0026#37;\u0022);\n}\n\nvar burger, menu_popup, j_avatar, menu_popup_archive, jf, blog_mode \u003d 0;\n\nfunction collect_offsetTop(e1)\n{\n\tvar t \u003d 0;\n\n\twhile (e1) {\n\t\tif (e1.offsetTop)\n\t\t\tt +\u003d e1.offsetTop;\n\t\te1 \u003d e1.offsetParent;\n\t}\n\n\treturn t;\n}\n\nfunction collect_offsetLeft(e1)\n{\n\tvar t \u003d 0;\n\n\twhile (e1) {\n\t\tif (e1.offsetLeft)\n\t\t\tt +\u003d e1.offsetLeft;\n\t\te1 \u003d e1.offsetParent;\n\t}\n\n\treturn t;\n}\n\nfunction find_parent_of_type(e, type)\n{\n\twhile (e.tagName.toLowerCase() !\u003d\u003d type)\n\t\te \u003d e.parentNode;\n\n\treturn e;\n}\n\nfunction parse_hashurl_start(h)\n{\n\treturn parseInt(h.substring(2), 10);\n}\n\nfunction parse_hashurl_end(h, start)\n{\n\tvar t \u003d h.indexOf(\u0022-\u0022), e \u003d start;\n\n\tif (t \u003e\u003d 1)\n\t\te \u003d parseInt(h.substring(t + 1), 10);\n\n\tif (e \u003c start)\n\t\te \u003d start;\n\n\treturn e;\n}\n\nfunction burger_create(e)\n{\n\tvar e1 \u003d e, etable, d \u003d new Date;\n\n\tif (burger)\n\t\tburger.remove();\n\n\tburger \u003d document.createElement(\u0022DIV\u0022);\n\tburger.className \u003d \u0022burger\u0022;\n\tburger.style.top \u003d collect_offsetTop(e1) + \u0022px\u0022;\n\n\t/* event listener cannot override default browser #URL behaviour */\n\tburger.onclick \u003d burger_click;\n\n\tetable \u003d find_parent_of_type(e, \u0022table\u0022);\n\tetable.insertBefore(burger, etable.firstChild);\n\tburger_time \u003d d.getTime();\n\n\tsetTimeout(function() {\n\t\tburger.style.opacity \u003d \u00221\u0022;\n\t}, 1);\n}\n\n/*\n * This creates an absolute div as a child of the content table.\n * It's horizontally and vertically aligned and sized according\n * to the #URL information like #n123-456\n * \n * If the highlight div already exists, it's removed and remade.\n */\n\nfunction line_range_highlight(do_burger)\n{\n\tvar h \u003d window.location.hash, l1 \u003d 0, l2 \u003d 0, e, t;\n\n\te \u003d document.getElementById(\u0022sel-line-range\u0022);\n\tif (e) {\n\t\tl1 \u003d e.l1;\n\n\t\twhile (l1 \u003c\u003d e.l2) {\n\t\t\tvar e1;\n\t\t\te1 \u003d document.getElementById('n' + l1++);\n\t\t\t\te1.classList.remove(\n\t\t\t\t\t'selected-line-link-highlight');\n\t\t}\n\n\t\te.remove();\n\t}\n\n\tl1 \u003d parse_hashurl_start(h);\n\tif (!l1)\n\t\treturn;\n\n\tl2 \u003d parse_hashurl_end(h, l1);\n\n\tvar etr, de, n, hl, v, f;\n\n\te \u003d document.getElementById('n' + l1);\n\tf \u003d document.getElementById('n' + l2);\n\n\tif (!e || !f)\n\t\treturn;\n\n\tif (do_burger)\n\t\tburger_create(e);\n\n\tde \u003d document.createElement(\u0022DIV\u0022);\n\n\tde.className \u003d \u0022selected-lines\u0022;\n\tde.style.bottom \u003d e.style.bottom;\n\tde.style.top \u003d collect_offsetTop(e) + 'px';\n\tde.id \u003d \u0022sel-line-range\u0022;\n\tde.l1 \u003d l1;\n\tde.l2 \u003d l2;\n\n\t/* we will tack the highlight div at the parent tr */\n\tetr \u003d find_parent_of_type(e, \u0022tbody\u0022);\n\n\tde.style.width \u003d etr.offsetWidth + 'px';\n\n\t/* the table is offset from the left, the highlight needs to follow it */\n\t// etable \u003d find_parent_of_type(etr, \u0022table\u0022);\n\t// de.style.left \u003d etable.offsetLeft + 'px';\n\tde.style.height \u003d (collect_offsetTop(f) - collect_offsetTop(e) + f.offsetHeight) + 'px';\n\n\tetr.insertBefore(de, etr.firstChild);\n\n\tsetTimeout(function() {\n\t\tde.style.backgroundColor \u003d \u0022rgba(255, 255, 0, 0.2)\u0022;\n\t}, 1);\n\n\tn \u003d l1;\n\twhile (n \u003c\u003d l2)\n\t\tdocument.getElementById('n' + n++).classList.add(\n\t\t\t\t\t'selected-line-link-highlight');\n\n\thl \u003d (window.innerHeight / (e.offsetHeight + 1));\n\tv \u003d (l1 + ((l2 - l1) / 2)) - (hl / 2);\n\tif (v \u003e l1)\n\t\tv \u003d l1;\n\tif (v \u003c 1)\n\t\tv \u003d 1;\n\n\tt \u003d document.getElementById('n' + Math.round(v));\n\tif (!t)\n\t\tt \u003d e;\n\n\tt.scrollIntoView(true);\n}\n\nfunction copy_clipboard(value, e)\n{\n\tvar inp \u003d document.createElement(\u0022textarea\u0022);\n\n\tinp.type \u003d \u0022text\u0022;\n\tinp.value \u003d value;\n\t/* hidden style stops it working for clipboard */\n\tinp.setAttribute('readonly', '');\n\tinp.style.position \u003d \u0022absolute\u0022;\n\tinp.style.left \u003d \u0022-1000px\u0022;\n\n\te.appendChild(inp);\n\n\tinp.select();\n\n\tdocument.execCommand(\u0022copy\u0022);\n\n\tinp.remove();\n}\n\n/* we want to copy plain text for a line range */\n\nfunction copy_text(elem, l1, l2)\n{\n\tvar tc \u003d elem.textContent.split('\u005cn'), s \u003d \u0022\u0022;\n\n\tl1 --;\n\n\twhile (l1 \u003c l2)\n\t\ts +\u003d tc[l1++] + '\u005cn';\n\n\tcopy_clipboard(s, document.getElementById(\u0022jglinenumbers\u0022));\n}\n\n\nvar branches \u003d new(Array), tags \u003d new(Array), relpre_no_mode,\n\t\tvpath, reponame, rmode, rpath, qbranch, qid, qofs, qsearch;\n\nfunction makeurl(_reponame, _mode, _rpath, _qbranch, _qid, _qofs, _qs)\n{\n\tvar c \u003d '?', b \u003d vpath;\n\n\tif (_reponame \u0026\u0026 b[0] !\u003d\u003d '/')\n\t\tb +\u003d '/';\n\tif (_reponame)\n\t\tb +\u003d _reponame;\n\tif (_mode)\n\t\tb +\u003d '/' + _mode;\n\tif (_rpath)\n\t\tb +\u003d '/' + _rpath;\n\t\n\tif (_qbranch) {\n\t\tb +\u003d '?h\u003d' + _qbranch;\n\t\tc \u003d '\u0026';\n\t}\n\t\n\tif (_qid) {\n\t\tb +\u003d c + 'id\u003d' + _qid;\n\t\tc \u003d '\u0026';\n\t}\n\t\n\tif (_qofs) {\n\t\tb +\u003d c + 'ofs\u003d' + _qofs;\n\t\tc \u003d '\u0026';\n\t}\n\t\n\tif (_qs) {\n\t\tb +\u003d c + 'q\u003d' + _qs;\n\t\t// c \u003d '\u0026';\n\t}\n\n\treturn b;\n}\n\n/*\n * An element in the popup menu was clicked, perform the appropriate action\n */\nfunction mi_click(e) {\n\tvar u, l1, l2, el;\n\n\te.stopPropagation();\n\te.preventDefault();\n\t\n\tu \u003d \u0022\u0022;\n\tif (window.location.hash.length)\n\t\tu \u003d window.location.hash;\n\n\tswitch (e.target.id) {\n\tcase \u0022mi-c-line\u0022:\n\t\tl1 \u003d parse_hashurl_start(window.location.hash);\n\t\tl2 \u003d parse_hashurl_end(window.location.hash, l1);\n\t\tel \u003d document.getElementsByClassName(\u0022doc\u0022)[0].firstChild.firstChild;\n\t\tcopy_text(el, l1, l2);\n\t\tbreak;\n\tcase \u0022mi-c-link\u0022:\n\t\tcopy_clipboard(window.location.href, document.getElementById(\u0022jglinenumbers\u0022));\n\t\tbreak;\n\tcase \u0022mi-c-blame\u0022:\n\t\twindow.location \u003d makeurl(reponame, \u0022blame\u0022, rpath, qbranch, qid, qofs) + u;\n\t\tbreak;\n\tcase \u0022mi-c-tree\u0022:\n\t\twindow.location \u003d makeurl(reponame, \u0022tree\u0022, rpath, qbranch, qid, qofs) + u;\n\t\tbreak;\n\t}\n\n\tif (!menu_popup)\n\t\treturn;\n\n\tmenu_popup.remove();\n\tmenu_popup \u003d null;\n}\n\n/* We got a click on the (***) burger menu */\n\nfunction burger_click(e) {\n\tvar e1 \u003d e, s \u003d \u0022\u0022, n, is_blame,\n\t ar \u003d new Array(\u0022mi-c-line\u0022, \u0022mi-c-link\u0022, \u0022mi-c-blame\u0022, \u0022mi-c-tree\u0022),\n\t an \u003d new Array(i18n(\u0022Copy Lines\u0022), i18n(\u0022Copy Link\u0022),\n\t \t\ti18n(\u0022View Blame\u0022), /* 2: shown in /tree/ */\n\t \t\ti18n(\u0022Remove Blame\u0022) /* 3: shown in /blame/ */);\n\n\te.preventDefault();\n\n\tif (menu_popup) {\n\t\tmenu_popup.remove();\n\t\tmenu_popup \u003d null;\n\n\t\treturn;\n\t}\n\n\t/*\n\t * Create the popup menu\n\t */\n\n\tis_blame \u003d !!rmode \u0026\u0026 rmode \u003d\u003d\u003d \u0022blame\u0022;\n\n\tmenu_popup \u003d document.createElement(\u0022DIV\u0022);\n\tmenu_popup.className \u003d \u0022popup-menu\u0022;\n\tmenu_popup.style.top \u003d collect_offsetTop(e1) + e.offsetHeight + \u0022px\u0022;\n\n\ts \u003d \u0022\u003cul id\u003d'menu-ul'\u003e\u0022;\n\tfor (n \u003d 0; n \u003c an.length; n++)\n\t\tif (n \u003c 2 || is_blame \u003d\u003d\u003d (n \u003d\u003d\u003d 3))\n\t\t\ts +\u003d \u0022\u003cli id\u003d'\u0022 + ar[n] + \u0022' tabindex\u003d'\u0022 + n + \u0022'\u003e\u0022 +\n\t\t\t\tan[n] + \u0022\u003c/li\u003e\u0022;\n\t\t \n\tmenu_popup.innerHTML \u003d s;\n\n\tburger.insertBefore(menu_popup, null);\n\n document.getElementById(ar[0]).focus();\n\tfor (n \u003d 0; n \u003c an.length; n++)\n\t\tif (n \u003c 2 || is_blame \u003d\u003d\u003d (n \u003d\u003d\u003d 3))\n\t\t\tdocument.getElementById(ar[n]).\n\t\t\t\taddEventListener(\u0022click\u0022, mi_click);\n\t\t\t\t\n\tsetTimeout(function() {\n\t\tmenu_popup.style.opacity \u003d \u00221\u0022;\n\t}, 1);\n\n\t/* detect loss of focus for popup menu */\n\tmenu_popup.addEventListener(\u0022focusout\u0022, function(e) {\n\t\t/* if focus went to a child (menu item), ignore */\n\t\tif (e.relatedTarget \u0026\u0026\n\t\t e.relatedTarget.parentNode.id \u003d\u003d\u003d \u0022menu-ul\u0022)\n\t\t\treturn;\n\n\t\tmenu_popup.remove();\n\t\tmenu_popup \u003d null;\n\t});\n}\n\n/*\n * We got a click on a line number #url\n *\n * Create the \u0022burger\u0022 menu there.\n *\n * Redraw the line range highlight accordingly.\n */\n\nfunction line_range_click(e) {\n\tvar t, elem, n \u003d window.location.href.length -\n\t\t\t window.location.hash.length;\n\n\t/* disable passthru to stop scrolling by browser #URL handler */\n\te.stopPropagation();\n\te.preventDefault();\n\n\tif (!e.target.id)\n\t\treturn;\n\n\tif (menu_popup) {\n\t\tmenu_popup.remove();\n\t\tmenu_popup \u003d null;\n\n\t\treturn;\n\t}\n\t\n\tif (e.target.id \u003d\u003d\u003d \u0022jglinenumbers\u0022)\n\t\treturn;\n\n\telem \u003d document.getElementById(e.target.id);\n\tif (!elem)\n\t\treturn;\n\n\tburger_create(elem);\n\n\tif (!window.location.hash ||\n\t window.location.hash.indexOf(\u0022-\u0022) \u003e\u003d 0 ||\n\t e.target.id.substring(1) \u003d\u003d\u003d window.location.href.substring(n + 2))\n\t\tt \u003d window.location.href.substring(0, n) +\n\t\t '#n' + e.target.id.substring(1);\n\telse {\n\t\tif (parseInt(window.location.hash.substring(2), 10) \u003c\n\t\t parseInt(e.target.id.substring(1), 10)) /* forwards */\n\t\t\tt \u003d window.location + '-' + e.target.id.substring(1);\n\t\telse\n\t\t\tt \u003d window.location.href.substring(0, n) +\n\t\t\t\t'#n' + e.target.id.substring(1) + '-' +\n\t\t\t\twindow.location.href.substring(n + 2);\n\t}\n\n\twindow.history.replaceState(null, null, t);\n\n\tline_range_highlight(0);\n}\n\nvar age_names \u003d [ \u0022s\u0022, \u0022m\u0022, \u0022h\u0022, \u0022 days\u0022, \u0022 weeks\u0022, \u0022 months\u0022, \u0022 years\u0022 ];\nvar age_div \u003d [ 1, 60, 3600, 86400, 604800, 2419200, 31536000 ];\nvar age_limit \u003d [ 120, 7200, 172800, 1209600, 4838400, 63072000, 0 ];\nvar age_upd \u003d [ 5, 10, 300, 1800, 3600, 12 * 3600, 12 * 3600 ];\n\nfunction agify(now, secs)\n{\n\tvar d \u003d now - secs, n;\n\t\n\tif (!secs)\n\t\treturn \u0022\u0022;\n\t\n\tfor (n \u003d 0; n \u003c age_names.length; n++)\n\t\tif (d \u003c age_limit[n] || age_limit[n] \u003d\u003d\u003d 0)\n\t\t\treturn \u0022\u003cspan class\u003d'age-\u0022 + n + \u0022' ut\u003d'\u0022 + secs +\n\t\t\t\t\u0022'\u003e\u0022 + Math.ceil(d / age_div[n]) +\n\t\t\t\ti18n(age_names[n]) + \u0022\u003c/span\u003e\u0022;\n}\n\nfunction aging()\n{\n var n, next \u003d 24 * 3600,\n now_ut \u003d Math.round((new Date().getTime() / 1000));\n\n for (n \u003d 0; n \u003c age_names.length; n++) {\n var m, elems \u003d document.getElementsByClassName(\n \t\t\t\t\u0022age-\u0022 + n), ne \u003d elems.length,\n \t\t\t\ta \u003d new Array(), ee \u003d new Array();\n\n if (elems.length \u0026\u0026 age_upd[n] \u003c next)\n next \u003d age_upd[n];\n\n for (m \u003d 0; m \u003c ne; m++) {\n var e \u003d elems[m], secs \u003d elems[m].getAttribute(\u0022ut\u0022);\n\n a.push(agify(now_ut, secs));\n ee.push(e);\n }\n \n for (m \u003d 0; m \u003c ee.length; m++) {\n \tee[m].innerHTML \u003d a[m]; \n }\n }\n\n /*\n * We only need to come back when the age might have changed.\n * Eg, if everything is counted in hours already, once per\n * 5 minutes is accurate enough.\n */\n\n window.setTimeout(aging, next * 1000);\n}\n\n\nfunction comp_reftime(a, b)\n{\n\treturn b.summary.time - a.summary.time;\n}\n\nfunction comp_reftime_tag(a, b)\n{\n\treturn b.summary.time - a.summary.time;\n}\n\nvar loca;\n\nfunction tz_date(ut, z)\n{\n\tvar d \u003d new Date((ut) * 1000);\n\t\n\tif (loca) {\n\t\tvar options \u003d { weekday: 'long', year: 'numeric', month: 'long',\n\t\t\t\t\t\tday: 'numeric', hour: 'numeric', minute: 'numeric',\n\t\t\t\t\t\tsecond: 'numeric'};\n\n\t\treturn d.toLocaleDateString(loca, options);\n\t}\n\t\n\treturn d;\n}\n\nfunction identity_av_base(i)\n{\n\tvar em;\n\t\n\tif (j_avatar !\u003d\u003d \u0022//www.gravatar.com/avatar/\u0022) {\n\t\tem \u003d j_avatar + i.md5 + \u0022_avatar\u0022;\n\t} else\n\t\tem \u003d j_avatar + i.md5 + \u0022?s\u003d128\u0026amp;d\u003dretro\u0022;\n\t\n\treturn em;\n}\n\nfunction identity_img(i, size)\n{\n\tvar v \u003d identity_av_base(i);\n\t\n\treturn \u0022\u003cimg class\u003d\u005c\u0022inline-identity\u005c\u0022 src\u003d\u005c\u0022\u0022 + v + \u0022\u005c\u0022 alt\u003d\u005c\u0022[]\u005c\u0022 /\u003e\u0022;\n}\n\nfunction identity(i, size, parts)\n{\n\tvar s \u003d \u0022\u0022;\n\n\tif (!i || !i.email || !i.md5)\n\t\treturn \u0022\u0022;\n\n\tif (parts !\u003d\u003d 0)\n\t\ts \u003d \u0022\u003cspan class\u003d'identity'\u003e\u0022;\n\t\n\ts +\u003d \u0022\u003ca class\u003d'grav-mailto' href\u003d'mailto:\u0022 + san(i.email) + \u0022'\u003e\u0022 +\n\t\n\t\t\u0022\u003cspan class\u003dgravatar\u0022 + size + \u0022 alt\u003d'\u0022 + san(i.email) +\n\t\t\u0022'\u003e\u0022 +\n\t\tidentity_img(i, size) +\n\t\t\u0022\u003cimg class\u003d'onhover' src\u003d'\u0022 + identity_av_base(i) +\n\t\t\u0022'/\u003e\u0022;\n\n\tif (parts \u0026 1)\n\t\ts +\u003d san(decodeURIComponent(i.name));\n\t\n\ts +\u003d \u0022\u003c/span\u003e\u003c/a\u003e\u0022;\n\t\n\tif (parts \u0026 2)\n\t\ts +\u003d \u0022 \u003cspan\u003e\u0026lt;\u0022 + san(i.email) + \u0022\u0026gt;\u003c/span\u003e\u0022;\n\t\n\tif (parts \u0026 4)\n\t\ts +\u003d \u0022 \u003cspan\u003e\u0022 + tz_date(i.git_time.time, i.git_time.offset) +\n\t\t \u0022\u003c/span\u003e\u0022;\n\t\n\tif (parts !\u003d\u003d 0)\n\t\ts +\u003d \u0022\u003c/span\u003e\u0022;\n\t\n\treturn s;\n}\n\nfunction aliases(oid)\n{\n\tvar irefs \u003d \u0022\u0022, m;\n\n\tfor (m \u003d 0; m \u003c oid.alias.length; m++) {\n\t\tvar r \u003d oid.alias[m];\n\n\t\tif (r.substr(0, 11) \u003d\u003d\u003d \u0022refs/heads/\u0022)\n\t\t\tirefs +\u003d \u0022 \u003cspan class\u003d'inline-branch'\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctable\u003e\u003ctr\u003e\u003ctd class\u003d'tight'\u003e\u0022 +\n\t\t\t\t\t\u0022\u003cimg class\u003d'branch' tgt\u003d'\u0022 +\n\t\t\t\tsan(reponame) + \u0022-\u0022 + san(r.substr(11)) +\n\t\t\t\t\u0022' mtitle\u003d'\u0022+\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt1\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022branch\u005c\u0022\u003e\u003c/div\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt2\u005c\u0022\u003e\u0022 + i18n(\u0022Branch Snapshot\u0022) + \u0022\u003c/div\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt3\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022archive\u005c\u0022\u003e\u003c/div\u003e'\u003e\u0022 +\n\t\t\t\t\u0022\u003c/td\u003e\u003ctd class\u003d'tight'\u003e\u003cspan\u003e\u0022 +\n\t\t\t\tr.substr(11) + \u0022\u003c/span\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003c/span\u003e\u0022;\n\t\telse\n\t\t\tif (r.substr(0, 10) \u003d\u003d\u003d \u0022refs/tags/\u0022)\n\t\t\t\tirefs +\u003d \u0022 \u003cspan class\u003d'inline_tag'\u003e\u0022 +\n\t\t\t\t\t\t \u0022\u003cdiv class\u003d'alias'\u003e\u0022 +\n\t\t\t\t\t\t \u0022\u003cimg class\u003d'tag oneem' tgt\u003d'\u0022 + san(reponame) + \u0022-\u0022 +\n\t\t\t\t\t\t san(r.substr(10)) +\n\t\t\t\t\t\t\t\u0022' mtitle\u003d'\u0022+\n\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt1\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022tag\u005c\u0022\u003e\u003c/div\u003e\u0022 +\n\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt2\u005c\u0022\u003e\u0022 + i18n(\u0022Tag Snapshot\u0022) + \u0022\u003c/div\u003e\u0022 +\n\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt3\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022archive\u005c\u0022\u003e\u003c/div\u003e'\u003e\u0022 +\n\t\t\t\t\t\t\t\u0022\u0026nbsp;\u0022 +\n\t\t\t\t\t\t r.substr(10) + \u0022\u003c/div\u003e\u003c/span\u003e\u0022;\n\t}\n\t\n\treturn irefs;\n}\n\nfunction arch_select_handler(e)\n{\n\tvar newloc \u003d vpath;\n\n\te.stopPropagation();\n\te.preventDefault();\n\t\n if (!vpath || vpath[vpath.length - 1] !\u003d\u003d '/')\n newloc +\u003d '/';\n\n\tnewloc +\u003d reponame;\n\tif (reponame[reponame.length - 1] !\u003d\u003d '/')\n\t newloc +\u003d '/';\n\tnewloc +\u003d \u0022snapshot/\u0022 + e.target.textContent;\n\t// console.log(newloc);\n\twindow.location \u003d newloc;\n\n\n\tif (!menu_popup_archive)\n\t\treturn;\n\n\tmenu_popup_archive.remove();\n\tmenu_popup_archive \u003d null;\n}\n\nfunction create_popup(t, h_px, v_px, clas, title, wid, an, ar, clicker)\n{\n\tvar pop, s \u003d \u0022\u0022, n;\n\t\n\tpop \u003d document.createElement(\u0022DIV\u0022);\n\n\tpop.className \u003d clas;\n\tpop.style.top \u003d v_px + \u0022px\u0022;\n\tif (h_px)\n\t\tpop.style.left \u003d h_px + \u0022px\u0022;\n\t\n\tif (wid)\n\t\tpop.style.width \u003d wid + \u0022px\u0022;\n\n\t\n\tif (title)\n\t\ts +\u003d \u0022\u003cdiv class\u003d'popalias'\u003e\u0022 +\n\t\t\tsan(title) + \u0022\u003c/div\u003e\u0022;\n\t\n\tif (an.length) {\n\n\t\ts +\u003d \u0022\u003cdiv\u003e\u003cul id\u003d'menu-ul'\u003e\u0022;\n\t\n\t\tfor (n \u003d 0; n \u003c an.length; n++)\n\t\t\t\ts +\u003d \u0022\u003cli id\u003d'\u0022 + ar[n] + \u0022' tabindex\u003d'\u0022 + n + \u0022'\u003e\u0022 +\n\t\t\t\t\tan[n] + \u0022\u003c/li\u003e\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003c/ul\u003e\u003c/div\u003e\u0022;\n\t\t\n\t}\n\t\t \n\tpop.innerHTML \u003d s;\n\tt.parentNode.appendChild(pop, null);\n\n\tif (an.length) {\n\t\tdocument.getElementById(ar[0]).focus();\n\t\tfor (n \u003d 0; n \u003c an.length; n++)\n\t\t\tdocument.getElementById(ar[n]).addEventListener(\n\t\t\t\t\t\t\u0022click\u0022, clicker, false);\n\t}\n\tsetTimeout(function() {\n\t\tpop.style.opacity \u003d \u00221\u0022;\n\t}, 1);\n\n\t/* detect loss of focus for popup menu */\n\tpop.addEventListener(\u0022focusout\u0022, function(e) {\n\t\t/* if focus went to a child (menu item), ignore */\n\t\tif (e.relatedTarget \u0026\u0026\n\t\t e.relatedTarget.parentNode.id \u003d\u003d\u003d \u0022menu-ul\u0022)\n\t\t\treturn;\n\n\t\tpop.remove();\n\t\tpop \u003d null;\n\t});\n\n\treturn pop;\n}\n\nfunction archive_click(t)\n{\n\tvar v \u003d collect_offsetTop(t.target), tgt, title, h;\n\t\n\tif (menu_popup_archive) {\n\t\tmenu_popup_archive.remove();\n\t\tmenu_popup_archive \u003d null;\n\t\t\n\t\treturn;\n\t}\n\t\n\tif (t.target.offsetHeight)\n\t\tv +\u003d t.target.offsetHeight;\n\t\n\th \u003d collect_offsetLeft(t.target) + t.target.offsetWidth;\n\t\n\ttgt \u003d t.target.getAttribute(\u0022tgt\u0022);\n\ttitle \u003d t.target.getAttribute(\u0022mtitle\u0022);\n\t\n\tmenu_popup_archive \u003d\n\t\tcreate_popup(t.target, h, v, \u0022popup-menu\u0022, title, null,\n\t\t\t\t[ tgt + \u0022.tar.gz\u0022, tgt + \u0022.tar.bz2\u0022,\n\t\t\t\t tgt + \u0022.tar.xz\u0022, tgt + \u0022.zip\u0022 ],\n\t\t\t\t[ \u0022gz\u0022, \u0022bz2\u0022, \u0022xz\u0022, \u0022zip\u0022 ],\n\t\t\t\t\t arch_select_handler);\n}\n\nvar j;\n\nfunction clonecopy_click(t)\n{\n\tcopy_clipboard(\u0022git clone \u0022 + san(j.url), t.target);\n}\n\nfunction patch_archive(oid, n)\n{\n\treturn \u0022\u003cspan\u003e\u003cimg id\u003d'idpa\u0022 + n + \u0022' class\u003d'patch' tgt\u003d'\u0022 +\n\t\tsan(reponame) + \u0022-\u0022 + oid +\n\t\t\u0022' mtitle\u003d'\u0022+\n\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt1\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022patch\u005c\u0022\u003e\u003c/div\u003e\u0022 +\n\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt2\u005c\u0022\u003e\u0022 + i18n(\u0022Commit Snapshot\u0022) + \u0022\u003c/div\u003e\u0022 +\n\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt3\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022archive\u005c\u0022\u003e\u003c/div\u003e'\u003e\u0022 +\n\t\t\u0022\u003c/span\u003e\u0022;\n}\n\nfunction html_branches(now, count)\n{\n\tvar s \u003d \u0022\u0022, n;\n\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003ctable\u003e\u003ctr\u003e\u0022 +\n\t\t\u0022\u003ctd class\u003d'heading' colspan\u003d'2'\u003e\u0022 + i18n(\u0022Branch\u0022) +\n\t\t\u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Message\u0022) +\n\t\t\u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Author\u0022) +\n\t\t\u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Age\u0022) +\n\t\t\u0022\u003c/td\u003e\u003ctd\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\tfor (n \u003d 0; n \u003c branches.length \u0026\u0026 n \u003c count; n++)\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022+\n\t\t\t \u0022\u003cdiv\u003e\u003cimg id\u003d'idsb\u0022 + n +\n\t\t\t \t\u0022' class\u003d'branch' tgt\u003d'\u0022 +\n\t\t\t\tsan(reponame) + \u0022-\u0022 + san(branches[n].name.substr(11)) +\n\t\t\t\t\u0022' mtitle\u003d'\u0022+\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt1\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022branch\u005c\u0022\u003e\u003c/div\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt2\u005c\u0022\u003e\u0022 + i18n(\u0022Branch Snapshot\u0022) + \u0022\u003c/div\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt3\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022archive\u005c\u0022\u003e\u003c/div\u003e'\u003e\u0022 +\n\t\t\t \u0022\u003c/td\u003e\u003ctd\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\tmakeurl(reponame, \u0022tree\u0022, rpath, branches[n].name.substr(11),\n\t\t\t\t\tqid, qofs) + \u0022\u005c\u0022\u003e\u0022 + branches[n].name.substr(11) + \u0022\u003c/a\u003e\u0022 +\n\t\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + san(branches[n].summary.msg) +\n\t\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + identity(branches[n].summary.sig_author, 16, 1) +\n\t\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + agify(now, branches[n].summary.time) +\n\t\t \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\tif (n \u003d\u003d\u003d count)\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d5\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\tmakeurl(reponame, \u0022branches\u0022, rpath, qbranch, null, null) +\n\t\t\t\u0022\u005c\u0022\u003e[...]\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\ts +\u003d \u0022\u003c/table\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\treturn s;\n}\n\nfunction html_tags(now, count)\n{\n\tvar s \u003d \u0022\u0022, n;\n\t\n\tif (!tags.length)\n\t\treturn \u0022\u0022;\n\t\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003ctable\u003e\u003ctr\u003e\u003ctd class\u003d'heading' colspan\u003d'2'\u003e\u0022 + i18n(\u0022Tag\u0022) +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Message\u0022) +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Author\u0022) +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Age\u0022) +\n \u0022\u003c/td\u003e\u003ctd\u003e\u0022 +\n \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\tfor (n \u003d 0; n \u003c tags.length \u0026\u0026 n \u003c count; n++) {\n\t\t\n\t\tvar mm \u003d tags[n].summary.msg_tag;\n\t\t//if (!mm)\n\t\t\t//mm \u003d tags[n].summary.msg;\n\t\t\n\t\tif (tags[n].summary \u0026\u0026 tags[n].summary.oid \u0026\u0026 tags[n].summary.oid.oid) {\n\t\t\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 +\n\t\t\t\u0022\u003cspan\u003e\u003cimg id\u003d'idst\u0022 + n + \u0022' class\u003d'tag' tgt\u003d'\u0022 +\n\t\t\t\tsan(reponame) + \u0022-\u0022 + san(tags[n].name.substr(10)) +\n\t\t\t\t\u0022' mtitle\u003d'\u0022+\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt1\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022tag\u005c\u0022\u003e\u003c/div\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt2\u005c\u0022\u003e\u0022 + i18n(\u0022Tag Snapshot\u0022) + \u0022\u003c/div\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt3\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022archive\u005c\u0022\u003e\u003c/div\u003e'\u003e\u0022 +\n\t\t\t\t\u0022\u003c/span\u003e\u003c/td\u003e\u003ctd\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\tmakeurl(reponame, \u0022tree\u0022, rpath, qbranch,\n\t\t\t\ttags[n].summary.oid.oid, qofs) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\ttags[n].name.substr(10) + \u0022\u003c/a\u003e\u0022 +\n\t\t\u0022\u003c/td\u003e\u003ctd\u003e\u0022 + san(mm) +\n\t\t\u0022\u003c/td\u003e\u003ctd\u003e\u0022 + identity(tags[n].summary.sig_tagger, 16, 1) +\n\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + agify(now, tags[n].summary.time) +\n\t \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t}\n\t}\n\t\n\tif (n \u003d\u003d\u003d count)\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d5\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\tmakeurl(reponame, \u0022tags\u0022, rpath, qbranch, null, null) +\n\t\t\u0022\u005c\u0022\u003e[...]\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\ts +\u003d \u0022\u003c/table\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\treturn s;\n}\n\nfunction html_log(l, now, count, next)\n{\n\tvar s \u003d \u0022\u0022, n;\n\n\ts +\u003d \u0022\u003ctable\u003e\u003ctr\u003e\u003ctd class\u003d'heading'\u003e\u0022 +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Message\u0022) +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Author\u0022) +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Age\u0022) +\n \u0022\u003c/td\u003e\u003ctd class\u003d'heading'\u003e\u0022 +\n \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\tif (!l) {\n\t\tconsole.log(\u0022html_log: null l\u005cn\u0022);\n\t\treturn \u0022\u0022;\n\t}\t\n\t\n\tfor (n \u003d 0; n \u003c l.length \u0026\u0026 n \u003c count; n++) {\n\t\tvar irefs \u003d \u0022\u0022;\n\t\t\n\t\tirefs \u003d aliases(l[n].name);\n\t\t\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 + \n\t\t\u0022\u003c/td\u003e\u003ctd class\u003d'logmsg'\u003e\u0022 + patch_archive(l[n].name.oid, n) + \u0022 \u003ca href\u003d\u005c\u0022\u0022 +\n\t\t makeurl(reponame, \u0022commit\u0022, rpath, null, l[n].name.oid, qofs) +\n\t\t \u0022\u005c\u0022\u003e\u0022 + san(l[n].summary.msg) + \u0022\u003c/a\u003e\u0022 + irefs +\n\t\t\u0022\u003c/td\u003e\u003ctd\u003e\u0022 + identity(l[n].summary.sig_author, 16, 1) +\n\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + agify(now, l[n].summary.time) +\n\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + //j.items[1].log[n].name.substr(10) +\n\t \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t}\n\t\n\tif (next \u0026\u0026 n \u003d\u003d\u003d count) {\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d5\u003e\u003ca href\u003d'\u0022+\n\t\t\tmakeurl(reponame, \u0022log\u0022, rpath, null, next.oid, qofs) +\n\t\t\t\u0022'\u003enext\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t}\n\t\n\ts +\u003d \u0022\u003c/table\u003e\u0022;\n\t\n\treturn s;\n}\n\nfunction html_commit(j) {\n\tvar s \u003d \u0022\u0022;\n\t\n\tif (!j.items[0].commit)\n\t\treturn \u0022\u0022;\n\t\n\ts +\u003d \u0022\u003cdiv\u003e\u003ctable\u003e\u0022;\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 + i18n(\u0022Author\u0022) + \u0022\u003c/td\u003e\u003ctd\u003e\u0022 +\n\t\t\tidentity(j.items[0].commit.sig_author, 16, 7) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 + i18n(\u0022Committer\u0022) + \u0022\u003c/td\u003e\u003ctd\u003e\u0022 +\n\t\t\tidentity(j.items[0].commit.sig_commit, 16, 7) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 + i18n(\u0022Tree\u0022) + \u0022\u003c/td\u003e\u003ctd\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\tmakeurl(reponame, \u0022tree\u0022, rpath,\n\t\t\t\tqbranch, san(j.items[0].commit.oid.oid), qofs) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\tsan(j.items[0].commit.oid.oid) + \u0022\u003c/a\u003e\u0022 + \u0022\u0026nbsp;\u0026nbsp;\u0022 +\n\t\t\t\t\u0022\u003ca href\u003d\u005c\u0022\u0022 + makeurl(reponame, \u0022patch\u0022, rpath,\n\t\t\t\t\t\tqbranch, san(j.items[0].commit.oid.oid), qofs) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\t\t\t\u0022\u003cimg class\u003d'rawpatch'\u003e \u0022 +\n\t\t\t\ti18n(\u0022Raw Patch\u0022) + \u0022\u003c/a\u003e\u0022 +\n\t\t\t\t\u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d2\u003e\u0026nbsp;\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d2 class\u003d'logtitle'\u003e\u0022 +\n\t\t\tpatch_archive(j.items[0].commit.oid.oid, 0) +\n\t\t san(j.items[0].commit.msg) + \u0022 \u0022 +\n\t\t\taliases(j.items[0].commit.oid) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\tif (j.items[0].body)\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d2 \u003e\u0022 + \u0022\u003cpre class\u003d'logbody'\u003e\u0022 +\n\t\t\t san(j.items[0].body) + \u0022\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\ts +\u003d \u0022\u003c/table\u003e\u003c/div\u003e\u0022;\n\t\n\treturn s + \u0022\u003cdiv\u003e\u003cpre\u003e\u003cmain role\u003d'main'\u003e\u003ccode id\u003d'do-hljs' class\u003d\u005c\u0022diff\u005c\u0022\u003e\u0022 +\n\t\t\t\tsan(j.items[0].diff) + \u0022\u003c/code\u003e\u003c/main\u003e\u003c/pre\u003e\u003c/div\u003e\u0022;\n}\n\nfunction filemode3(n)\n{\n\tvar s \u003d \u0022\u0022;\n\t\n\tif (n \u0026 4)\n\t\ts +\u003d 'r';\n\telse\n\t\ts +\u003d '-';\n\tif (n \u0026 2)\n\t\ts +\u003d 'w';\n\telse\n\t\ts +\u003d '-';\n\tif (n \u0026 1)\n\t\ts +\u003d 'x';\n\telse\n\t\ts +\u003d '-';\n\t\n\treturn s;\n}\n\nfunction filemode(n)\n{\n\tvar s \u003d \u0022\u0022;\n\n\tif (n \u0026 16384)\n\t\treturn \u0022\u0022;\n\telse\n\t\ts +\u003d '-';\n\n\treturn s + filemode3(n \u003e\u003e 6) + filemode3(n \u003e\u003e 3) + filemode3(n);\n}\n\nfunction html_tree(j, now)\n{\n\tvar n, bi \u003d 0, s \u003d \u0022\u0022, mo \u003d rmode;\n\t\n\tif (mo !\u003d\u003d \u0022tree\u0022 \u0026\u0026 mo !\u003d\u003d \u0022blame\u0022)\n\t\tmo \u003d \u0022tree\u0022;\n\n\tif (!blog_mode \u0026\u0026 j.items[0] \u0026\u0026 j.items[0].tree) {\n\t\n\t\ts \u003d \u0022\u003cdiv id\u003d\u005c\u0022sai_sticky\u005c\u0022\u003e\u003c/div\u003e\u003cdiv class\u003d'jg2-tree'\u003e\u003cpre\u003e\u003ctable\u003e\u003ctr\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Mode\u0022) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctd class\u003d'headingr'\u003e\u0022 + i18n(\u0022Size\u0022) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Name\u0022) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t\t\t\u0022\u003c/tr\u003e\u0022;\n\t\tvar t \u003d j.items[0].tree;\n\t\n\t\tfor (n \u003d 0; n \u003c t.length; n++) {\n\t\t\tif ((parseInt(t[n].mode, 10) \u0026 0xe000) \u003d\u003d\u003d 0xe000)\n\t\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0026nbsp\u003c/td\u003e\u003ctd\u003e\u0026nbsp\u003c/td\u003e\u0022 +\n\t\t\t\t \u0022\u003ctd class\u003d'dl-dir'\u003e\u003cimg class\u003d'submodule'\u003e\u0026nbsp;\u0022 +\n\t\t\t san(t[n].name) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\telse\n\t\t\t\n\t\t\tif (parseInt(t[n].mode, 10) \u0026 16384)\n\t\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 + filemode(parseInt(j.items[0].tree[n].mode, 10)) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t \u0022\u003ctd\u003e\u0026nbsp\u003c/td\u003e\u003ctd class\u003d'dl-dir'\u003e\u003cimg class\u003d'folder'\u003e\u0026nbsp;\u0022 +\n\t\t\t \u0022\u003ca class\u003d'noline' href\u003d'\u0022 +\n\t\t\t\t makeurl(reponame, mo, (rpath !\u003d\u003d null ? rpath + '/' : \u0022\u0022) +\n\t\t\t\t\t\t san(t[n].name), qbranch, qid, qofs) +\n\t\t\t\t \u0022'\u003e\u0022 + san(t[n].name) + \u0022\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\telse\n\t\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u0022 +\n\t\t\t\t\t filemode(parseInt(j.items[0].tree[n].mode, 10)) +\n\t\t\t\t\t \u0022\u003c/td\u003e\u0022 + \u0022\u003ctd class\u003d'r'\u003e\u0022 +\n\t\t\t\t\t parseInt(j.items[0].tree[n].size, 10) +\n\t\t\t\t\t \u0022\u003c/td\u003e\u003ctd class\u003d'dl-file'\u003e\u003ca class\u003d'noline' href\u003d'\u0022 +\n\t\t\t\t\t makeurl(reponame, mo, (rpath !\u003d\u003d null ? rpath + '/' : \u0022\u0022) +\n\t\t\t\t\t\t\t san(j.items[0].tree[n].name), qbranch, qid, qofs) +\n\t\t\t\t\t \u0022'\u003e\u0022 + san(j.items[0].tree[n].name) + \u0022\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t}\n\t\n\t\ts +\u003d \u0022\u003c/table\u003e\u003c/pre\u003e\u003c/div\u003e\u0022;\n\t\tbi \u003d 1;\n\t}\n\t\n\tif (blog_mode)\n\t\tbi \u003d 1;\n\t\n\tif (j.items[bi] \u0026\u0026 j.items[bi].blob) {\n\t\t\n\t\tif ((rpath \u0026\u0026 rpath.substr(rpath.length - 3) \u003d\u003d\u003d '.md') ||\n\t\t\t(rpath \u0026\u0026 rpath.substr(rpath.length - 4) \u003d\u003d\u003d '.mkd') ||\n\t\t\tbi) {\n\t\t\t\n\t\t\tif (!blog_mode)\n\t\t\ts +\u003d \u0022\u003cdiv class\u003d'inline'\u003e\u003cdiv class\u003d'inline-title'\u003e\u0022 +\n\t\t\tsan(j.items[bi].blobname) +\n\t\t\t \u0022\u003c/div\u003e\u0022;\n\t\t\ts +\u003d \u0022\u003ctable\u003e\u003ctr\u003e\u0022+\n\t\t\t\u0022\u003ctd class\u003d'doc' id\u003d'do-showdown'\u003e\u0022 + san_nq(j.items[bi].blob) +\n\t\t\t\u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003c/div\u003e\u0022;\n\t\t} else {\n\t\t\tvar optclass \u003d \u0022\u0022;\n\t\t\t\n\t\t\tif (rpath \u0026\u0026 rpath.substr(rpath.length - 4) \u003d\u003d\u003d \u0022.txt\u0022)\n\t\t\t\toptclass \u003d \u0022class\u003d\u005c\u0022plaintext\u005c\u0022\u0022;\n\t\n\t\t\ts +\u003d \u0022\u003ctable\u003e\u0022;\n\t\t\t\n\t\t\tif (j.items[bi + 1] \u0026\u0026 j.items[bi + 1].contrib) {\n\t\t\t\tvar ct \u003d j.items[bi + 1].contrib, c \u003d ct.length;\n\t\t\t\tif (c \u003e 20)\n\t\t\t\t\tc \u003d 20;\n\t\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d'2'\u003e\u003ctable\u003e\u003ctr\u003e\u0022;\n\t\t\t\tfor (n \u003d 0; n \u003c c; n++) {\n\t\t\t\t\ts +\u003d \u0022\u003ctd\u003e\u0022 +\n\t\t\t\t\tidentity(j.items[bi + 1].blame[ct[n].o].sig_final, 24, 0) +\n\t\t\t\t\t\t\t\u0022\u003c/td\u003e\u0022;\n\t\t\t\t}\n\t\t\t\ts +\u003d \u0022\u003c/tr\u003e\u003c/table\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\t}\n\t\t\t\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cpre\u003e\u003ccode\u003e\u0022+\n\t\t \u0022\u003cdiv id\u003d'jglinenumbers' class\u003d'jglinenumbers'\u003e\u0022+\n\t\t \u0022\u003c/div\u003e\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u0022 +\n\t\t\t\u0022\u003ctd class\u003d'doc'\u003e\u003cpre\u003e\u003ccode id\u003d\u005c\u0022do-hljs\u005c\u0022 \u0022 + optclass +\n\t\t\t\t\u0022\u003e\u0022 + san(j.items[bi].blob) +\n\t\t\t\u0022\u003c/code\u003e\u003c/pre\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u0022;\n\t\t}\n\t}\n\t\n\tif (j.items[bi] \u0026\u0026 j.items[bi].bloblink) {\n\t\tvar l \u003d j.items[bi].bloblink;\n\t\t\n\t\ts +\u003d \u0022\u003cdiv class\u003d'inline'\u003e\u003cdiv class\u003d'inline-title'\u003e\u0022 +\n\t\tsan(j.items[bi].blobname) +\n\t\t \u0022\u003c/div\u003e\u0022 +\n\t\t\t\u0022\u003ctable\u003e\u003ctr\u003e\u0022+\n\t\t\u0022\u003ctd class\u003d'doc'\u003e\u0022;\n\t\t\n\t\tif (l.substr(l.length - 4).toLowerCase() \u003d\u003d\u003d \u0022.png\u0022 ||\n\t\t\tl.substr(l.length - 4).toLowerCase() \u003d\u003d\u003d \u0022.jpg\u0022 ||\n\t\t\tl.substr(l.length - 4).toLowerCase() \u003d\u003d\u003d \u0022.ico\u0022 ||\n\t\t\tl.substr(l.length - 5).toLowerCase() \u003d\u003d\u003d \u0022.jpeg\u0022) {\n\n\t\t\ts +\u003d \u0022\u003cimg src\u003d\u005c\u0022\u0022 + san(l) + \u0022\u005c\u0022\u003e\u0022;\n\t\t} else\n\t\t\ts +\u003d \u0022\u003ca href\u003d\u005c\u0022\u0022 + san(l) + \u0022\u005c\u0022 download\u003e\u0022 + i18n(\u0022Download\u0022) + \u0022\u003c/a\u003e\u0022;\n\t\t\t\n\t\ts +\u003d \u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003c/div\u003e\u0022;\n\t}\n\n\treturn s;\n}\n\nfunction html_repolist(j, now)\n{\n\tvar n, s \u003d \u0022\u0022;\n\n\tif (j.items[0] \u0026\u0026 j.items[0].repolist) {\n\t\n\t\ts \u003d \u0022\u003cdiv class\u003d'jg2-repolist'\u003e\u003ctable\u003e\u003ctr\u003e\u0022+\n\t\t\t\t\t\u0022\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Name\u0022) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Description\u0022) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022Owner\u0022) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctd class\u003d'heading'\u003e\u0022 + i18n(\u0022URL\u0022) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\tvar t \u003d j.items[0].repolist;\n\t\n\t\tfor (n \u003d 0; n \u003c t.length; n++)\n\t\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd class\u003d'dl-dir'\u003e\u003cimg class\u003d'repo oneem'\u003e\u0022 +\n\t\t\t\t\t\u0022\u0026nbsp;\u003ca class\u003d'noline'href\u003d'\u0022 +\n\t\t\t\t makeurl(t[n].reponame, null, null, null, null, null) +\n\t\t\t\t \u0022'\u003e\u0022 + san(t[n].reponame) + \u0022\u003c/a\u003e\u003c/td\u003e\u0022 +\n\t\t\t \u0022\u003ctd\u003e\u0022 + san(t[n].desc) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t \u0022\u003ctd\u003e\u0022 + identity(t[n], 16, 1) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t \u0022\u003ctd\u003e\u0022 + san(t[n].url) + \u0022\u003c/td\u003e\u0022 +\n\t\t\t \u0022\u003ctd\u003e\u0026nbsp\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\t\ts +\u003d \u0022\u003c/table\u003e\u003c/div\u003e\u0022;\n\t}\n\n\treturn s;\n}\n\nfunction display_summary(j, now)\n{\n\tvar s \u003d \u0022\u003ctable\u003e\u0022;\n\n s +\u003d html_branches(now, 10);\n\t \n\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d5\u003e\u0026nbsp;\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n s +\u003d html_tags(now, 10);\n\t\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d5\u003e\u0026nbsp;\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\ts +\u003d html_log(j.items[1].log, now, 10);\n\t\n\ts +\u003d \u0022\u003ctr\u003e\u003ctd colspan\u003d5\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\tmakeurl(reponame, \u0022log\u0022, rpath, qbranch, null, null) +\n\t\t\u0022\u005c\u0022\u003e[...]\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\ts +\u003d \u0022\u003c/table\u003e\u0022;\n\n\treturn s;\n}\n\nvar doc_dir \u003d \u0022\u0022;\n\nvar sd_ext_plain \u003d function () {\n var ext1 \u003d {\n type: 'output',\n regex: '\u003cimg\u005c src\u003d\u005c\u0022\u005c./([^\u005c\u0022]*)',\n replace: '\u003cimg\u005c \u005c src\u003d\u005c\u0022' + makeurl(reponame, \u0022plain\u0022, doc_dir + '$1', qbranch, qid, qofs)\n };\n var ext2 \u003d {\n type: 'output',\n regex: '\u003cimg\u005c src\u003d\u005c\u0022(?!http:\u005c/\u005c/|https:\u005c/\u005c/|\u005c/)([^\u005c\u0022]*)',\n replace: '\u003cimg\u005c \u005c src\u003d\u005c\u0022' + makeurl(reponame, \u0022plain\u0022, doc_dir + '$1', qbranch, qid, qofs)\n };\n var ext3 \u003d {\n type: 'output',\n regex: '\u003cimg\u005c src\u003d\u005c\u0022\u005c/([^\u005c\u0022]*)',\n replace: '\u003cimg\u005c src\u003d\u005c\u0022' + makeurl(reponame, \u0022plain\u0022, '$1', qbranch, qid, qofs)\n };\n var ext4 \u003d {\n type: 'output',\n regex: '\u003ca\u005c href\u003d\u005c\u0022\u005c./([^\u005c\u0022]*)',\n replace: '\u003ca\u005c class\u003d\u005c\u0022blogintlink\u005c\u0022\u005c href\u003d\u005c\u0022' + makeurl(reponame, \u0022tree\u0022, doc_dir + '$1', qbranch, qid, qofs)\n };\n var ext5 \u003d {\n type: 'output',\n regex: '\u003ca\u005c href\u003d\u005c\u0022http[s]*://([^\u005c\u0022]*)',\n replace: '\u003ca\u005c class\u003d\u005c\u0022blogextlink\u005c\u0022\u005c href\u003d\u005c\u0022https://' + '$1'\n };\n \n return [ext1, ext2, ext3, ext4, ext5];\n};\n\nvar last_mm, blametable, blamesel, blameotron;\n\nfunction blameotron_handler(e)\n{\n\t}\n\nfunction blame_normal(d)\n{\n\tif (!d)\n\t\treturn;\n\t\n\tvar m, a \u003d document.getElementsByClassName(d);\n\tvar hunks \u003d j.items[1].blame.length, hunk \u003d parseInt(d.substr(6), 10);\n\n\tfor (m \u003d 0; m \u003c a.length; m++)\n\t\ta[m].style.backgroundColor \u003d\n\t\t\t\u0022rgba(\u0022 + (128 + (((hunk) * 128) / hunks)) +\n\t\t\t \u0022, \u0022 + (128 + (((hunk) * 128) / hunks)) +\n\t\t\t \u0022, \u0022 + (128 + (((hunk) * 128) / hunks)) +\n\t\t\t \u0022, 0.3)\u0022;\n}\n\nfunction blameotron_revert(e)\n{\n\tvar dest \u003d e.target.parentNode.getAttribute(\u0022dest\u0022);\n\twindow.location \u003d dest;\n}\n\nfunction blame_mousemove(e)\n{\n\tvar d \u003d new Date(), t \u003d d.getTime(), n, m, x \u003d 80;\n\n\t/* check the mouse only at 20Hz */\n\t\n\tif (blamesel \u0026\u0026 last_mm \u0026\u0026 t - last_mm \u003c 50)\n\t\treturn;\n\n\tlast_mm \u003d t;\n\t\n\t/*\n\t * This slightly avant-garde api is used because we face a problem...\n\t * the blame divs need to be behind the text (the highlight is already\n\t * in front of it) but need to convert mousemoves to blame divs.\n\t *\n\t * We can't get the mousemoves by removing pointer-events from things in\n\t * front, because the user may want to highlight text for cut-and-paste\n\t * or click the line number links.\n\t */\n\n\t\n//\tif (x \u003c 80)\n//\t\tx \u003d 80;\n//\telse\n//\t\tx \u003d e.clientX;\n\t\n\tvar elements \u003d document.elementsFromPoint(x, e.clientY), i;\n\tvar hunks \u003d j.items[1].blame.length;\n\t\n\tfor (m \u003d 0; m \u003c elements.length; m++)\n\t\tfor (n \u003d 0; n \u003c elements[m].classList.length; n++) {\n\t\t\tif (elements[m].classList[n] \u003d\u003d\u003d \u0022popup-blameotron\u0022)\n\t\t\t\treturn;\n\t\t\tif (elements[m].classList[n] \u003d\u003d\u003d \u0022putt\u0022)\n\t\t\t\treturn;\n\t\t}\n\t\n\t\n\tfor (m \u003d 0; m \u003c elements.length; m++) \n\t\tfor (n \u003d 0; n \u003c elements[m].classList.length; n++) \n\t\t\tif (elements[m].classList[n].substr(0, 6) \u003d\u003d\u003d \u0022bhunk-\u0022) {\n\t\t\t\t\n\t\t\t\tif (blamesel \u003d\u003d\u003d elements[m].classList[n])\n\t\t\t\t\treturn;\n\t\t\t\t\n\t\t\t\tblame_normal(blamesel);\n\t\t\t\tif (blameotron) {\n\t\t\t\t\tblameotron.remove();\n\t\t\t\t\tblameotron \u003d null;\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tblamesel \u003d elements[m].classList[n];\n\t\t\t\tvar a \u003d document.getElementsByClassName(blamesel);\n\t\t\t\tvar hunk \u003d parseInt(blamesel.substr(6), 10);\n\t\t\t\tfor (i \u003d 0; i \u003c a.length; i++)\n\t\t\t\t\ta[i].style.backgroundColor \u003d\n\t\t\t\t\t\t\u0022rgba(\u0022 + (128 + (((hunk) * 64) / hunks)) +\n\t\t\t\t\t\t \u0022, \u0022 + (128 + (((hunk) * 64) / hunks)) +\n\t\t\t\t\t\t \u0022, \u0022 + (192 + (((hunk) * 128) / hunks)) +\n\t\t\t\t\t\t \u0022, 0.5)\u0022;\n\t\t\t\t\n\t\t\t\tif (!blameotron) {\n\t\t\t\t\tvar thehunk \u003d j.items[1].blame[hunk], bow,\n\t\t\t\t\t\tbotr_width \u003d 250, bp \u003d rpath, devolve, dl \u003d \u0022\u0022;\n\t\t\t\t\t\n\t\t\t\t\tbow \u003d blametable.offsetWidth;\n\t\t\t\t\tif (bow \u003e window.pageXOffset + window.innerWidth)\n\t\t\t\t\t\tbow \u003d window.pageXOffset + window.innerWidth;\n\t\t\t\t\t\n\t\t\t\t\tbow -\u003d botr_width + 32;\n\t\t\t\t\t\n\t\t\t\t\t/* original filepath may have been different */\n\t\t\t\t\tif (thehunk.op)\n\t\t\t\t\t\tbp \u003d thehunk.op;\n\t\t\t\t\t\n\t\t\t\t\tdevolve \u003d makeurl(reponame, \u0022blame\u0022, bp,\n\t\t\t\t\t\t\tnull, thehunk.orig_oid.oid, null) +\n\t\t\t\t\t\t\t\u0022#n\u0022 + san(thehunk.ranges[parseInt(\n\t\t\t\t\t\t\t elements[m].getAttribute(\u0022r\u0022), 10)].o);\n\t\t\t\t\t\n\t\t\t\t\tif (thehunk.orig_oid.oid !\u003d\u003d qid)\n\t\t\t\t\t\tdl \u003d \u0022\u003ca class\u003d'blameotron-revert' dest\u003d\u005c\u0022\u0022 + devolve +\n\t\t\t\t\t\t\u0022\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022devolve\u005c\u0022\u003e\u003c/a\u003e\u0026nbsp;\u0022;\n\n\t\t\t\t\tblameotron \u003d create_popup(elements[m],\n\t\t\t\t\t\t\t\tbow,\n\t\t\t\t\t\t\t\tcollect_offsetTop(elements[m]),\n\t\t\t\t\t\t\t\t\u0022popup-blameotron\u0022,\n\t\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt\u005c\u0022\u003e\u003cdiv class\u003d\u005c\u0022putt1_blame\u005c\u0022\u003e\u0022+\n\t\t\t\t\t\t\t\t\t\u0022\u003cimg class\u003d\u005c\u0022blame hflip\u005c\u0022\u003e\u003c/div\u003e\u0022 +\n\n\t\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt2\u005c\u0022\u003e\u0022 + dl +\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tthehunk.sig_final.name + \u0022\u003cbr\u003e\u0022 +\n\t\t\t\t\t\t\t\t\tagify(new Date().getTime() / 1000,\n\t\t\t\t\t\t\t\t\t\tthehunk.sig_final.git_time.time) +\n\t\t\t\t\t\t\t\t\t\t\u0022\u003c/div\u003e\u0022 +\n\n\t\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt4\u005c\u0022\u003e\u0022 +\n\t\t\t\t\t\t\t\t\u0022\u003ca class\u003d'blameotron-revert' dest\u003d\u005c\u0022\u0022 +\n\t\t\t\t\t\t\t\t\tmakeurl(reponame, \u0022commit\u0022, null,\n\t\t\t\t\t\t\t\t\t\t\tnull, thehunk.final_oid.oid, null) +\n\t\t\t\t\t\t\t\t\t\t\u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\t\t\t\t\t\t\tthehunk.log_final + \u0022\u003c/a\u003e\u0022 +\n\t\t\t\t\t\t\t\t\u0022\u003c/div\u003e\u003c/div\u003e\u0022 +\n\t\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\u0022\u003cdiv class\u003d\u005c\u0022putt3_blame\u005c\u0022\u003e\u003cspan class\u003d'gravatar64'\u003e\u0022 +\n\t\t\t\t\t\t\t\t\tidentity_img(thehunk.sig_final, 64) +\n\t\t\t\t\t\t\t\t\t\u0022\u003c/span\u003e\u003c/div\u003e\u0022,\n\t\t\t\t\t\t\t\t\tbotr_width, [ ], [ ], blameotron_handler);\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tvar elems \u003d document.getElementsByClassName(\u0022blameotron-revert\u0022);\n\t\t\t\tfor (n \u003d 0; n \u003c elems.length; n++)\n\t\t\t\t\telems[n].addEventListener(\u0022click\u0022, blameotron_revert.bind(elems[n]));\n\t\t\t\t\n\t\t\t\treturn;\n\t\t\t}\n}\n\nfunction blame_mouseout(e)\n{\t\n\tif (!blamesel)\n\t\treturn;\n\t\n\tvar x;\n\t\n//\tif (x \u003c 80)\n\t\tx \u003d 80;\n//\telse\n//\t\tx \u003d e.clientX;\n\t\n\tvar elements \u003d document.elementsFromPoint(x, e.clientY), m, n;\n\t\n\tfor (m \u003d 0; m \u003c elements.length; m++)\n\t\tfor (n \u003d 0; n \u003c elements[m].classList.length; n++) {\n\t\t\tif (elements[m].classList[n].substr(0, 6) \u003d\u003d\u003d \u0022bhunk-\u0022)\n\t\t\t\treturn;\n\t\t\t\n\t\t\tif (elements[m].classList[n] \u003d\u003d\u003d \u0022popup-blameotron\u0022)\n\t\t\t\treturn;\n\t\t\tif (elements[m].classList[n] \u003d\u003d\u003d \u0022putt\u0022)\n\t\t\t\treturn;\n\t\t}\n\n\tblame_normal(blamesel);\n\tblamesel \u003d null;\n\t\n\tif (blameotron) {\n\t\tblameotron.remove();\n\t\tblameotron \u003d null;\n\t}\n}\n\n\nfunction goh_fts_choose()\n{\n\tvar ac \u003d document.getElementById(\u0022searchresults\u0022);\n\tvar inp \u003d document.getElementById(\u0022gohsearch\u0022);\n\n//\tsr.style.width \u003d (parseInt(sr.parentNode.offsetWidth, 10) - 88) + \u0022px\u0022;\n//\tsr.style.opacity \u003d \u00221\u0022;\n\t\n\tinp.blur();\n\tac.style.opacity \u003d \u00220\u0022;\n\twindow.location \u003d makeurl(reponame, \u0022search\u0022, rpath, qbranch, null, null,\n\t\t\t\t\t\tencodeURIComponent(inp.value));\n}\n\nfunction goh_ac_select(e)\n{\n\tif (e) {\n\t\t var t \u003d e.target;\n\t\t\n\t\t// console.log(t);\n\t\n\t\twhile (t) {\n\t\t\tif (t.getAttribute \u0026\u0026 t.getAttribute(\u0022string\u0022)) {\n\t\t\t\tdocument.getElementById(\u0022gohsearch\u0022).value \u003d\n\t\t\t\t\t\tt.getAttribute(\u0022string\u0022);\n\t\n\t\t\t\tgoh_fts_choose();\n\t\t\t\treturn;\n\t\t\t}\n\t\n\t\t\tt \u003d t.parentNode;\n\t\t}\n\t} else\n\t\tgoh_fts_choose();\n}\n\nfunction goh_search_input()\n{\n\t//document.getElementById(\u0022searchresults\u0022).style.display \u003d \u0022block\u0022;\n\tdocument.getElementById(\u0022searchresults\u0022).style.opacity \u003d \u00221\u0022;\n\n\t/* detect loss of focus for popup menu */\n\tdocument.getElementById(\u0022gohsearch\u0022).\n\t\t\taddEventListener(\u0022focusout\u0022, function(e) {\n\t\t\t/* if focus went to a child (menu item), ignore */\n\t\t\tif (e.relatedTarget \u0026\u0026\n\t\t\t e.relatedTarget.parentNode.id \u003d\u003d\u003d \u0022searchresults\u0022)\n\t\t\treturn;\n\t\t\t\n\t\t\tconsole.log(\u0022focusout\u0022);\n\n\t\t\tdocument.getElementById(\u0022searchresults\u0022).style.opacity \u003d \u00220\u0022;\n\t\t//\tdocument.getElementById(\u0022searchresults\u0022).style.display \u003d \u0022none\u0022;\n\t});\n\t\n\t\n\tvar xhr \u003d new XMLHttpRequest();\n\n\txhr.onopen \u003d function(e) {\n\t\txhr.setRequestHeader('cache-control', 'max-age\u003d0');\n\t};\n\txhr.onload \u003d function(e) {\n\t\tvar q, jj, n, s \u003d \u0022\u0022, mi \u003d 0, lic \u003d 0;\n\t\tvar inp \u003d document.getElementById(\u0022gohsearch\u0022);\n\t\tvar ac \u003d document.getElementById(\u0022searchresults\u0022);\n\t\t\n\t\t//console.log(xhr.responseText);\n\t\tjj \u003d JSON.parse(xhr.responseText);\n\t\t\n\t\t//console.log(\u0022jj.indexed: \u0022 + jj.indexed);\n\t\t\n\t\tswitch(parseInt(jj.indexed, 10)) {\n\t\tcase 0: /* there is no index */\n\t\t\tbreak;\n\n\t\tcase 1: /* yay there is an index */\n\t\t\n\t\t\ts +\u003d \u0022\u003cul id\u003d'menu-ul'\u003e\u0022;\n\t\t\tfor (q \u003d 0; q \u003c jj.items.length; q++) {\n\t\t\t\tif (jj.items[q].ac) {\n\t\t\t\t\tlic \u003d jj.items[q].ac.length;\n\t\t\t\t\tfor (n \u003d 0; n \u003c lic; n++) {\n\t\t\t\t\t\tvar cla \u003d \u0022acitem\u0022, m \u003d 0;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (jj.items[q].ac[n] \u0026\u0026 jj.items[q].ac[n].elided)\n\t\t\t\t\t\t\tcla +\u003d \u0022 eli\u0022;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (jj.items[q].ac[n]) {\n\t\t\t\t\t\t\tm \u003d parseInt(jj.items[q].ac[n].matches, 10);\n\t\t\t\t\t\t\tif (!m) {\n\t\t\t\t\t\t\t\tcla +\u003d \u0022 virt\u0022;\n\t\t\t\t\t\t\t\tm \u003d parseInt(jj.items[q].ac[n].agg, 10);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t\n\t\t\t\t\t\ts +\u003d \u0022\u003cli id\u003d'mi_ac\u0022 + mi + \u0022' string\u003d'\u0022 +\n\t\t\t\t\t\t\t\t\tsan(jj.items[q].ac[n].ac) + \n\t\t\t\t\t\t\t\t\t\u0022'\u003e\u003ctable class\u003d'\u0022 + cla +\n\t\t\t\t\t\t\t\t\t\u0022'\u003e\u003ctr\u003e\u003ctd\u003e\u0022 +\n\t\t\t\t\t\t\t\t\tsan(jj.items[q].ac[n].ac) +\n\t\t\t\t\t\t\t\t\t\u0022\u003c/td\u003e\u003ctd class\u003d'rac'\u003e\u0022 + m +\n\t\t\t\t\t\t\t\t\t\u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u0022 + \u0022\u003c/li\u003e\u0022;\n\t\t\t\t\t\t\n\t\t\t\t\t\tmi++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (jj.items[q].search) {\t\t\t\n\t\t\t\t\tfor (n \u003d 0; n \u003c jj.items[q].search.length; n++)\n\t\t\t\t\t\ts +\u003d \u0022\u003cli\u003e\u0022 +\n\t\t\t\t\t\t parseInt(jj.items[q].search[n].matches, 10) +\n\t\t\t\t\t\t \u0022\u003c/td\u003e\u003ctd\u003e\u0022 + san(jj.items[q].search[n].fp) +\n\t\t\t\t\t\t \u0022\u003c/li\u003e\u0022;\n\t\t\t\t}\n\t\t\t}\n\t\t\ts +\u003d \u0022\u003c/ul\u003e\u0022;\n\t\t\t\n\t\t\t if (!lic) {\n\t\t\t\t\t//s \u003d \u0022\u003cimg class\u003d'noentry'\u003e\u0022;\n\t\t\t\t\tinp.className \u003d \u0022nonviable\u0022;\n\t\t\t\t\tac.style.opacity \u003d \u00220\u0022;\n\t\t\t\t } else {\n\t\t\t\t\t inp.className \u003d \u0022viable\u0022;\n\t\t\t\t\t ac.style.opacity \u003d \u00221\u0022;\n\t\t\t\t }\n\t\t\t\n\t\t\tbreak;\n\t\t\t\n\t\tdefault:\n\t\t\t\n\t\t\t/* an index is being built... */\n\t\t\t\n\t\t\ts \u003d \u0022\u003ctable\u003e\u003ctr\u003e\u003ctd\u003e\u003cimg class\u003d'spinner'\u003e\u003c/td\u003e\u003ctd\u003e\u0022 +\n\t\t\t\t\u0022\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eIndexing\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv id\u003d'bar1' class\u003d'bar1'\u003e\u0022 +\n\t\t\t\t\u0022\u003cdiv id\u003d'bar2' class\u003d'bar2'\u003e\u0022 +\n\t\t\t\tjj.index_done + \u0022\u0026nbsp;/\u0026nbsp;\u0022 + jj.index_files +\n\t\t\t\t\u0022\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u0022 +\n\t\t\t\t\u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u0022;\n\t\t\n\t\t\tsetTimeout(goh_search_input, 300);\n\t\t\n\t\t\tbreak;\n\t\t}\n\t\t\n\t\tdocument.getElementById(\u0022searchresults\u0022).innerHTML \u003d s;\n\t\n\t\tfor (n \u003d 0; n \u003c mi; n++)\n\t\t\tif (document.getElementById(\u0022mi_ac\u0022 + n))\n\t\t\t\tdocument.getElementById(\u0022mi_ac\u0022 + n).\n\t\t\t\t\taddEventListener(\u0022click\u0022, goh_ac_select);\n\n\t\tinp.addEventListener(\u0022keydown\u0022,\n\t\t\t\tfunction(e) {\n\t\t\tvar inp \u003d document.getElementById(\u0022gohsearch\u0022);\n\t\t\tvar ac \u003d document.getElementById(\u0022searchresults\u0022);\n\t\t\tif (e.key \u003d\u003d\u003d \u0022Enter\u0022 \u0026\u0026 inp.className \u003d\u003d\u003d \u0022viable\u0022) {\n\t\t\t\tgoh_ac_select();\n\t\t\t\tac.style.opacity \u003d \u00220\u0022;\n\t\t\t}\n\t\t}, false);\n\t\t\n\t\tif (jj.index_files) {\n\t\t\tdocument.getElementById(\u0022bar2\u0022).style.width \u003d\n\t\t\t\t((150 * jj.index_done) / (jj.index_files + 1)) + \u0022px\u0022;\n\t\t}\n\t};\n\t\n\txhr.open(\u0022GET\u0022, makeurl(reponame, \u0022ac\u0022, null, qbranch, null, null,\n\t\t\t document.getElementById(\u0022gohsearch\u0022).value));\n\txhr.send();\n}\n\nfunction qindexing_update()\n{\n\tvar xhr \u003d new XMLHttpRequest();\n\n\txhr.onopen \u003d function(e) {\n\t\txhr.setRequestHeader('cache-control', 'max-age\u003d0');\n\t};\n\txhr.onload \u003d function(e) {\n\t\tvar sp1 \u003d xhr.responseText.split(\u0022class\u003d\u005c\u0022hidden-tiger\u005c\u0022\u003e\u0022),\n\t\t sp2 \u003d sp1[1].split(\u0022\u003c/div\u003e\u0022), jj;\n\t\t\n\t\tconsole.log(sp2[0]);\n\t\tjj \u003d JSON.parse(sp2[0]);\n\t\t\n\t\tsearch_results(jj);\n\t};\n\t\n\txhr.open(\u0022GET\u0022, makeurl(reponame, \u0022search\u0022, null, qbranch, null, null,\n\t\t\t qsearch));\n\txhr.send();\n}\n\nfunction search_results(j)\n{\n\tvar s \u003d \u0022\u0022, qi \u003d document.getElementById(\u0022qindexing\u0022);\n\tvar now \u003d new Date().getTime() / 1000;\n\n\tswitch(parseInt(j.indexed, 10)) {\n\t\n\tcase 1:\n\t\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd class\u003d'searchfiles'\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u003ctable\u003e\u0022;\n\n\t\t\tif (j.items[0] \u0026\u0026 j.items[0].search \u0026\u0026 j.items[0].search[0]) {\n\t\t\t\tvar n, lic \u003d j.items[0].search.length;\t\t\t\t\t\t\n\t\t\t\tfor (n \u003d 0; n \u003c lic; n++) {\n\t\t\t\t\tvar link \u003d \u0022\u0022;\n\t\t\t\t\t\n\t\t\t\t\tlink +\u003d j.items[0].search[n].fp;\n\t\t\t\t\t\n\t\t\t\t\ts +\u003d \u0022\u003ctr\u003e\u0022 +\n\t\t\t\t\t\t \u0022\u003ctd class\u003d'rpathinfo'\u003e\u0022 + j.items[0].search[n].matches +\n\t\t\t\t\t\t \u0022\u003c/td\u003e\u003ctd class\u003d'path'\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\t\t\t\t makeurl(reponame, \u0022tree\u0022, san(link),\n\t\t\t\t\t\t\t\t qbranch, null, null, qsearch) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\t\t\t san(link) +\n\t\t\t\t\t\u0022\u003c/a\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\t\t}\n\t\t\t}\n\t\t\n\t\ts +\u003d \u0022\u003c/main\u003e\u003c/td\u003e\u003ctd\u003e\u0022 + html_tree(j, now) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\tbreak;\n\t\t\n\tdefault:\n\t\t\t\t/* an index is being built... */\n\t\t\t\t\n\t\t\t\ts \u003d \u0022\u003ctable\u003e\u003ctr\u003e\u003ctd\u003e\u003cimg class\u003d'spinner'\u003e\u003c/td\u003e\u003ctd\u003e\u0022 +\n\t\t\t\t\t\u0022\u003ctable\u003e\u003ctr\u003e\u003ctd\u003eIndexing\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u003ctd\u003e\u0022 +\n\t\t\t\t\t\u0022\u003cdiv id\u003d'bar1' class\u003d'bar1'\u003e\u0022 +\n\t\t\t\t\t\u0022\u003cdiv id\u003d'bar2' class\u003d'bar2'\u003e\u0022 +\n\t\t\t\t\tj.index_done + \u0022\u0026nbsp;/\u0026nbsp;\u0022 + j.index_files +\n\t\t\t\t\t\u0022\u003c/div\u003e\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u0022 +\n\t\t\t\t\t\u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u0022 +\n\t\t\t\t\t\u0022\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\t\n\t\t\t\tsetTimeout(qindexing_update, 300);\n\t\t\t\n\t\t\t\tbreak;\n\t}\n\t\n\tif (qi) {\n\t\tqi.innerHTML \u003d s;\n\t\treturn \u0022\u0022;\n\t}\n\n\treturn s;\n}\n\nfunction display(j)\n{\n\tvar url \u003d window.location.pathname, q, hh, sp,\n\t\ts \u003d \u0022\u003ctable class\u003d'repobar'\u003e\u003ctbody class\u003d'repobar'\u003e\u0022,\n\t\tnow \u003d new Date().getTime() / 1000;\n\n\t/*\n\t * /vpath/reponame/mode/repopath[?h\u003dbranch][id\u003dxxx]\n\t */\n\t\n\tif (url.substr(0, j.vpath.length) \u003d\u003d\u003d j.vpath)\n\t\turl \u003d url.substr(j.vpath.length + 1);\n\t\n\tq \u003d url.split('/');\n\t\n\trelpre_no_mode \u003d j.vpath + '/';\n\t\n\tif (!blog_mode \u0026\u0026 reponame) {\n\t\tvar do_aliases \u003d null, s1 \u003d \u0022\u0022, s2 \u003d \u0022\u0022, s3 \u003d \u0022\u0022, s4 \u003d \u0022\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003ctr class\u003d'repobar'\u003e\u003ctd class\u003d'repobar'\u003e\u003cdiv class\u003d'repobar'\u003e\u0022 +\n\t\t \u0022\u003ctable\u003e\u003ctr\u003e\u003ctd\u003e\u003cspan class\u003d'reponame'\u003e\u0022 +\n\t\t\t \u0022\u003ca href\u003d'\u0022 + makeurl() + \u0022'\u003e\u0022 +\n\t\t\t \u0022\u003cimg class\u003d'repolist'\u003e\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t makeurl(reponame, \u0022summary\u0022, null, null, null, null) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t reponame + \u0022\u003c/a\u003e\u0026nbsp;\u0026nbsp;\u003c/span\u003e\u003c/td\u003e\u003ctd class\u003d'tight'\u003e\u0022;\n\n\t\ts +\u003d \u0022\u003ctable\u003e\u0022;\n\t\t\n\t\tif (j.desc)\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd class\u003d'tight info' colspan\u003d'2'\u003e\u0022 +\n\t\t\t\t \u0022\u003cimg class\u003d'info'\u003e\u0026nbsp;\u0022 + san(j.desc) + \u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\n\t\ts +\u003d \u0022\u003ctr\u003e\u0022;\n\t\t\n\t\tif (j.owner)\n\t\t\ts +\u003d \u0022\u003ctd class\u003d'tight'\u003e \u0022 + identity(j.owner, 16, 1) + \u0022\u003c/td\u003e\u0022;\n\t\telse\n\t\t\ts +\u003d \u0022\u003ctd\u003e\u003c/td\u003e\u0022;\n\t\t\t\n\t\tif (j.url)\n\t\t\ts +\u003d \u0022\u003ctd class\u003d'tight'\u003e \u0022 + \n\t\t\t\t \u0022\u003cimg class\u003d'copy' id\u003d'clonecopy'\u003e\u0026nbsp;\u003ci\u003egit clone \u0022 +\n\t\t\t\t san(j.url) + \u0022\u003c/i\u003e\u003c/td\u003e\u0022;\n\t\telse\n\t\t\ts +\u003d \u0022\u003ctd\u003e\u003c/td\u003e\u0022;\n\t\t\t\n\t\ts +\u003d \u0022\u003c/tr\u003e\u003c/table\u003e\u0022 +\n\t\t\t \u0022\u003c/td\u003e\u003c/tr\u003e\u003c/tbody\u003e\u003c/table\u003e\u0022 +\n\t\t\t \u0022\u003c/div\u003e\u003c/td\u003e\u0022 +\n\t\t\t \n\t\t\t \u0022\u003ctd class\u003d'rt'\u003e\u003cdiv class\u003d'search'\u003e\u0022 +\n\t\t\t \u0022\u003ctable\u003e\u003ctr\u003e\u003ctd rowspan\u003d'2'\u003e\u003cimg class\u003d'eyeglass'\u003e\u003c/td\u003e\u0022 +\n\t\t\t \u0022\u003ctd class\u003d'searchboxtitle'\u003eFulltext search\u003cbr\u003e\u0022 +\n\t\t\t \u0022\u003cinput type\u003d'text' id\u003d'gohsearch' name\u003d'gohsearch' maxlength\u003d'80'\u003e\u0022 +\n\t\t\t \u0022\u003cdiv class\u003d'searchresults' id\u003d'searchresults'\u003e\u003c/div\u003e\u0022 +\n\t\t\t \u0022\u003c/td\u003e\u003c/tr\u003e\u003c/table\u003e\u003c/div\u003e\u003c/td\u003e\u0022 +\n\t\t\t \n\t\t\t \u0022\u003c/tr\u003e\u0022 +\n\t\t\t \u0022\u003ctr class\u003d'tabbar'\u003e\u003ctd class\u003d'tabbar'\u003e\u0022;\n\t\t\t\n\t\tif (q[1]) {\n\t\t\t\n\t\t\tswitch (q[1]) {\n\t\t\tcase \u0022commit\u0022:\n\t\t\t\tif (j.items[0].commit)\n\t\t\t\tdo_aliases \u003d j.items[0].commit.oid;\n\t\t\t\tbreak;\n\t\t\tcase \u0022log\u0022:\n\t\t\t\tdo_aliases \u003d j.items[0].log[0].name;\n\t\t\t\ts2 \u003d \u0022 class\u003d\u005c\u0022selected\u005c\u0022 \u0022;\n\t\t\t\tbreak;\n\t\t\tcase \u0022tags\u0022:\n\t\t\tcase \u0022branches\u0022:\n\t\t\t\tbreak;\n\t\t\tcase \u0022summary\u0022:\n\t\t\t\ts1 \u003d \u0022 class\u003d\u005c\u0022selected\u005c\u0022 \u0022;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tif (q[1] \u003d\u003d\u003d \u0022blame\u0022)\n\t\t\t\t\ts4 \u003d \u0022 class\u003d\u005c\u0022selected\u005c\u0022 \u0022;\n\t\t\t\telse\n\t\t\t\t\ts3 \u003d \u0022 class\u003d\u005c\u0022selected\u005c\u0022 \u0022;\n\t\t\t\tdo_aliases \u003d j.items[0].oid;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t} else {\n\t\t\tdo_aliases \u003d j.items[0].oid;\n\t\t\ts3 \u003d \u0022 class\u003d\u005c\u0022selected\u005c\u0022 \u0022;\n\t\t}\n\t\t\n\t\t\n\t\ts +\u003d \u0022\u003cdiv class\u003d'tabbar'\u003e\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003cdiv class\u003d'tabs'\u003e\u003cul\u003e\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003cli \u0022 + s1 + \u0022\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\tmakeurl(reponame, \u0022summary\u0022, null, null, null, null) +\n\t\t\t\u0022\u005c\u0022\u003e\u003cimg class\u003d'summary'\u003e\u0022 + i18n(\u0022Summary\u0022) + \u0022\u003c/a\u003e\u003c/li\u003e\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003cli \u0022 + s2 + \u0022\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\tmakeurl(reponame, \u0022log\u0022, rpath, qbranch, qid, qofs) +\n\t\t\t\u0022\u005c\u0022\u003e\u003cimg class\u003d\u005c\u0022commits\u005c\u0022\u003e\u0022 + i18n(\u0022Log\u0022) + \u0022\u003c/a\u003e\u003c/li\u003e\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003cli \u0022 + s3 + \u0022\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\tmakeurl(reponame, \u0022tree\u0022, rpath, qbranch, qid, qofs) +\n\t\t\t\u0022\u005c\u0022\u003e\u003cimg class\u003d'tree'\u003e\u0022 + i18n(\u0022Tree\u0022) + \u0022\u003c/a\u003e\u003c/li\u003e\u0022;\n\t\t\n\t\tif (j.f \u0026 1) { /* capable of blame */\n\t\t\ts +\u003d \u0022\u003cli \u0022 + s4 + \u0022\u003e\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\t\tmakeurl(reponame, \u0022blame\u0022, rpath, qbranch, qid, qofs) +\n\t\t\t\t\u0022\u005c\u0022\u003e\u003cimg class\u003d'blame'\u003e\u0022 + i18n(\u0022Blame\u0022) + \u0022\u003c/a\u003e\u003c/li\u003e\u0022;\n\t\t}\n\t\t\n\t\ts +\u003d \u0022\u003c/ul\u003e\u003c/div\u003e\u0026nbsp;\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003cdiv id\u003d\u005c\u0022sai_sticky\u005c\u0022 class\u003d\u005c\u0022sai_sticky\u005c\u0022\u003e\u003c/div\u003e\u003cdiv class\u003d'rpathname'\u003e\u0022;\n\t\tif (do_aliases)\n\t\t\ts +\u003d aliases(do_aliases) + \u0022\u0026nbsp;\u0022;\n\t\t\n\t\tif (rpath) {\n\t\t\tvar n, e \u003d rpath.split('/'), agg \u003d \u0022\u0022, mo \u003d rmode;\n\t\t\t\n\t\t\tif (mo !\u003d\u003d \u0022tree\u0022 \u0026\u0026 mo !\u003d\u003d \u0022blame\u0022)\n\t\t\t\tmo \u003d \u0022tree\u0022;\n\n\t\t\ts +\u003d \u0022\u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\t\tmakeurl(reponame, mo, \u0022\u0022, qbranch, qid, qofs) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\ti18n(\u0022root\u0022) + \u0022\u003c/a\u003e\u0022;\n\t\t\t\n\t\t\ts +\u003d \u0022\u003cspan class\u003d'repopath'\u003e\u0022;\n\t\t\t\n\t\t\tfor (n \u003d 0; n \u003c e.length; n++) {\n\t\t\t\tif (e[n]) {\n\t\t\t\t\tif (n)\n\t\t\t\t\t\tagg +\u003d \u0022/\u0022;\n\t\t\t\t\tagg +\u003d e[n];\n\t\t\t\t\tif (n \u003d\u003d\u003d e.length - 1)\n\t\t\t\t\t\ts +\u003d \u0022 / \u0022 + e[n];\n\t\t\t\t\telse\n\t\t\t\t\t\ts +\u003d \u0022 / \u003ca href\u003d\u005c\u0022\u0022 +\n\t\t\t\t\t\t\tmakeurl(reponame, mo, agg, qbranch, qid, qofs) + \u0022\u005c\u0022\u003e\u0022 +\n\t\t\t\t\t\t\te[n] + \u0022\u003c/a\u003e\u0022;\n\t\t\t\t}\n\t\t\t}\n\t\t\ts +\u003d \u0022\u003c/span\u003e\u0022;\n\t\t}\n\t\ts +\u003d \u0022\u003c/div\u003e\u0022;\n\t\t\n\t\ts +\u003d \u0022\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t}\n\n\tif (q.length \u003d\u003d\u003d 1 \u0026\u0026 reponame)\n\t\trelpre_no_mode +\u003d q[0] + '/';\n\t\n\trelpre_no_mode +\u003d q[0] + '/';\n\t\n\tif (!blog_mode \u0026\u0026 q.length \u003c\u003d 2 \u0026\u0026 !reponame) {\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd class\u003d'repolist'\u003e\u0022 + html_repolist(j, now) +\n\t\t\t\u0022\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\tdocument.getElementById(\u0022result\u0022).innerHTML \u003d s + \u0022\u003c/table\u003e\u0022;\n\t\treturn;\n\t}\n\n\tif (j.items[0].error) {\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cspan class\u003d'error'\u003e\u003cimg class\u003d'warning'\u003e\u0022 + san(j.items[0].error) + \u0022\u003c/span\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t} else\n\t\n\tif (!blog_mode \u0026\u0026 q[1])\n\t\tswitch (q[1]) {\n\t\tcase \u0022log\u0022:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 +\n\t\t\t\thtml_log(j.items[0].log, now, 50, j.items[0].next) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\tbreak;\n\t\tcase \u0022commit\u0022:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 + html_commit(j) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\tbreak;\n\t\tcase \u0022tags\u0022:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 + html_tags(now, 999) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\tbreak;\n\t\tcase \u0022branches\u0022:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 + html_branches(now, 999) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\tbreak;\n\t\tcase \u0022summary\u0022:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 + display_summary(j, now) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\tbreak;\n\n\t\tcase \u0022search\u0022:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cdiv id\u003dqindexing\u003e\u0022 +\n\t\t\t\t\tsearch_results(j) +\n\t\t\t\t \u0022\u003c/div\u003e\u003c/td\u003e\u003c/tr\u003e\u0022\n\t\t\t\t\t;\n\t\t\tbreak;\n\t\tdefault:\n\t\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 + html_tree(j, now) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\t\t\tbreak;\n\t\t}\n\telse\n\t\ts +\u003d \u0022\u003ctr\u003e\u003ctd\u003e\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u0022 + html_tree(j, now) + \u0022\u003c/main\u003e\u003c/td\u003e\u003c/tr\u003e\u0022;\n\n\ts +\u003d \u0022\u003c/table\u003e\u0022;\n\t\n\tdocument.getElementById(\u0022result\u0022).innerHTML \u003d s;\n\n\n\n\t/* add class-based events now the objects exist */\n\n\tdocument.getElementById(\u0022gohsearch\u0022).addEventListener(\u0022input\u0022,\n\t\t\t\t\t\t\t\tgoh_search_input, false);\n\t\n//\telems \u003d document.getElementsByClassName(\u0022inline-identity\u0022);\n\t//for (n \u003d 0; n \u003c elems.length; n++)\n\t\t//elems[n].addEventListener(\u0022error\u0022, img_err_retry);\n\t\n\tif (j.f \u0026 2) {\n\t\tvar n1, elems \u003d document.getElementsByClassName(\u0022archive\u0022);\n\n\t\tfor (n1 \u003d 0; n1 \u003c elems.length; n1++)\n\t\t\telems[n1].addEventListener(\u0022click\u0022, archive_click);\n\t\t\n\t\telems \u003d document.getElementsByClassName(\u0022tag\u0022);\n\t\tfor (n1 \u003d 0; n1 \u003c elems.length; n1++)\n\t\t\telems[n1].addEventListener(\u0022click\u0022, archive_click);\n\t\t\n\t\telems \u003d document.getElementsByClassName(\u0022branch\u0022);\n\t\tfor (n1 \u003d 0; n1 \u003c elems.length; n1++)\n\t\t\telems[n1].addEventListener(\u0022click\u0022, archive_click);\n\t\t\n\t\telems \u003d document.getElementsByClassName(\u0022patch\u0022);\n\t\tfor (n1 \u003d 0; n1 \u003c elems.length; n1++)\n\t\t\telems[n1].addEventListener(\u0022click\u0022, archive_click);\n\t}\n\t\n\thh \u003d document.getElementById(\u0022clonecopy\u0022);\n\tif (hh)\n\t\thh.addEventListener(\u0022click\u0022, clonecopy_click);\n\t\n\tvar name \u003d rpath;\n\tif ((name \u0026\u0026 name.substring(name.length - 3) \u003d\u003d\u003d \u0022.md\u0022) ||\n\t\t(name \u0026\u0026 name.substring(name.length - 4) \u003d\u003d\u003d \u0022.mkd\u0022) ||\n\t\t ((!rmode || rmode \u003d\u003d\u003d \u0022tree\u0022 || rmode \u003d\u003d\u003d \u0022blame\u0022) \u0026\u0026\n\t\t document.getElementById(\u0022do-showdown\u0022))) {\n\t\t\n\t\tdoc_dir \u003d \u0022\u0022;\n\t\tif (name) {\n\t\t\tvar nn \u003d name.lastIndexOf(\u0022/\u0022);\n\t\t\tif (nn \u003e 0)\n\t\t\t\tdoc_dir \u003d name.substr(0, nn + 1);\n\t\t}\n\t\t\t\t\n\t\tshowdown.extension('sd_ext_plain', sd_ext_plain);\n\t\t\n\t\tvar conv \u003d new showdown.Converter({extensions: ['sd_ext_plain']});\n\t\thh \u003d document.getElementById(\u0022do-showdown\u0022);\n\t\t/* blog formatting? */\n\t\tvar hd \u003d hh.textContent.substring(0, 1024), bf \u003d 0, hdl \u003d 0,\n\t\t\t\thdhtml \u003d \u0022\u0022, hdhtmle \u003d \u0022\u0022;\n\t\t\n\t\tsp \u003d hd.split('\u005cn');\n\t\tif (sp[0].substr(0, 1) \u003d\u003d\u003d '%' \u0026\u0026 sp[1].substr(0, 1) \u003d\u003d\u003d '%' \u0026\u0026\n\t\t\tsp[2].substr(0, 1) \u003d\u003d\u003d '%') {\n\t\t\tbf \u003d 1;\n\t\t\thdl \u003d sp[0].length + sp[1].length + sp[2].length + 3;\n\t\t\thdhtml \u003d \u0022\u003cmain role\u003d\u005c\u0022main\u005c\u0022\u003e\u003cspan class\u003d\u005c\u0022blogtitle\u005c\u0022\u003e\u0022 + san(sp[0].substring(1)) +\n\t\t\t\t\t \u0022\u003c/span\u003e\u003cbr\u003e\u0022 +\n\t\t\t\t\t \u0022\u003cspan class\u003d\u005c\u0022blogdate\u005c\u0022\u003e\u0022 +\n\t\t\t\t\t\tsan(sp[2].substring(1)) + \u0022\u003c/span\u003e\u003cp\u003e\u0022;\n\t\t\thdhtmle \u003d \u0022\u003c/main\u003e\u0022;\n\t\t}\n\n\t\tconv.setOption('tables', '1');\n\t\tconv.setFlavor('github');\n\n\t\tif (bf)\n\t\t\thh.innerHTML \u003d hdhtml + conv.makeHtml(hh.textContent.substr(hdl)) + hdhtmle;\n\t\telse\n\t\t\thh.innerHTML \u003d \u0022\u003cmain role\u003d\u005c\u0022complementary\u005c\u0022\u003e\u0022 + conv.makeHtml(hh.textContent) + \u0022\u003c/main\u003e\u0022;\n\n\t} else\n\t\n\t\tif (typeof hljs !\u003d\u003d \u0022undefined\u0022) {\n\t\t\thh \u003d document.getElementById(\u0022do-hljs\u0022);\n\t\t\tif (hh) {\n\t\t\t\t\n\t\t\t\t/* workaround to stop hljs overriding the code class\n\t\t\t\t * restriction */\n\t\t\t\t\n\t\t\t\tif (hh.className)\n\t\t\t\t\thljs.configure({\n\t\t\t\t\t\ttabReplace: \u0022 \u0022,\n\t\t\t\t\t\tlanguages: [ hh.className ]\n\t\t\t\t\t});\n\t\t\t\telse\n\t\t\t\t\thljs.configure({\n\t\t\t\t\t\ttabReplace: \u0022 \u0022\n\t\t\t\t\t});\n\t\t\t\t\n\t\t\t\thljs.highlightBlock(hh);\n\t\t\t\t\n\t\t\t//\tif (qsearch)\n\t\t\t\t//\thh \u003d goh_search_highlight(hh, qsearch);\n\n\t\t\t\tvar ee \u003d document.getElementById(\u0022jglinenumbers\u0022), ef,\n\t\t\t\t\tcount, n2 \u003d 1;\n\t\t\t\tif (ee) {\n\t\t\t\t\tee.onclick \u003d line_range_click;\n\t\t\t\t\t\n//\t\t\t\t\tee.style.pointerEvents \u003d \u0022none\u0022;\n\n\t\t\t\t\tsp \u003d hh.textContent.split('\u005cn');\n\t\t\t\tcount \u003d sp.length;\n\t\t\t\tif (sp[sp.length - 1].length \u003d\u003d\u003d 0)\n\t\t\t\t\tcount--;\n\n\t\t\t\twhile (n2 \u003c\u003d count) {\n\t\t\t\t\tvar lin \u003d document.createElement(\u0022a\u0022);\n\t\t\t\t\tlin.id \u003d \u0022n\u0022 + n2;\n\t\t\t\t\tlin.href \u003d \u0022#n\u0022 + n2;\n\t\t\t\t\tlin.textContent \u003d (n2++) + \u0022\u005cn\u0022;\n\t\t\t\t\t\tee.appendChild(lin);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tvar top \u003d window.getComputedStyle(hh, null).\n\t\t\t\t\t\tgetPropertyValue(\u0022padding-top\u0022);\n\n\t\t\t\tif (ee)\n\t\t\t\t\tee.style.paddingTop \u003d top - 3;\n\t\t\t\t\n\t\t\t\t/* blame ... */\n\n\t\t\t\tif (j.items[1] \u0026\u0026 j.items[1].blame) {\n\t\t\t\t\tvar l1, l2, etr, r, m, hunk, hunks, lofs;\n\n\t\t\t\t\tblametable \u003d find_parent_of_type(ee, \u0022table\u0022);\n\t\t\t\t\t\n\t\t\t\t\tblametable.addEventListener(\u0022mousemove\u0022, blame_mousemove, false);\n\t\t\t\t\tblametable.addEventListener(\u0022mouseout\u0022, blame_mouseout, false);\n\t\t\t\t\t\n\t\t\t\t\thunks \u003d j.items[1].blame.length;\n\t\t\t\t\tfor (hunk \u003d 0; hunk \u003c hunks; hunk++) {\n\t\t\t\t\t\n\t\t\t\t\t\tr \u003d j.items[1].blame[hunk].ranges;\n\t\t\t\t\t\t\n\t\t\t\t\t\tif (r) {\n\t\t\t\t\t\t\tvar n3;\n\t\t\t\t\t\t\tfor (n3 \u003d 0; n3 \u003c r.length; n3++) {\n\t\t\n\t\t\t\t\t\t\t\tm \u003d document.createElement(\u0022DIV\u0022);\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tl1 \u003d r[n3].f;\n\t\t\t\t\t\t\t\tl2 \u003d l1 + r[n3].l - 1;\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tee \u003d document.getElementById('n' + l1);\n\t\t\t\t\t\t\t\tef \u003d document.getElementById('n' + l2);\n\t\t\t\t\t\t\t\tif (ee \u0026\u0026 ef) {\n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tm.className \u003d \u0022blamed-lines\u0022;\n\t\t\t\t\t\t\t\t\tm.style.bottom \u003d ee.style.bottom;\n\t\t\t\t\t\t\t\t\tm.style.top \u003d collect_offsetTop(ee) + 'px';\n\t\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\t\tm.classList.add('bhunk-' + hunk);\n\t\t\t\t\t\t\t\t\tm.setAttribute(\u0022r\u0022, n3);\n\t\t\t\t\n\t\t\t\t\t\t\t\t\t/* we will tack the highlight div at the parent tr */\n\t\t\t\t\t\t\t\t\tetr \u003d ee.parentNode;//find_parent_of_type(ee, \u0022table\u0022);\n\t\t\n\t\t\t\t\t\t\t\t\tlofs \u003d (hunk * 72) / hunks;\n\t\t\t\t\t\t\t\t\tm.style.width \u003d (blametable.offsetWidth - lofs) + 'px';\n\t\t\t\t\t\t\t\t\tm.style.left \u003d lofs + 'px';\n\t\t\t\t\t\t\t\t\tm.style.height \u003d (collect_offsetTop(ef) - collect_offsetTop(ee) + ef.offsetHeight) + 'px';\n\t\t\n\t\t\t\t\t\t\t\t\tetr.insertBefore(m, etr.firstChild);\n\t\t\t\t\t\t\t\t\tm.style.backgroundColor \u003d\n\t\t\t\t\t\t\t\t\t\t\u0022rgba(\u0022 + (128 + (((hunk) * 128) / hunks)) +\n\t\t\t\t\t\t\t\t\t\t \u0022, \u0022 + (128 + (((hunk) * 128) / hunks)) +\n\t\t\t\t\t\t\t\t\t\t \u0022, \u0022 + (128 + (((hunk) * 128) / hunks)) +\n\t\t\t\t\t\t\t\t\t\t \u0022, 0.3)\u0022;\n\t\t\t\t\t\t\t\t} else\n\t\t\t\t\t\t\t\t\tconsole.log(\u0022No element n\u0022 + l1); \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\n\t \t}\n\t }\n\n}\n\nfunction parse_json_reflist(j)\n{\n\tvar n;\n\t\n\tbranches.length \u003d 0;\n\ttags.length \u003d 0;\n\t\n\tfor (n \u003d 0; n \u003c j.items[0].reflist.length; n++) {\n\t\tvar l \u003d j.items[0].reflist[n];\n\t\tif (l.name.substr(0, 11) \u003d\u003d\u003d \u0022refs/heads/\u0022)\n\t\t\tbranches.push(l);\n\t\telse\n\t\t\tif (l.name.substr(0, 10) \u003d\u003d\u003d \u0022refs/tags/\u0022) {\n\t\t\t\tif (l.summary.sig_tagger \u0026\u0026\n\t\t\t\t l.summary.sig_tagger.git_time)\n\t\t\t\t\tl.summary.time \u003d l.summary.sig_tagger.git_time.time;\n\t\t\t\tif (!l.summary.sig_tagger \u0026\u0026 l.summary.sig_author)\n\t\t\t\t\tl.summary.sig_tagger \u003d l.summary.sig_author;\n\t\t\t\tif (!l.summary.msg_tag \u0026\u0026 l.summary.msg)\n\t\t\t\t\tl.summary.msg_tag \u003d l.summary.msg;\n\t\t\t\ttags.push(l);\n\t\t\t}\n\t}\n\t\n\tbranches.sort(comp_reftime);\n\ttags.sort(comp_reftime_tag);\n}\n\nfunction parse_json(j)\n{\n\tvar n, m, u \u003d window.location.pathname, vm, rnl, rml;\n\t\n\tj_avatar \u003d j.avatar;\n\tvpath \u003d j.vpath;\n\treponame \u003d j.reponame;\n\trmode \u003d null;\n\tqid \u003d null;\n\tqbranch \u003d null;\n\tqofs \u003d null;\n\tqsearch \u003d null;\n\tjf \u003d j.f;\n\t\n\tm \u003d vpath.length;\n\tif (!m)\n\tif (m \u003e 1) {\n\t\tm +\u003d 1;\n\t\tif (vpath[vpath.length - 1] \u003d\u003d\u003d '/')\n\t\t\tm--;\n\t}\n\tif (!reponame.length) {\n\t\treponame \u003d null;\n\t\trnl \u003d 0;\n\t} else\n\t\trnl \u003d reponame.length + 1;\n\t\n\tvm \u003d m;\n\tif (reponame)\n\t\tm +\u003d reponame.length;\n\t\n\trmode \u003d u.substr(m + 1);\n\tif (rmode.length \u003d\u003d\u003d 0) {\n\t\trmode \u003d null;\n\t\trml \u003d 0;\n\t} else {\n\t\tn \u003d rmode.indexOf('/');\n\t\tif (n \u003e\u003d 0) {\n\t\t\trmode \u003d rmode.substr(0, n);\n\t\t} else {\n\t\t\tn \u003d rmode.indexOf('?');\n\t\t\tif (n \u003e\u003d 0) {\n\t\t\t\trmode \u003d rmode.substr(0, n);\n\t\t\t}\n\t\t}\n\t\trml \u003d rmode.length + 1;\n\t}\n\n\trpath \u003d u.substr(vm + rnl + rml);\n\t\n\tm \u003d rpath.indexOf('?');\n\tif (m \u003e\u003d 0)\n\t\trpath \u003d rpath.substr(0, m - 1);\n\t\n\tif (rpath.substr(rpath.length - 1) \u003d\u003d\u003d \u0022/\u0022)\n\t\trpath \u003d rpath.substr(0, rpath.length - 1);\n\t\n\tif (rpath \u003d\u003d\u003d \u0022\u0022)\n\t\trpath \u003d null;\n\t\n\tu \u003d window.location.href;\n\tn \u003d u.indexOf('?');\n\n\tif (n \u003e\u003d 0) {\n\t\t\n\t\tu \u003d u.substr(n + 1);\n\t\n\t\tn \u003d u.indexOf(\u0022id\u003d\u0022);\n\t\tif (n \u003e\u003d 0)\n\t\t\tqid \u003d u.substr(n + 3, 40);\n\t\t\n\t\tn \u003d u.indexOf(\u0022h\u003d\u0022);\n\t\tif (n \u003e\u003d 0) {\n\t\t\tm \u003d u.substr(n + 2).indexOf('\u0026');\n\t\t\tif (m \u003e 0)\n\t\t\t\tqbranch \u003d u.substr(n + 2, m);\n\t\t\telse\n\t\t\t\tqbranch \u003d u.substr(n + 2);\n\t\t}\n\t\t\n\t\tn \u003d u.indexOf(\u0022ofs\u003d\u0022);\n\t\tif (n \u003e\u003d 0) {\n\t\t\tm \u003d u.substr(n + 4).indexOf('\u0026');\n\t\t\tif (m \u003e 0)\n\t\t\t\tqofs \u003d u.substr(n + 4, m);\n\t\t\telse\n\t\t\t\tqofs \u003d u.substr(n + 4);\n\t\t}\n\t\t\n\t\tn \u003d u.indexOf(\u0022q\u003d\u0022);\n\t\tif (n \u003e\u003d 0) {\n\t\t\tm \u003d u.substr(n + 2).indexOf('\u0026');\n\t\t\tif (m \u003e 0)\n\t\t\t\tqsearch \u003d decodeURIComponent(u.substr(n + 2, m));\n\t\t\telse\n\t\t\t\tqsearch \u003d decodeURIComponent(u.substr(n + 2));\n\t\t}\n\t}\n\n\tvar alang \u003d j.alang;\n\t\n\tif (alang) {\n\t\tvar a \u003d alang.split(\u0022,\u0022);\n\t\t\n\t\tfor (n \u003d 0; n \u003c a.length; n++) {\n\t\t\tvar b \u003d a[n].split(\u0022;\u0022);\n\t\t\tswitch (b[0]) {\n\t\t\tcase \u0022ja\u0022:\n\t\t\t\ti18n.translator.add(JSON.parse(lang_ja));\n\t\t\t\tn \u003d a.length;\n\t\t\t\tloca \u003d b[0];\n\t\t\t\tbreak;\n\t\t\tcase \u0022zh_TW\u0022:\n\t\t\tcase \u0022zh_HK\u0022:\n\t\t\tcase \u0022zh_SG\u0022:\n\t\t\tcase \u0022zh_HANT\u0022:\n\t\t\tcase \u0022zh-TW\u0022:\n\t\t\tcase \u0022zh-HK\u0022:\n\t\t\tcase \u0022zh-SG\u0022:\n\t\t\tcase \u0022zh-HANT\u0022:\n\t\t\t\ti18n.translator.add(JSON.parse(lang_zht));\n\t\t\t\tn \u003d a.length;\n\t\t\t\tloca \u003d b[0];\n\t\t\t\tbreak;\n\t\t\tcase \u0022zh\u0022:\n\t\t\tcase \u0022zh_CN\u0022:\n\t\t\tcase \u0022zh_HANS\u0022:\n\t\t\tcase \u0022zh-CN\u0022:\n\t\t\tcase \u0022zh-HANS\u0022:\n\t\t\t\ti18n.translator.add(JSON.parse(lang_zhs));\n\t\t\t\tn \u003d a.length;\n\t\t\t\tloca \u003d b[0];\n\t\t\t\tbreak;\n\t\t\tcase \u0022en\u0022:\n\t\t\tcase \u0022en_US\u0022:\n\t\t\tcase \u0022en-US\u0022:\n\t\t\t\tn \u003d a.length;\n\t\t\t\tloca \u003d b[0];\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t\n\tblog_mode \u003d !!(j.f \u0026 4);\n\t\n\tif (j.items[0].reflist)\n\t\tparse_json_reflist(j);\n}\n\nwindow.addEventListener(\u0022load\u0022, function() {\n\t//console.log(\u0022load\u0022);\n if (document.getElementById(\u0022noscript\u0022))\n document.getElementById(\u0022noscript\u0022).display \u003d \u0022none\u0022;\n\tline_range_highlight(1);\n}, false);\n\ndocument.addEventListener(\u0022DOMContentLoaded\u0022, function() {\n\tvar init \u003d document.getElementById(\u0022initial-json\u0022);\n\n//\tws \u003d new_ws(get_appropriate_ws_url(window.location.pathname), \u0022lws-gitws\u0022);\n\t \n\t\tif (init) {\n\t\t\tconsole.log(\u0022parsed initial json\u0022 + init.textContent);\n\t\t\tj \u003d JSON.parse(init.textContent);\n\t\t\tparse_json(j);\n\t\t\tdisplay(j);\n\t\t\t//init.remove();\n\t\t}\n\t\t\n\t\tvar st \u003d document.getElementById(\u0022gitohashi-stats\u0022);\n\t\t\n\t\tif (st) {\n\t\t\tvar n, s, now \u003d new Date().getTime() / 1000;\n\t\t\ts \u003d \u0022\u003ctable\u003e\u003ctr\u003e\u003ctd rowspan\u003d'2'\u003e\u003cimg class\u003d'stats'\u003e\u003c/td\u003e\u0022 +\n\t\t\t\t\u0022\u003ctd colspan\u003d'\u0022 + j.items.length + \u0022'\u003e\u0022;\n\n\t\t\ts +\u003d i18n(\u0022Page fetched %{pf} ago, creation time: %{ct}ms \u0022 +\n\t\t\t\t \u0022(vhost etag hits: %{ve}%, cache hits: %{ch}%)\u0022,\n\t\t\t\t\t {\n\t\t\t\t\t pf:agify(j.gen_ut, now),\n\t\t\t\t\t ct:Math.round(j.g / 1000),\n\t\t\t\t\t ve:parseInt(j.ehitpc, 10),\n\t\t\t\t\t ch:parseInt(j.chitpc, 10)\n\t\t\t\t\t }\n\t\t\t\t\t);\t\t\t\n\t\t\t\n\t\t\ts +\u003d \u0022\u003c/td\u003e\u003c/tr\u003e\u003ctr\u003e\u0022;\n\t\t\t\n\t\t\tfor (n \u003d 0; n \u003c j.items.length; n++) {\n\t\t\t\t\n\t\t\t\tif (j.items[n].s) {\n\t\t\t\ts +\u003d \u0022\u003ctd\u003e\u003cimg class\u003d\u005c\u0022cache\u005c\u0022\u003eJSON \u0022 + (n + 1) +\n\t\t\t\t\t\u0022: \u0022;\n\t\t\t\t\ts +\u003d i18n(\u0022Created %{pf} ago, creation time: %{ct}ms \u0022,\n\t\t\t\t\t\t\t\t {\n\t\t\t\t\t\t\t\t pf:agify(now, j.items[n].s.c),\n\t\t\t\t\t\t\t\t ct:Math.round(j.items[n].s.u / 1000)\n\t\t\t\t\t\t\t\t }\n\t\t\t\t\t\t\t\t);\t\n\t\t\t\t}\n\t\t\t}\n\t\t\ts +\u003d \u0022\u003c/tr\u003e\u003c/table\u003e\u0022;\n\n\t\t\tst.innerHTML \u003d s;\n\t\t}\n\t\t\n\t\taging();\n\t\n/*\n\t try {\n\t\t\tws.onopen \u003d function() {\n\t\t\t\tconsole.log(\u0022ot_open.onopen\u0022);\n\t\t\t}\n\t\t\tws.onmessage \u003dfunction got_packet(msg) {\n\t\t\t\t// document.getElementById(\u0022result\u0022).textContent \u003d msg.data;\n\t\t\t\tj \u003d JSON.parse(msg.data);\n\t\t\t\tparse_json(j);\n\t\t\t\t\n\t\t\t\tdisplay(j);\n\t\t\t}\n\t\t\tws.onclose \u003d function(e){\n\t\t\t\tconsole.log(\u0022 websocket connection CLOSED, code: \u0022 + e.code +\n\t\t\t\t\t \u0022, reason: \u0022 + e.reason);\n\t\t\t}\n\t\t} catch(exception) {\n\t\t\talert('\u003cp\u003eError' + exception); \n\t\t}\n\t\t*/\n}, false);\n\nwindow.addEventListener(\u0022hashchange\u0022, function() {\n\t//console.log(\u0022hashchange\u0022);\n\tline_range_highlight(1);\n}, false);\n\n}());\n","s":{"c":1713626864,"u": 8881}} ],"g": 157748,"chitpc": 0,"ehitpc": 0,"indexed":0 , "ab": 1, "si": 0, "db":0, "di":0, "sat":0, "lfc": "0000"}