diff --git a/Builder/IISMainHandler/build.txt b/Builder/IISMainHandler/build.txt index b000479..cde50ca 100644 --- a/Builder/IISMainHandler/build.txt +++ b/Builder/IISMainHandler/build.txt @@ -1 +1 @@ -159 \ No newline at end of file +179 \ No newline at end of file diff --git a/Common/UserContext.cs b/Common/UserContext.cs index bebdf25..386831f 100644 --- a/Common/UserContext.cs +++ b/Common/UserContext.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Linq; using System.Text; +using System.Xml.Linq; namespace FLocal.Common { abstract public class UserContext { @@ -22,12 +23,25 @@ namespace FLocal.Common { abstract public string formatDateTime(DateTime dateTime); + abstract public XElement formatTotalPosts(long posts); + } public static class UserContext_Extensions { - public static string ToString(this DateTime dateTime, UserContext context) { + /*public static string ToString(this DateTime dateTime, UserContext context) { return context.formatDateTime(dateTime); + }*/ + + public static XElement ToXml(this DateTime dateTime) { + return new XElement("date", + new XElement("year", dateTime.Year), + new XElement("month", dateTime.Month), + new XElement("mday", dateTime.Day), + new XElement("hour", dateTime.Hour), + new XElement("minute", dateTime.Minute), + new XElement("second", dateTime.Second) + ); } } diff --git a/Common/dataobjects/Board.cs b/Common/dataobjects/Board.cs index 54bece4..dc27f06 100644 --- a/Common/dataobjects/Board.cs +++ b/Common/dataobjects/Board.cs @@ -156,7 +156,7 @@ namespace FLocal.Common.dataobjects { if(!this.lastPostId.HasValue) { return new XElement("none"); } else { - return this.lastPost.exportToXmlWithoutThread(context); + return this.lastPost.exportToXmlWithoutThread(context, false); } } diff --git a/Common/dataobjects/Post.cs b/Common/dataobjects/Post.cs index 5b63cc6..d2dcc33 100644 --- a/Common/dataobjects/Post.cs +++ b/Common/dataobjects/Post.cs @@ -20,6 +20,7 @@ namespace FLocal.Common.dataobjects { public const string FIELD_TITLE = "Title"; public const string FIELD_BODY = "Body"; public const string FIELD_THREADID = "ThreadId"; + public const string FIELD_PARENTPOSTID = "ParentPostId"; public static readonly TableSpec instance = new TableSpec(); public string name { get { return TABLE; } } public string idName { get { return FIELD_ID; } } @@ -88,6 +89,11 @@ namespace FLocal.Common.dataobjects { return this._body; } } + public string bodyShort { + get { + return this.body.Replace("
", Util.EOL).Substring(0, Math.Min(1000, this.body.IndexOf("<"))); + } + } private int _threadId; public int threadId { @@ -102,6 +108,19 @@ namespace FLocal.Common.dataobjects { } } + private int? _parentPostId; + public int? parentPostId { + get { + this.LoadIfNotLoaded(); + return this._parentPostId; + } + } + public Post parentPost { + get { + return Post.LoadById(this.parentPostId.Value); + } + } + protected override void doFromHash(Dictionary data) { this._posterId = int.Parse(data[TableSpec.FIELD_POSTERID]); this._postDate = new DateTime(long.Parse(data[TableSpec.FIELD_POSTDATE])); @@ -111,20 +130,36 @@ namespace FLocal.Common.dataobjects { this._title = data[TableSpec.FIELD_TITLE]; this._body = data[TableSpec.FIELD_BODY]; this._threadId = int.Parse(data[TableSpec.FIELD_THREADID]); + this._parentPostId = Util.ParseInt(data[TableSpec.FIELD_PARENTPOSTID]); } - public XElement exportToXmlWithoutThread(UserContext context) { + public XElement exportToXmlSimpleWithParent(UserContext context) { return new XElement("post", + new XElement("id", this.id), + new XElement("name", this.title), + new XElement("parent", this.thread.exportToXmlSimpleWithParent(context)) + ); + } + + public XElement exportToXmlWithoutThread(UserContext context, bool includeParentPost) { + XElement result = new XElement("post", new XElement("id", this.id), new XElement("poster", this.poster.exportToXmlForViewing(context)), - new XElement("postDate", this.postDate.ToString(context)), - new XElement("lastChangeDate", this.postDate.ToString(context)), + new XElement("postDate", this.postDate.ToXml()), + new XElement("lastChangeDate", this.postDate.ToXml()), new XElement("revision", this.revision), new XElement("layer", this.layer), new XElement("title", this.title), new XElement("body", this.body), + new XElement("bodyShort", this.bodyShort), new XElement("threadId", this.threadId) ); + if(includeParentPost) { + if(this.parentPostId.HasValue) { + result.Add(new XElement("parentPost", this.parentPost.exportToXmlWithoutThread(context, false))); + } + } + return result; } } diff --git a/Common/dataobjects/Thread.cs b/Common/dataobjects/Thread.cs index b341f41..11d4b5e 100644 --- a/Common/dataobjects/Thread.cs +++ b/Common/dataobjects/Thread.cs @@ -5,6 +5,7 @@ using System.Text; using System.Xml.Linq; using FLocal.Core; using FLocal.Core.DB; +using FLocal.Core.DB.conditions; namespace FLocal.Common.dataobjects { public class Thread : SqlObject { @@ -152,17 +153,39 @@ namespace FLocal.Common.dataobjects { public XElement exportToXml(UserContext context) { return new XElement("thread", new XElement("id", this.id), - new XElement("firstPostId", this.firstPost.exportToXmlWithoutThread(context)), + new XElement("firstPostId", this.firstPostId), new XElement("topicstarter", this.topicstarter.exportToXmlForViewing(context)), new XElement("title", this.title), new XElement("lastPostId", this.lastPostId), - new XElement("lastPostDate", this.lastPostDate.ToString(context)), + new XElement("lastPostDate", this.lastPostDate.ToXml()), new XElement("isAnnouncement", this.isAnnouncement), new XElement("isLocked", this.isLocked), new XElement("totalPosts", this.totalPosts), new XElement("totalViews", this.totalViews), new XElement("hasNewPosts", this.hasNewPosts()), - new XElement("body", this.firstPost.body) + new XElement("bodyShort", this.firstPost.bodyShort), + context.formatTotalPosts(this.totalPosts) + ); + } + + public IEnumerable getPosts(Diapasone diapasone, UserContext context) { + return Post.LoadByIds( + from stringId in Config.instance.mainConnection.LoadIdsByConditions( + Post.TableSpec.instance, + new ComparisonCondition( + Post.TableSpec.instance.getColumnSpec(Post.TableSpec.FIELD_THREADID), + ComparisonType.EQUAL, + this.id.ToString() + ), + diapasone, + new JoinSpec[0], + new SortSpec[] { + new SortSpec( + Post.TableSpec.instance.getIdSpec(), + true + ), + } + ) select int.Parse(stringId) ); } diff --git a/Common/dataobjects/User.cs b/Common/dataobjects/User.cs index 7bf00ef..81349ac 100644 --- a/Common/dataobjects/User.cs +++ b/Common/dataobjects/User.cs @@ -105,7 +105,7 @@ namespace FLocal.Common.dataobjects { public XElement exportToXmlForViewing(UserContext context) { return new XElement("user", new XElement("id", this.id), - new XElement("regDate", this.regDate.ToString(context)), + new XElement("regDate", this.regDate.ToXml()), new XElement("totalPosts", this.totalPosts), new XElement("signature", this.signature), new XElement("title", this.title), diff --git a/Core/DB/IDBConnection.cs b/Core/DB/IDBConnection.cs index 86eb9d8..277699d 100644 --- a/Core/DB/IDBConnection.cs +++ b/Core/DB/IDBConnection.cs @@ -10,6 +10,8 @@ namespace FLocal.Core.DB { List LoadIdsByConditions(ITableSpec table, conditions.AbstractCondition conditions, Diapasone diapasone, JoinSpec[] joins, SortSpec[] sorts); + long GetCountByConditions(ITableSpec table, conditions.AbstractCondition conditions, JoinSpec[] joins); + Transaction beginTransaction(System.Data.IsolationLevel iso); void lockTable(Transaction transaction, ITableSpec table); diff --git a/Core/Util.cs b/Core/Util.cs index aff1e04..f57e86e 100644 --- a/Core/Util.cs +++ b/Core/Util.cs @@ -133,6 +133,12 @@ namespace FLocal.Core { } } + public static string EOL { + get { + return new string(new char[] { (char)0x0d, (char)0x0a }); + } + } + } } diff --git a/Core/extensions/String.cs b/Core/extensions/String.cs index c52273e..3a90931 100644 --- a/Core/extensions/String.cs +++ b/Core/extensions/String.cs @@ -5,7 +5,7 @@ using System.Text; namespace FLocal.Core { - static class StringExtension { + public static class StringExtension { public static string PHPSubstring(this string str, int start, int length) { if(start > str.Length) { diff --git a/IISMainHandler/Extensions.cs b/IISMainHandler/Extensions.cs index 4fb2fe3..35a8e44 100644 --- a/IISMainHandler/Extensions.cs +++ b/IISMainHandler/Extensions.cs @@ -9,8 +9,7 @@ namespace FLocal.IISHandler { public static void WriteLine(this HttpResponse response, string toWrite) { response.Write(toWrite); - response.Write((char)0x0d); - response.Write((char)0x0a); + response.Write(Core.Util.EOL); } public static string[] Split(this string str, string separator, StringSplitOptions options) { diff --git a/IISMainHandler/HandlersFactory.cs b/IISMainHandler/HandlersFactory.cs index 340175f..40235b4 100644 --- a/IISMainHandler/HandlersFactory.cs +++ b/IISMainHandler/HandlersFactory.cs @@ -19,6 +19,10 @@ namespace FLocal.IISHandler { return new handlers.BoardsHandler(); case "board": return new handlers.BoardHandler(); + case "thread": + return new handlers.ThreadHandler(); + case "post": + return new handlers.PostHandler(); case "static": return new handlers.StaticHandler(context.requestParts); default: diff --git a/IISMainHandler/IISMainHandler.csproj b/IISMainHandler/IISMainHandler.csproj index 91c0b97..c013551 100644 --- a/IISMainHandler/IISMainHandler.csproj +++ b/IISMainHandler/IISMainHandler.csproj @@ -56,12 +56,14 @@ + + diff --git a/IISMainHandler/PageOuter.cs b/IISMainHandler/PageOuter.cs new file mode 100644 index 0000000..f6875e5 --- /dev/null +++ b/IISMainHandler/PageOuter.cs @@ -0,0 +1,88 @@ +п»їusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using FLocal.Core.DB; +using System.Xml.Linq; +using FLocal.Core; + +namespace FLocal.IISHandler { + class PageOuter : Diapasone { + + public readonly long perPage; + + private PageOuter(long start, long count, long perPage) + : base(start, count) { + this.perPage = perPage; + } + + private PageOuter(long perPage) + : base(0, -1) { + this.perPage = perPage; + } + + public static PageOuter create(long perPage, long total) { + PageOuter result = new PageOuter(0, perPage, perPage); + result.total = total; + return result; + } + + public static PageOuter createFromGet(string[] requestParts, long perPage, Dictionary> customAction, int offset) { + if(requestParts.Length > offset) { + if(requestParts[offset].ToLower() == "all") { + return new PageOuter(perPage); + } else if(Char.IsDigit(requestParts[offset][0])) { + return new PageOuter(long.Parse(requestParts[offset]), perPage, perPage); + } else { + return new PageOuter(customAction[requestParts[offset][0]](), perPage, perPage); + } + } else { + return new PageOuter(0, perPage, perPage); + } + } + + public static PageOuter createFromGet(string[] requestParts, long perPage, Dictionary> customAction) { + return createFromGet(requestParts, perPage, customAction, 2); + } + + public static PageOuter createFromGet(string[] requestParts, long perPage) { + return createFromGet(requestParts, perPage, new Dictionary>()); + } + + public XElement exportToXml(int left, int current, int right) { + XElement result = new XElement("pageOuter", + new XElement("unlimited", (this.count < 1).ToPlainString()), + new XElement("start", this.start), + new XElement("count", this.count), + new XElement("total", this.total), + new XElement("perPage", this.perPage) + ); + if(this.count > 0) { + if(this.start + this.count < this.total) { + result.Add(new XElement("next", this.start + this.count)); + } + } + HashSet pages = new HashSet(); + for(long i=0; i-current; i--) { + pages.Add(startFloor + i*this.perPage); + } + } + result.Add(new XElement("pages", + from page in pages where (page >= 0) && (page <= this.total) orderby page select new XElement("page", page) + )); + return result; + } + + } +} diff --git a/IISMainHandler/WebContext.cs b/IISMainHandler/WebContext.cs index 0f3d212..09e5e97 100644 --- a/IISMainHandler/WebContext.cs +++ b/IISMainHandler/WebContext.cs @@ -51,6 +51,10 @@ namespace FLocal.IISHandler { return dateTime.ToString(); } + public override System.Xml.Linq.XElement formatTotalPosts(long posts) { + return PageOuter.create(this.userSettings.postsPerPage, posts).exportToXml(2, 0, 2); + } + public DateTime requestTime; public WebContext(HttpContext httpcontext) { diff --git a/IISMainHandler/handlers/BoardHandler.cs b/IISMainHandler/handlers/BoardHandler.cs index 915ee0f..9857e81 100644 --- a/IISMainHandler/handlers/BoardHandler.cs +++ b/IISMainHandler/handlers/BoardHandler.cs @@ -6,6 +6,7 @@ using System.Web; using System.Xml.Linq; using FLocal.Common; using FLocal.Common.dataobjects; +using FLocal.Core.DB; namespace FLocal.IISHandler.handlers { @@ -19,10 +20,15 @@ namespace FLocal.IISHandler.handlers { override protected XElement[] getSpecificData(WebContext context) { Board board = Board.LoadById(int.Parse(context.requestParts[1])); + PageOuter pageOuter = PageOuter.createFromGet(context.requestParts, context.userSettings.threadsPerPage); + IEnumerable threads = board.getThreads(pageOuter, context); return new XElement[] { new XElement("currentLocation", board.exportToXmlSimpleWithParent(context)), new XElement("boards", from subBoard in board.subBoards select subBoard.exportToXml(context, true)), - new XElement("threads", from thread in board.getThreads(FLocal.Core.DB.Diapasone.unlimited, context) select thread.exportToXml(context)) + new XElement("threads", + from thread in threads select thread.exportToXml(context), + pageOuter.exportToXml(1, 5, 1) + ) }; } diff --git a/IISMainHandler/handlers/PostHandler.cs b/IISMainHandler/handlers/PostHandler.cs new file mode 100644 index 0000000..36fb2ec --- /dev/null +++ b/IISMainHandler/handlers/PostHandler.cs @@ -0,0 +1,30 @@ +п»їusing System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Web; +using System.Xml.Linq; +using FLocal.Common; +using FLocal.Common.dataobjects; + +namespace FLocal.IISHandler.handlers { + + class PostHandler : AbstractGetHandler { + + override protected string templateName { + get { + return "Post.xslt"; + } + } + + override protected XElement[] getSpecificData(WebContext context) { + Post post = Post.LoadById(int.Parse(context.requestParts[1])); + return new XElement[] { + new XElement("currentLocation", post.exportToXmlSimpleWithParent(context)), + new XElement("posts", post.exportToXmlWithoutThread(context, true)) + }; + } + + } + +} \ No newline at end of file diff --git a/IISMainHandler/handlers/ThreadHandler.cs b/IISMainHandler/handlers/ThreadHandler.cs index 75cb271..fc31c32 100644 --- a/IISMainHandler/handlers/ThreadHandler.cs +++ b/IISMainHandler/handlers/ThreadHandler.cs @@ -6,6 +6,9 @@ using System.Web; using System.Xml.Linq; using FLocal.Common; using FLocal.Common.dataobjects; +using FLocal.Core; +using FLocal.Core.DB; +using FLocal.Core.DB.conditions; namespace FLocal.IISHandler.handlers { @@ -18,10 +21,42 @@ namespace FLocal.IISHandler.handlers { } override protected XElement[] getSpecificData(WebContext context) { - Board board = Board.LoadById(int.Parse(context.requestParts[1])); + Thread thread = Thread.LoadById(int.Parse(context.requestParts[1])); + PageOuter pageOuter = PageOuter.createFromGet( + context.requestParts, + context.userSettings.postsPerPage, + new Dictionary> { + { + 'p', + () => Config.instance.mainConnection.GetCountByConditions( + Post.TableSpec.instance, + new ComplexCondition( + ConditionsJoinType.AND, + new List { + new ComparisonCondition( + Post.TableSpec.instance.getColumnSpec(Post.TableSpec.FIELD_THREADID), + ComparisonType.EQUAL, + thread.id.ToString() + ), + new ComparisonCondition( + Post.TableSpec.instance.getIdSpec(), + ComparisonType.LESSTHAN, + int.Parse(context.requestParts[2].PHPSubstring(1)).ToString() + ), + } + ), + new JoinSpec[0] + ) + } + } + ); + IEnumerable posts = thread.getPosts(pageOuter, context); return new XElement[] { - new XElement("currentLocation", board.exportToXmlSimpleWithParent(context)), - new XElement("boards", from subBoard in board.subBoards select subBoard.exportToXml(context, true)) + new XElement("currentLocation", thread.exportToXmlSimpleWithParent(context)), + new XElement("posts", + from post in posts select post.exportToXmlWithoutThread(context, true), + pageOuter.exportToXml(2, 5, 2) + ) }; } diff --git a/MySQLConnector/Connection.cs b/MySQLConnector/Connection.cs index c262112..332be19 100644 --- a/MySQLConnector/Connection.cs +++ b/MySQLConnector/Connection.cs @@ -141,6 +141,36 @@ namespace FLocal.MySQLConnector { } } + public long GetCountByConditions(ITableSpec table, FLocal.Core.DB.conditions.AbstractCondition conditions, JoinSpec[] joins) { + lock(this) { + using(DbCommand command = this.connection.CreateCommand()) { + + command.CommandType = System.Data.CommandType.Text; + + var conditionsCompiled = ConditionCompiler.Compile(conditions, this.traits); + string queryConditions = ""; + if(conditionsCompiled.Key != "") queryConditions = "WHERE " + conditionsCompiled.Key; + ParamsHolder paramsHolder = conditionsCompiled.Value; + + string queryJoins = ""; + { + if(joins.Length > 0) { + throw new NotImplementedException(); + } + } + + + command.CommandText = "SELECT COUNT(*) " + "FROM " + table.compile(this.traits) + " " + queryJoins + " " + queryConditions; + foreach(KeyValuePair kvp in paramsHolder.data) { + command.AddParameter(kvp.Key, kvp.Value); + } + object rawCount = command.ExecuteScalar(); + long count = (long)rawCount; + return count; + } + } + } + public FLocal.Core.DB.Transaction beginTransaction(System.Data.IsolationLevel iso) { lock(this) { Transaction transaction = new Transaction(this, iso); diff --git a/static/css/coffeehaus.css b/static/css/coffeehaus.css index d8fc2cc..ee9af64 100644 --- a/static/css/coffeehaus.css +++ b/static/css/coffeehaus.css @@ -60,8 +60,6 @@ body { border-style: solid; border-width: 1px 1px 1px 1px; border-color: #666699; - padding: 0px; - margin: 1px; } .catandforum { font-size: 8pt; diff --git a/static/css/global.css b/static/css/global.css index 7f15a9a..4ae9c2e 100644 --- a/static/css/global.css +++ b/static/css/global.css @@ -67,4 +67,7 @@ pre } .tablesurround > tr > td, .tableborders > tr > td { border:solid 1px black; +} +.navigation { + margin:3px; } \ No newline at end of file diff --git a/static/images/addreminder.gif b/static/images/addreminder.gif new file mode 100644 index 0000000..84e718d Binary files /dev/null and b/static/images/addreminder.gif differ diff --git a/static/images/edit.gif b/static/images/edit.gif new file mode 100644 index 0000000..b8a0604 Binary files /dev/null and b/static/images/edit.gif differ diff --git a/static/images/email2.gif b/static/images/email2.gif new file mode 100644 index 0000000..aa7298e Binary files /dev/null and b/static/images/email2.gif differ diff --git a/static/images/flat.gif b/static/images/flat.gif new file mode 100644 index 0000000..9a8136f Binary files /dev/null and b/static/images/flat.gif differ diff --git a/static/images/greyflat.gif b/static/images/greyflat.gif new file mode 100644 index 0000000..7932ac2 Binary files /dev/null and b/static/images/greyflat.gif differ diff --git a/static/images/greythreaded.gif b/static/images/greythreaded.gif new file mode 100644 index 0000000..28bf195 Binary files /dev/null and b/static/images/greythreaded.gif differ diff --git a/static/images/new.gif b/static/images/new.gif new file mode 100644 index 0000000..8076480 Binary files /dev/null and b/static/images/new.gif differ diff --git a/static/images/notifymod.gif b/static/images/notifymod.gif new file mode 100644 index 0000000..d8fd0ce Binary files /dev/null and b/static/images/notifymod.gif differ diff --git a/static/images/print.gif b/static/images/print.gif new file mode 100644 index 0000000..32b930a Binary files /dev/null and b/static/images/print.gif differ diff --git a/static/images/reply.gif b/static/images/reply.gif new file mode 100644 index 0000000..9bb3244 Binary files /dev/null and b/static/images/reply.gif differ diff --git a/static/images/threaded.gif b/static/images/threaded.gif new file mode 100644 index 0000000..7b7ae05 Binary files /dev/null and b/static/images/threaded.gif differ diff --git a/templates/Full/Board.xslt b/templates/Full/Board.xslt index 68952a3..3239467 100644 --- a/templates/Full/Board.xslt +++ b/templates/Full/Board.xslt @@ -38,13 +38,13 @@ Предыдущая страница /static/images/greyprevious.gif - Пред. + Пред. Список форумов - Список + Список @@ -53,7 +53,7 @@ Следующая страница /static/images/next.gif - След. + След. @@ -103,20 +103,10 @@ - страницы: - 0 - - /Board/1/p20/ - 20 - - - /Board/1/p40/ - 40 - - - /Board/1/p60/ - 60 - + страницы: + + /Board// + @@ -124,92 +114,6 @@ -
- - - - -
- - - - - - - - - - - - - - -
Дополнительная информация
- 11 зарегистрированных и 1 анонимных пользователей просматривают этот форум. -
-
- Модераторы: - Sash - DeadmoroZ  -
-
-
- Права - - - - - -
Вы можете создавать новые темы
Вы можете отвечать на сообщения
HTML отключен
UBBCode включен
-
- Легенда: - - - - - - - - - - - - - - - - - -
Новые сообщения
Нет новых сообщений
Новые сообщения
Нет новых сообщений
-
-
- Поиск в форуме - - -
-
-
- -
-
- -
-
- -
-
-
- Переход в - - -
-
-
\ No newline at end of file diff --git a/templates/Full/Boards.xslt b/templates/Full/Boards.xslt index 47ecf73..f03a7d5 100644 --- a/templates/Full/Boards.xslt +++ b/templates/Full/Boards.xslt @@ -22,17 +22,17 @@ - Вы вошли в форум как summersun + Вы вошли в форум как summersun
- 18983 Зарегистрированных пользователей. + 18983 Зарегистрированных пользователей.
- Приветствуем нового пользователя, + Приветствуем нового пользователя, _PC
- Сейчас 222 зарегистрированных и 54 анонимных пользователей в онлайне. + Сейчас 222 зарегистрированных и 54 анонимных пользователей в онлайне.
Текущее время: - 08.06.2010 14:17, Вторник + 08.06.2010 14:17, Вторник Просмотр новых сообщений @@ -49,10 +49,10 @@ Легенда:
* - Новые сообщения + Новые сообщения
* - Нет новых сообщений + Нет новых сообщений diff --git a/templates/Full/Post.xslt b/templates/Full/Post.xslt new file mode 100644 index 0000000..f9cc4c1 --- /dev/null +++ b/templates/Full/Post.xslt @@ -0,0 +1,80 @@ + + + + + + +
+ + + + +
+ + +
+
+
+ +
+ + + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + + + + +
+
+
+
+
+ +
\ No newline at end of file diff --git a/templates/Full/Thread.xslt b/templates/Full/Thread.xslt new file mode 100644 index 0000000..e8a7eed --- /dev/null +++ b/templates/Full/Thread.xslt @@ -0,0 +1,107 @@ + + + + + + +
+ + + + +
+ + + + + + + + +
+ + + + +
+ страницы: + + /Thread// + +
+
+ + + + +
+ страницы: + + /Thread// + +
+
+
+
+ +
+ + + + + + +
+ + + + +
+ + + + + +
+ + + + + + + + + + + +
+
+
+
+
+ +
\ No newline at end of file diff --git a/templates/Full/elems/BoardInfo.xslt b/templates/Full/elems/BoardInfo.xslt index 06a808b..5977338 100644 --- a/templates/Full/elems/BoardInfo.xslt +++ b/templates/Full/elems/BoardInfo.xslt @@ -29,7 +29,7 @@ /Board// - A + A @@ -51,7 +51,7 @@ Sash - , + , DeadmoroZ @@ -60,25 +60,24 @@ -
+
- /Thread//e/ - от + /Thread//p/ + от
- N/A + N/A
- - - /Board// - - - + + + /Board// + + \ No newline at end of file diff --git a/templates/Full/elems/Header.xslt b/templates/Full/elems/Header.xslt index 01dfd8d..ca64bb4 100644 --- a/templates/Full/elems/Header.xslt +++ b/templates/Full/elems/Header.xslt @@ -8,19 +8,19 @@ Root - | + | Google - | + | Yandex - | + | Mail.ru - | + | Vedomosti - | + | Afisha - | + | Weather - | + | LAN Support @@ -34,19 +34,19 @@
diff --git a/templates/Full/elems/Main.xslt b/templates/Full/elems/Main.xslt index d15319f..b10bf43 100644 --- a/templates/Full/elems/Main.xslt +++ b/templates/Full/elems/Main.xslt @@ -14,8 +14,8 @@
-Data used for authoring this XHTML document: -<xsl:copy-of select="/"/> + Data used for authoring this XHTML document: + <xsl:copy-of select="/"/> @@ -27,14 +27,21 @@ /Boards/ - >> + >> /Board// - >> + >> + + + + /Thread// + + + >> @@ -43,5 +50,84 @@ + + + + - + + - + + + + : + + : + + + + + + + + - + + - + + + + + + + -1 + + | + + + + + + + + + + + + + + -1 + + + + + + + + + + + + + + -1 + + + + + | + + + all + + все + + + | + + + Следующая страница + + + + diff --git a/templates/Full/elems/PostInfo.xslt b/templates/Full/elems/PostInfo.xslt new file mode 100644 index 0000000..146102e --- /dev/null +++ b/templates/Full/elems/PostInfo.xslt @@ -0,0 +1,162 @@ + + + + + + + + + + + + + + +
+ Post + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + /User// + + +
+ +
+ +
+ +
+ +
+ Рег.: + +
+ Сообщений: + +
+ Из: + +
+
+ + + + + +
+ + /Post// + + + + new + + + [ + + /Post// + re: + + + ] + + +
+ +
+ + + + +
+ + + + + + + + + +
+
+
+
+ + + + + + + + + +
+
+ + +
+
+
+
+
+
+
+
+
+ + +
+ + +
\ No newline at end of file diff --git a/templates/Full/elems/ThreadInfo.xslt b/templates/Full/elems/ThreadInfo.xslt index 6657e7d..f356016 100644 --- a/templates/Full/elems/ThreadInfo.xslt +++ b/templates/Full/elems/ThreadInfo.xslt @@ -4,7 +4,7 @@ - + * @@ -23,14 +23,9 @@ - - /Thread//0/ - 0 - - - /Thread//20/ - 20 - + + /Thread// + @@ -55,7 +50,7 @@ - +