diff --git a/Builder/IISMainHandler/build.txt b/Builder/IISMainHandler/build.txt
index 696ee77..0a5d03c 100644
--- a/Builder/IISMainHandler/build.txt
+++ b/Builder/IISMainHandler/build.txt
@@ -1 +1 @@
-2030
\ No newline at end of file
+2039
\ No newline at end of file
diff --git a/FLocal.IISHandler/TemplateEngine.cs b/FLocal.IISHandler/TemplateEngine.cs
index 5fd02d4..71e9169 100644
--- a/FLocal.IISHandler/TemplateEngine.cs
+++ b/FLocal.IISHandler/TemplateEngine.cs
@@ -111,7 +111,14 @@ namespace FLocal.IISHandler {
lock(this.locker) {
if(!this.cache.ContainsKey(templateName)) {
XslCompiledTransform xslt = new XslCompiledTransform();
- xslt.Load(FLocal.Common.Config.instance.dataDir + "Templates" + FLocal.Common.Config.instance.DirSeparator + templateName);
+ var path = FLocal.Common.Config.instance.dataDir + "Templates" + FLocal.Common.Config.instance.DirSeparator + templateName;
+ try {
+ xslt.Load(path);
+ } catch(XsltCompileException) {
+ throw;
+ } catch(XsltException e) {
+ throw new Exception("Unable to load xslt file: " + path, e);
+ }
this.cache[templateName] = xslt;
}
}
diff --git a/FLocal.IISHandler/WebContext.cs b/FLocal.IISHandler/WebContext.cs
index 22fee7e..f8d4741 100644
--- a/FLocal.IISHandler/WebContext.cs
+++ b/FLocal.IISHandler/WebContext.cs
@@ -198,6 +198,15 @@ namespace FLocal.IISHandler {
}
}
+ private static readonly Type BaseType = (new object()).GetType();
+ private string getFullTypeName(Type type, int allowedIterations) {
+ if(allowedIterations <= 0 || type.BaseType == null || type.BaseType.FullName == BaseType.FullName || type.BaseType.FullName == type.FullName) {
+ return type.FullName;
+ } else {
+ return type.FullName + " : " + getFullTypeName(type.BaseType, allowedIterations-1);
+ }
+ }
+
public void LogError(Exception e) {
string dir;
if(e is AccessDeniedException) {
@@ -218,7 +227,8 @@ namespace FLocal.IISHandler {
writer.WriteLine("Session: " + this.httprequest.Cookies[Config.instance.CookiesPrefix + "_session"].Value);
}
writer.WriteLine();
- writer.WriteLine("Exception: " + e.GetType().FullName);
+
+ writer.WriteLine("Exception: " + getFullTypeName(e.GetType(), 20));
writer.WriteLine("Guid: " + e.GetGuid().ToString());
writer.WriteLine(e.Message);
if(e is FLocalException) {
@@ -226,6 +236,8 @@ namespace FLocal.IISHandler {
} else {
writer.WriteLine(e.StackTrace);
}
+ writer.WriteLine("==============================");
+ writer.WriteLine(e.ToString());
}
}
diff --git a/Resources/FLocal/static/css/modern/blue.css b/Resources/FLocal/static/css/modern/blue.css
index 166196e..fe0759f 100644
--- a/Resources/FLocal/static/css/modern/blue.css
+++ b/Resources/FLocal/static/css/modern/blue.css
@@ -110,6 +110,9 @@ blockquote .quotecontent {
.metroicon-edit {
background-image:url(/static/images/metro.icons/black/edit.png);
}
+.metroicon-i {
+ background-image:url(/static/images/metro.icons/black/i.png);
+}
.metroicon-mail {
background-image:url(/static/images/metro.icons/black/mail.png);
}
diff --git a/Resources/FLocal/static/css/modern/high-contrast.css b/Resources/FLocal/static/css/modern/high-contrast.css
index 79e5aa3..03eb818 100644
--- a/Resources/FLocal/static/css/modern/high-contrast.css
+++ b/Resources/FLocal/static/css/modern/high-contrast.css
@@ -90,6 +90,9 @@ blockquote .quotecontent {
.metroicon-edit {
background-image:url(/static/images/metro.icons/white/edit.png);
}
+.metroicon-i {
+ background-image:url(/static/images/metro.icons/white/i.png);
+}
.metroicon-mail {
background-image:url(/static/images/metro.icons/white/mail.png);
}
diff --git a/Resources/FLocal/templates/Modern/elems/BoardInfo.xslt b/Resources/FLocal/templates/Modern/elems/BoardInfo.xslt
index b179660..9992237 100644
--- a/Resources/FLocal/templates/Modern/elems/BoardInfo.xslt
+++ b/Resources/FLocal/templates/Modern/elems/BoardInfo.xslt
@@ -6,7 +6,7 @@
Тем:
Сообщений:
Тем:
Сообщений: