- public data import ran with empty HtmlText for poet/category pages (upstream fills it with a separate admin TOC job), so poet pages showed no works; the import now regenerates tables of contents for the importing user - replace Ganjoor's logo image (gdap/gdapk) with the Divan wordmark on all pages; delete it Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
300 lines
11 KiB
Plaintext
300 lines
11 KiB
Plaintext
@page
|
|
@model ErrorModel
|
|
@{
|
|
Layout = null;
|
|
ViewData["Title"] = "غیر متوقع خرابی";
|
|
}
|
|
|
|
<!DOCTYPE html>
|
|
<html lang="ur-PK" dir="rtl">
|
|
<head>
|
|
<meta charset="utf-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
<title>
|
|
@ViewData["Title"]
|
|
</title>
|
|
<link href="~/css/p8.css" asp-append-version="true" rel="stylesheet" type="text/css" />
|
|
<partial name="_DivanHead" />
|
|
<link rel="shortcut icon" href="/favicon.ico?version=1" type="image/x-icon" />
|
|
<link rel="search" type="application/opensearchdescription+xml" title="دیوان" href="/search.xml" />
|
|
|
|
<style>
|
|
code, pre {
|
|
background-color: #333;
|
|
color: #fff;
|
|
border: none !important;
|
|
direction:ltr;
|
|
}
|
|
|
|
.stacktrace .st-type {
|
|
color: #0a8472;
|
|
font-weight: bolder
|
|
}
|
|
|
|
.stacktrace .st-method {
|
|
color: #70c9ba;
|
|
font-weight: bolder
|
|
}
|
|
|
|
.stacktrace .st-frame-params {
|
|
color: #fff;
|
|
font-weight: 400
|
|
}
|
|
|
|
.stacktrace .st-param-type {
|
|
color: #0a8472
|
|
}
|
|
|
|
.stacktrace .st-param-name {
|
|
color: #fff
|
|
}
|
|
|
|
.stacktrace .st-file {
|
|
color: #f8b068
|
|
}
|
|
|
|
.stacktrace .st-line {
|
|
color: #ff4f68
|
|
}
|
|
</style>
|
|
</head>
|
|
|
|
<body>
|
|
<div id="hdr">
|
|
<h1><a href="/" title="دیوان"><span class="divan-wordmark divan-wordmark--sm">دیوان</span></a></h1>
|
|
</div>
|
|
|
|
<h1 class="text-danger">غیر متوقع خرابی</h1>
|
|
<h2 class="text-danger">افسوس، مطلوبہ صفحہ دکھاتے ہوئے خرابی پیش آئی.</h2>
|
|
<p>اگر صفحہ دوبارہ لوڈ کرنے سے بھی یہ خرابی دور نہ ہو تو ممکن ہے دیوان کے سرور پر بوجھ ہو یا کوئی مسئلہ ہو جسے حل ہونے میں کچھ وقت لگے۔ براہِ کرم کچھ دیر بعد دوبارہ کوشش کریں:</p>
|
|
|
|
@if (Model.ShowRequestId)
|
|
{
|
|
<p>
|
|
<strong>درخواست کی شناخت:</strong> <code>@Model.RequestId</code>
|
|
</p>
|
|
}
|
|
|
|
<h3>پروگرامر کے لیے خرابی کی تفصیل</h3>
|
|
|
|
<h4>خرابی کا پیغام:</h4>
|
|
<p style="direction:ltr;color:red">
|
|
@ViewData["Exception"]
|
|
</p>
|
|
|
|
<h4>خرابی کا راستہ:</h4>
|
|
|
|
<pre>
|
|
<code style="direction:ltr" class="stacktrace" data-bind="text: content">
|
|
@ViewData["StackTrace"]
|
|
</code>
|
|
</pre>
|
|
|
|
|
|
<script src="/lib/jquery/dist/jquery.min.js"></script>
|
|
|
|
<script>
|
|
/*!
|
|
* netStack v1.0.14
|
|
* A simple and easy jQuery plugin for highlighting .NET stack traces
|
|
* License : Apache 2
|
|
* Author : https://elmah.io
|
|
*/
|
|
(function($) {
|
|
'use strict';
|
|
|
|
$.fn.netStack = function(options) {
|
|
|
|
function search(nameKey, myArray) {
|
|
for (var i = 0; i < myArray.length; i++) {
|
|
if (myArray[i].name === nameKey) {
|
|
return myArray[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
function formatException(exceptionMessage, at_language) {
|
|
var result = exceptionMessage || '';
|
|
var searchReplaces = [
|
|
{
|
|
find: new RegExp(" " + at_language, "g"),
|
|
repl: '\r\n ' + at_language
|
|
},
|
|
{
|
|
find: new RegExp(" ---> ", "g"),
|
|
repl: '\r\n ---> '
|
|
},
|
|
{
|
|
find: new RegExp("\\) " + at_language + " ", "g"),
|
|
repl: '\r\n ' + at_language + ' '
|
|
},
|
|
{
|
|
find: / --- End of inner exception stack trace ---/g,
|
|
repl: '\r\n --- End of inner exception stack trace ---'
|
|
}
|
|
]
|
|
searchReplaces.forEach(function(item) {
|
|
result = result.replace(item.find, item.repl);
|
|
});
|
|
return result;
|
|
};
|
|
|
|
var settings = $.extend({
|
|
|
|
// Default values for classes
|
|
prettyprint: false,
|
|
frame: 'st-frame',
|
|
type: 'st-type',
|
|
method: 'st-method',
|
|
paramsList: 'st-frame-params',
|
|
paramType: 'st-param-type',
|
|
paramName: 'st-param-name',
|
|
file: 'st-file',
|
|
line: 'st-line'
|
|
|
|
}, options);
|
|
|
|
var languages = [
|
|
{ name: 'english', at: 'at', in: 'in', line: 'line' },
|
|
{ name: 'danish', at: 'ved', in: 'i', line: 'linje' },
|
|
{ name: 'german', at: 'bei', in: 'in', line: 'Zeile' }
|
|
];
|
|
|
|
return this.each(function() {
|
|
|
|
// Get the stacktrace, sanitize it, and split it into lines
|
|
|
|
var stacktrace = $(this).text(),
|
|
sanitizedStack = stacktrace.replace(/</g, '<').replace(/>/g, '>'),
|
|
lines = sanitizedStack.split('\n'),
|
|
lang = '',
|
|
clone = '';
|
|
|
|
// search for language
|
|
for (var i = 0, j = lines.length; i < j; ++i) {
|
|
if (lang === '') {
|
|
var line = lines[i];
|
|
var english = new RegExp('\\bat .*\\)'),
|
|
danish = new RegExp('\\bved .*\\)'),
|
|
german = new RegExp('\\bbei .*\\)');
|
|
|
|
if (english.test(lines[i])) {
|
|
lang = 'english';
|
|
} else if (danish.test(lines[i])) {
|
|
lang = 'danish';
|
|
} else if (german.test(lines[i])) {
|
|
lang = 'german';
|
|
}
|
|
}
|
|
}
|
|
|
|
if (lang === '') return;
|
|
|
|
var selectedLanguage = search(lang, languages);
|
|
|
|
// Pritty print result if is set to true
|
|
if (settings.prettyprint) {
|
|
sanitizedStack = formatException(sanitizedStack, selectedLanguage['at']);
|
|
lines = sanitizedStack.split('\n');
|
|
}
|
|
|
|
for (var i = 0, j = lines.length; i < j; ++i) {
|
|
|
|
var li = lines[i],
|
|
hli = new RegExp('\\b' + selectedLanguage['at'] + ' .*\\)');
|
|
|
|
if (hli.test(lines[i])) {
|
|
|
|
// Frame
|
|
var regFrame = new RegExp('\\b' + selectedLanguage['at'] + ' .*?\\)'),
|
|
partsFrame = String(regFrame.exec(lines[i]));
|
|
partsFrame = partsFrame.replace(selectedLanguage['at'] + ' ', '');
|
|
|
|
// Frame -> ParameterList
|
|
var regParamList = new RegExp('\\(.*\\)'),
|
|
partsParamList = String(regParamList.exec(lines[i]));
|
|
|
|
// Frame -> Params
|
|
var partsParams = partsParamList.replace('(', '').replace(')', ''),
|
|
arrParams = partsParams.split(', '),
|
|
stringParam = '';
|
|
|
|
for (var x = 0, y = arrParams.length; x < y; ++x) {
|
|
var theParam = '',
|
|
param = arrParams[x].split(' '),
|
|
paramType = param[0],
|
|
paramName = param[1];
|
|
|
|
if (param[0] !== "null" && param[0] !== '') {
|
|
theParam = '<span class="' + settings.paramType + '">' + paramType + '</span>' + ' ' + '<span class="' + settings.paramName + '">' + paramName + '</span>';
|
|
stringParam += String(theParam) + ', ';
|
|
}
|
|
}
|
|
|
|
stringParam = stringParam.replace(/,\s*$/, "");
|
|
stringParam = '<span class="' + settings.paramsList + '">' + '(' + stringParam + ')' + '</span>';
|
|
|
|
// Frame -> Type & Method
|
|
var partsTypeMethod = partsFrame.replace(partsParamList, ''),
|
|
arrTypeMethod = partsTypeMethod.split('.'),
|
|
method = arrTypeMethod.pop(),
|
|
type = partsTypeMethod.replace('.' + method, ''),
|
|
stringTypeMethod = '<span class="' + settings.type + '">' + type + '</span>.' + '<span class="' + settings.method + '">' + method + '</span>';
|
|
|
|
// Construct Frame
|
|
var newPartsFrame = partsFrame.replace(partsParamList, stringParam).replace(partsTypeMethod, stringTypeMethod);
|
|
|
|
// Line
|
|
var regLine = new RegExp('\\b:' + selectedLanguage['line'] + '.*'),
|
|
partsLine = String(regLine.exec(lines[i]));
|
|
partsLine = partsLine.replace(':', '');
|
|
|
|
// File => (!) text requires multiline to exec regex, otherwise it will return null.
|
|
var regFile = new RegExp('\\b' + selectedLanguage['in'] + '\\s.*$', 'm'),
|
|
partsFile = String(regFile.exec(lines[i]));
|
|
partsFile = partsFile.replace(selectedLanguage['in'] + ' ', '').replace(':' + partsLine, '');
|
|
|
|
li = li.replace(partsFrame, '<span class="' + settings.frame + '">' + newPartsFrame + '</span>')
|
|
.replace(partsFile, '<span class="' + settings.file + '">' + partsFile + '</span>')
|
|
.replace(partsLine, '<span class="' + settings.line + '">' + partsLine + '</span>');
|
|
|
|
li = li.replace(/</g, '<span><</span>').replace(/>/g, '<span>></span>');
|
|
|
|
if (lines.length - 1 == i) {
|
|
clone += li;
|
|
} else {
|
|
clone += li + '\n';
|
|
}
|
|
} else {
|
|
if ((lines[i].trim()).length) {
|
|
li = lines[i];
|
|
|
|
if (lines.length - 1 == i) {
|
|
clone += li;
|
|
} else {
|
|
clone += li + '\n';
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return $(this).html(clone);
|
|
|
|
});
|
|
|
|
};
|
|
|
|
}(jQuery));
|
|
|
|
|
|
$(document).ready(function() {
|
|
$('.stacktrace').netStack({
|
|
prettyprint: true
|
|
});
|
|
});
|
|
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html> |