1
0
Fork 0
mirror of https://codeberg.org/forgejo/forgejo.git synced 2024-11-22 08:42:32 -05:00

#1577 explore paginator problem

This commit is contained in:
Unknwon 2015-09-04 05:54:22 -04:00
parent 36a69e8aa5
commit d023e81a8f
12 changed files with 80 additions and 65 deletions

View file

@ -111,7 +111,7 @@ There are 5 ways to install Gogs:
- Ex-team members [@lunny](https://github.com/lunny) and [@fuxiaohei](https://github.com/fuxiaohei). - Ex-team members [@lunny](https://github.com/lunny) and [@fuxiaohei](https://github.com/fuxiaohei).
- See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors. - See [contributors page](https://github.com/gogits/gogs/graphs/contributors) for full list of contributors.
- See [TRANSLATORS](conf/locale/TRANSLATORS) for full list of translators. - See [TRANSLATORS](conf/locale/TRANSLATORS) for public list of translators.
## License ## License

View file

@ -66,7 +66,7 @@ Gogs 的目标是打造一个最简单、最快速和最轻松的方式搭建自
- 前团队成员 [@lunny](https://github.com/lunny) 和 [@fuxiaohei](https://github.com/fuxiaohei)。 - 前团队成员 [@lunny](https://github.com/lunny) 和 [@fuxiaohei](https://github.com/fuxiaohei)。
- 您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。 - 您可以通过查看 [贡献者页面](https://github.com/gogits/gogs/graphs/contributors) 获取完整的贡献者列表。
- 您可以通过查看 [TRANSLATORS](conf/locale/TRANSLATORS) 文件获取完整的翻译人员列表。 - 您可以通过查看 [TRANSLATORS](conf/locale/TRANSLATORS) 文件获取公开的翻译人员列表。
## 授权许可 ## 授权许可

View file

@ -29,7 +29,7 @@ organization=Организация
mirror=Mirror mirror=Mirror
new_repo=Ново хранилище new_repo=Ново хранилище
new_migrate=Нова миграция new_migrate=Нова миграция
new_fork=Нов форк на хранилище new_fork=Ново разклонено хранилище
new_org=Нова организация new_org=Нова организация
manage_org=Управление на организации manage_org=Управление на организации
admin_panel=Админ панел admin_panel=Админ панел
@ -208,7 +208,7 @@ org_still_own_repo=Тази организация все още притежа
still_own_user=Тази аутентикация се ползва все още, моля премахнете я от аутентиканцията и опитайте отново. still_own_user=Тази аутентикация се ползва все още, моля премахнете я от аутентиканцията и опитайте отново.
target_branch_not_exist=Таргетирания клон не съществува. target_branch_not_exist=Целевият клон не съществува.
[user] [user]
change_avatar=Сменете вашия аватар на gravatar.com change_avatar=Сменете вашия аватар на gravatar.com
@ -319,9 +319,9 @@ repo_name=Име на хранилище
repo_name_helper=Добро име на хранилище е име, състоящо от кратки, запомнящи се и уникални ключови думи. repo_name_helper=Добро име на хранилище е име, състоящо от кратки, запомнящи се и уникални ключови думи.
visibility=Видимост visibility=Видимост
visiblity_helper=Това хранилище е <span class="ui red text">Частно</span> visiblity_helper=Това хранилище е <span class="ui red text">Частно</span>
visiblity_fork_helper=(Промяна на тази стойност ще се отрази на всички форкове) visiblity_fork_helper=(Промяна на тази стойност ще се отрази на всички разклонения)
fork_repo=Форк на хранилището fork_repo=Разклони хранилището
fork_from=Форк от fork_from=Разклони от
fork_visiblity_helper=Не можете да промените видимостта на форкнато хранилище. fork_visiblity_helper=Не можете да промените видимостта на форкнато хранилище.
repo_desc=Описание repo_desc=Описание
repo_lang=Език repo_lang=Език
@ -340,14 +340,14 @@ form.name_pattern_not_allowed=Името на хранилище „%s“ не
need_auth=Нужда от удостоверяване need_auth=Нужда от удостоверяване
migrate_type=Тип мигриране migrate_type=Тип мигриране
migrate_type_helper=Това хранилище ще бъде <span class="ui red text">огледало</span> migrate_type_helper=Това хранилище ще бъде <span class="text blue">огледало</span>
migrate_repo=Мигриране на хранилището migrate_repo=Мигриране на хранилището
migrate.clone_address=Клонирай адрес migrate.clone_address=Клонирай адрес
migrate.clone_address_desc=Това може да е HTTP/HTTPS/GIT адрес или локален път на сървъра. migrate.clone_address_desc=Това може да е HTTP/HTTPS/GIT адрес или локален път на сървъра.
migrate.invalid_local_path=Невалиден път - не съществува или не е директория. migrate.invalid_local_path=Невалиден път - не съществува или не е директория.
forked_from=Форкнато от forked_from=разклонено от
fork_from_self=Не можете да форкнeте хранилище което си е Ваше! fork_from_self=Не можете да разклоните хранилище което си е Ваше!
copy_link=Копирай copy_link=Копирай
click_to_copy=Копиране в клипборда click_to_copy=Копиране в клипборда
copied=Успешно копирано copied=Успешно копирано
@ -355,7 +355,7 @@ clone_helper=Нуждаеш се от помощ при клониране? По
unwatch=Не следи повече unwatch=Не следи повече
watch=Следи watch=Следи
unstar=Не харесвам unstar=Не харесвам
star=Избрано star=Харесвам
fork=Форк fork=Форк
no_desc=Няма описание no_desc=Няма описание
@ -373,15 +373,15 @@ issues=Проблеми
pulls=Заявки за дърпане pulls=Заявки за дърпане
labels=Етикети labels=Етикети
milestones=Етапи milestones=Етапи
commits=Къмити commits=Доработки
releases=Релийзи releases=Релийзи
file_raw=Суров file_raw=Суров
file_history=История file_history=История
file_view_raw=Прегледай в суров вид file_view_raw=Прегледай в суров вид
file_permalink=Постоянна връзка file_permalink=Постоянна връзка
commits.commits=Къмити commits.commits=Доработки
commits.search=Търсене в къмити commits.search=Търсене в доработки
commits.find=Намери commits.find=Намери
commits.author=Автор commits.author=Автор
commits.message=Съобщение commits.message=Съобщение
@ -441,7 +441,7 @@ issues.reopen_comment_issue=Отвори отново и коментирай
issues.create_comment=Коментирай issues.create_comment=Коментирай
issues.closed_at=`затворен на <a id="%[1]s" href="#%[1]s">%[2]s</a>` issues.closed_at=`затворен на <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.reopened_at=`отворен отново на <a id="%[1]s" href="#%[1]s">%[2]s</a>` issues.reopened_at=`отворен отново на <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.commit_ref_at=`посочи този въпрос от къмит <a id="%[1]s" href="#%[1]s">%[2]s</a>` issues.commit_ref_at=`посочи този въпрос от доработка <a id="%[1]s" href="#%[1]s">%[2]s</a>`
issues.poster=Участник issues.poster=Участник
issues.admin=Администратор issues.admin=Администратор
issues.owner=Притежател issues.owner=Притежател
@ -470,18 +470,18 @@ pulls.no_results=Няма резултати.
pulls.nothing_to_compare=Няма нищо за сравняване защото базовия клон и заглавния клон са еднакви. pulls.nothing_to_compare=Няма нищо за сравняване защото базовия клон и заглавния клон са еднакви.
pulls.has_pull_request=`Вече има заявка за дърпане между тези две цели: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>` pulls.has_pull_request=`Вече има заявка за дърпане между тези две цели: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Създай заявка за дърпане pulls.create=Създай заявка за дърпане
pulls.title_desc=желае да обедини %[1]d къмити от <code>%[2]s</code> във <code>%[3]s</code> pulls.title_desc=желае да обедини %[1]d доработки от <code>%[2]s</code> във <code>%[3]s</code>
pulls.merged_title_desc=обедини %[1]d къмити от <code>%[2]s</code> във <code>%[3]s</code> %[4]s pulls.merged_title_desc=обедини %[1]d доработки от <code>%[2]s</code> във <code>%[3]s</code> %[4]s
pulls.tab_conversation=Разговор pulls.tab_conversation=Разговор
pulls.tab_commits=Къмити pulls.tab_commits=Доработки
pulls.tab_files=Променени файлове pulls.tab_files=Променени файлове
pulls.reopen_to_merge=Моля възобнови тази заявка за дърпане за да се извърши обединяване. pulls.reopen_to_merge=Моля възобнови тази заявка за дърпане за да се извърши обединяване.
pulls.merged=Обединени pulls.merged=Обединени
pulls.has_merged=Тази заявка за дърпане е обединена успешно! pulls.has_merged=Тази заявка за дърпане е обединена успешно!
pulls.data_broken=Данните от тази заявка за дърпане са некоректни поради изтриване на информация относно предишен форк. pulls.data_broken=Данните от тази заявка за дърпане са невалидни поради изтрита информация за някое разклонение.
pulls.can_auto_merge_desc=Можете да извършвате авто-обединяване на тази заявка за дърпане. pulls.can_auto_merge_desc=Можете да извършвате авто-обединяване на тази заявка за дърпане.
pulls.cannot_auto_merge_desc=Не можете да извършите авто-обединяване, защото съществуват конфликти между къмитите. pulls.cannot_auto_merge_desc=Не можете да извършите авто-обединяване, защото съществуват конфликти между доработките.
pulls.cannot_auto_merge_helper=Моля, използвайте инструмент от командния ред за да отстраните проблема. pulls.cannot_auto_merge_helper=Моля, използвайте инструменти на командния ред за да отстраните проблема.
pulls.merge_pull_request=Обедини заявка за дърпане pulls.merge_pull_request=Обедини заявка за дърпане
milestones.new=Нов етап milestones.new=Нов етап
@ -528,9 +528,9 @@ settings.transfer_notices_2=- Вие ще запазите достъпа си,
settings.transfer_form_title=Моля въведете следната информация за да потвърдите операцията: settings.transfer_form_title=Моля въведете следната информация за да потвърдите операцията:
settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие. settings.delete_notices_1=- Тази операция <strong>НЕ МОЖЕ</strong> да бъде отменена в последствие.
settings.delete_notices_2=- Тази операция ще изтрие всичко от това хранилище, включително Git данни, въпроси, коментари и достъпа на сътрудници. settings.delete_notices_2=- Тази операция ще изтрие всичко от това хранилище, включително Git данни, въпроси, коментари и достъпа на сътрудници.
settings.delete_notices_fork_1=- Ако това хранилище е публично, всички форкове ще останат като независими от него след изтриването му. settings.delete_notices_fork_1=- Ако това хранилище е публично, всички негови разклонения ще останат независими след изтриването му.
settings.delete_notices_fork_2=- Ако това хранилище е частно, всички форкове ще бъдат премахнати след изтриването му. settings.delete_notices_fork_2=- Ако това хранилище е частно, всички негови разклонения ще бъдат премахнати с изтриването му.
settings.delete_notices_fork_3=- Ако желаете да запазите всички форкове след изтриването, първо променете видимостта на това хранилище на публично. settings.delete_notices_fork_3=- Ако желаете да запазите всички разклонения след изтриването му, първо направете хранилището публично.
settings.update_settings_success=Опции за хранилище е актуализиран успешно. settings.update_settings_success=Опции за хранилище е актуализиран успешно.
settings.transfer_owner=Нов собственик settings.transfer_owner=Нов собственик
settings.make_transfer=Направи трансфер settings.make_transfer=Направи трансфер
@ -568,8 +568,8 @@ settings.event_send_everything=Имам нужда от <strong>всичко</st
settings.event_choose=Нека избера от какво имам нужда. settings.event_choose=Нека избера от какво имам нужда.
settings.event_create=Създай settings.event_create=Създай
settings.event_create_desc=Създаден е клон или маркер settings.event_create_desc=Създаден е клон или маркер
settings.event_push=Пуш settings.event_push=Предаване
settings.event_push_desc=Пуш от git в хранилището settings.event_push_desc=Git предаване към хранилището
settings.active=Активен settings.active=Активен
settings.active_helper=Подробности относно събитието извикало хуука ще бъде също представена. settings.active_helper=Подробности относно събитието извикало хуука ще бъде също представена.
settings.add_hook_success=Нова webhook е добавен. settings.add_hook_success=Нова webhook е добавен.
@ -615,7 +615,7 @@ release.tag_name=Име на етикет
release.target=Цел release.target=Цел
release.tag_helper=Изберете съществуващ етикет или създайте нов етикет при публикуване. release.tag_helper=Изберете съществуващ етикет или създайте нов етикет при публикуване.
release.release_title=Заглавие на изданието release.release_title=Заглавие на изданието
release.content_with_md=Съдържание с <a href="%s"> Markdown</a> release.content_with_md=Съдържание с <a href="%s">Markdown</a>
release.write=Писане release.write=Писане
release.preview=Преглед release.preview=Преглед
release.content_placeholder=Напишете някакво съдържание release.content_placeholder=Напишете някакво съдържание
@ -926,7 +926,7 @@ create_pull_request=`създаде заявка за дърпане <a href="%s
comment_issue=`коментира въпрос <a href="%s/issues/%s">%s#%[2]s"</a>` comment_issue=`коментира въпрос <a href="%s/issues/%s">%s#%[2]s"</a>`
merge_pull_request=`обедини заявка за дърпане <a href="%s/pulls/%s">%s#%[2]s</a>` merge_pull_request=`обедини заявка за дърпане <a href="%s/pulls/%s">%s#%[2]s</a>`
transfer_repo=прехвърлено хранилище: от <code>%s</code> към <a href="%s"> %s</a> transfer_repo=прехвърлено хранилище: от <code>%s</code> към <a href="%s"> %s</a>
push_tag=пушна маркер <a href="%s/src/%s">%[2]s</a> към <a href="%[1]s">[3]s</a> push_tag=предаде маркер <a href="%s/src/%s">%[2]s</a> към <a href="%[1]s">[3]s</a>
compare_2_commits=Виж сравнението между тези 2 комита compare_2_commits=Виж сравнението между тези 2 комита
[tool] [tool]

View file

@ -465,23 +465,23 @@ pulls.compare_changes=Änderungen vergleichen
pulls.compare_changes_desc=Vergleiche zwei Branches und erstelle einen Pull Request für die Änderungen. pulls.compare_changes_desc=Vergleiche zwei Branches und erstelle einen Pull Request für die Änderungen.
pulls.compare_base=base pulls.compare_base=base
pulls.compare_compare=vergleichen pulls.compare_compare=vergleichen
pulls.filter_branch=Filter branch pulls.filter_branch=Filter Branch
pulls.no_results=Keine Ergebnisse verfügbar. pulls.no_results=Keine Ergebnisse verfügbar.
pulls.nothing_to_compare=Es ist nichts zu vergleichen, da Base- und Head-Branch gleich sind. pulls.nothing_to_compare=Es ist nichts zu vergleichen, da Base- und Head-Branch gleich sind.
pulls.has_pull_request=`There is already a pull request between these two targets: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>` pulls.has_pull_request=`Es existiert bereits eine Pull-Anforderung zwischen diesen beiden Zielen: <a href="%[1]s/pulls/%[3]d">%[2]s#%[3]d</a>`
pulls.create=Pull Request erstellen pulls.create=Pull Request erstellen
pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> pulls.title_desc=wants to merge %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code>
pulls.merged_title_desc=merged %[1]d commits from <code>%[2]s</code> into <code>%[3]s</code> %[4]s pulls.merged_title_desc=%[1]d Commits von <code>%[2]s</code> nach <code>%[3]s</code> %[4]s zusammengeführt
pulls.tab_conversation=Unterhaltung pulls.tab_conversation=Unterhaltung
pulls.tab_commits=Commits pulls.tab_commits=Commits
pulls.tab_files=Dateien geändert pulls.tab_files=Dateien geändert
pulls.reopen_to_merge=Bitte diese Pull-Anforderung wiedereröffnen, um die Merge-Operation auszuführen. pulls.reopen_to_merge=Bitte diese Pull-Anforderung wiedereröffnen, um die Merge-Operation auszuführen.
pulls.merged=Zusammengeführt pulls.merged=Zusammengeführt
pulls.has_merged=This pull request has been merged successfully! pulls.has_merged=This pull request has been merged successfully!
pulls.data_broken=Data of this pull request has been broken due to deletion of fork information. pulls.data_broken=Die Daten dieser Pull-Anforderung sind defekt aufgrund des Löschens von Fork-Informationen.
pulls.can_auto_merge_desc=You can perform auto-merge operation on this pull request. pulls.can_auto_merge_desc=Du kannst eine Auto-Merge Operation auf diese Pull-Anforderung durchführen.
pulls.cannot_auto_merge_desc=You can't perform auto-merge operation because there are conflicts between commits. pulls.cannot_auto_merge_desc=Es kann keine Auto-Merge Operation durchgeführt werden, da es Konflikte zwischen den Commits gibt.
pulls.cannot_auto_merge_helper=Please use command line tool to solve it. pulls.cannot_auto_merge_helper=Bitte benutze ein Kommandozeilentool, um den Konflikt zu lösen.
pulls.merge_pull_request=Merge Pull Request pulls.merge_pull_request=Merge Pull Request
milestones.new=Neuer Meilenstein milestones.new=Neuer Meilenstein
@ -528,9 +528,9 @@ settings.transfer_notices_2=- Du wirst den Zugang behalten, wenn der neue Besitz
settings.transfer_form_title=Bitte gib die folgenden Informationen ein, um die Operation zu bestätigen: settings.transfer_form_title=Bitte gib die folgenden Informationen ein, um die Operation zu bestätigen:
settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden. settings.delete_notices_1=- Diese Operation kann <strong>NICHT</strong> rückgängig gemacht werden.
settings.delete_notices_2=- Die Operation wird alles, was mit diesem Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Mitarbeitern. settings.delete_notices_2=- Die Operation wird alles, was mit diesem Git-Repository verbunden ist, dauerhaft löschen, inklusive der Daten, Issues, Kommentare und Zugriffsrechte von Mitarbeitern.
settings.delete_notices_fork_1=- If this repository is public, all forks will be became independent after deletion. settings.delete_notices_fork_1=- Wenn dies ein öffentliches Repository ist, werden alle Forks unabhängig nach dem Löschen des Repositorys.
settings.delete_notices_fork_2=- If this repository is private, all forks will be removed at the same time. settings.delete_notices_fork_2=- Wenn dies ein privates Repository ist, dann werden gleichzeitig alle Forks entfernt.
settings.delete_notices_fork_3=- If you want to keep all forks after deletion, please change visibility of this repository to public first. settings.delete_notices_fork_3=Wenn alle Forks nach dem Löschen des Repositorys erhalten bleiben sollen, dann muss zuerst die Sichtbarkeit des Repositorys auf öffentlich gesetzt werden.
settings.update_settings_success=Repository-Optionen aktualisiert settings.update_settings_success=Repository-Optionen aktualisiert
settings.transfer_owner=Neuer Besitzer settings.transfer_owner=Neuer Besitzer
settings.make_transfer=übertragen settings.make_transfer=übertragen

View file

@ -740,10 +740,25 @@ func CreateRepository(u *User, opts CreateRepoOptions) (_ *Repository, err error
return repo, sess.Commit() return repo, sess.Commit()
} }
func countRepositories(showPrivate bool) int64 {
sess := x.NewSession()
if !showPrivate {
sess.Where("is_private=", false)
}
count, _ := sess.Count(new(Repository))
return count
}
// CountRepositories returns number of repositories. // CountRepositories returns number of repositories.
func CountRepositories() int64 { func CountRepositories() int64 {
count, _ := x.Count(new(Repository)) return countRepositories(true)
return count }
// CountPublicRepositories returns number of public repositories.
func CountPublicRepositories() int64 {
return countRepositories(false)
} }
// GetRepositoriesWithUsers returns given number of repository objects with offset. // GetRepositoriesWithUsers returns given number of repository objects with offset.

File diff suppressed because one or more lines are too long

View file

@ -74,11 +74,11 @@
"outputPathIsOutsideProject": 0, "outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0 "outputPathIsSetByUser": 0
}, },
"\/css\/semantic-2.0.8.min.css": { "\/css\/semantic-2.1.3.min.css": {
"fileType": 16, "fileType": 16,
"ignore": 0, "ignore": 0,
"ignoreWasSetByUser": 0, "ignoreWasSetByUser": 0,
"inputAbbreviatedPath": "\/css\/semantic-2.0.8.min.css", "inputAbbreviatedPath": "\/css\/semantic-2.1.3.min.css",
"outputAbbreviatedPath": "No Output Path", "outputAbbreviatedPath": "No Output Path",
"outputPathIsOutsideProject": 0, "outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0 "outputPathIsSetByUser": 0
@ -237,12 +237,12 @@
"outputPathIsSetByUser": 0, "outputPathIsSetByUser": 0,
"processed": 0 "processed": 0
}, },
"\/js\/semantic-2.0.8.min.js": { "\/js\/semantic-2.1.3.min.js": {
"fileType": 64, "fileType": 64,
"ignore": 0, "ignore": 0,
"ignoreWasSetByUser": 0, "ignoreWasSetByUser": 0,
"inputAbbreviatedPath": "\/js\/semantic-2.0.8.min.js", "inputAbbreviatedPath": "\/js\/semantic-2.1.3.min.js",
"outputAbbreviatedPath": "\/js\/min\/semantic-2.0.8.min-min.js", "outputAbbreviatedPath": "\/js\/min\/semantic-2.1.3.min-min.js",
"outputPathIsOutsideProject": 0, "outputPathIsOutsideProject": 0,
"outputPathIsSetByUser": 0, "outputPathIsSetByUser": 0,
"outputStyle": 1, "outputStyle": 1,

File diff suppressed because one or more lines are too long

11
public/css/semantic-2.1.3.min.css vendored Executable file

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -57,7 +57,7 @@ func Explore(ctx *middleware.Context) {
page = 1 page = 1
} }
ctx.Data["Page"] = paginater.New(int(models.CountRepositories()), setting.ExplorePagingNum, page, 5) ctx.Data["Page"] = paginater.New(int(models.CountPublicRepositories()), setting.ExplorePagingNum, page, 5)
repos, err := models.GetRecentUpdatedRepositories(page) repos, err := models.GetRecentUpdatedRepositories(page)
if err != nil { if err != nil {

View file

@ -18,11 +18,11 @@
<link rel="stylesheet" href="{{AppSubUrl}}/css/font-awesome-4.4.0.min.css"> <link rel="stylesheet" href="{{AppSubUrl}}/css/font-awesome-4.4.0.min.css">
<!-- Stylesheet --> <!-- Stylesheet -->
<link rel="stylesheet" href="{{AppSubUrl}}/css/semantic-2.1.2.min.css"> <link rel="stylesheet" href="{{AppSubUrl}}/css/semantic-2.1.3.min.css">
<link rel="stylesheet" href="{{AppSubUrl}}/css/gogs.min.css?v={{AppVer}}"> <link rel="stylesheet" href="{{AppSubUrl}}/css/gogs.min.css?v={{AppVer}}">
<!-- JavaScript --> <!-- JavaScript -->
<script src="{{AppSubUrl}}/js/semantic-2.1.2.min.js"></script> <script src="{{AppSubUrl}}/js/semantic-2.1.3.min.js"></script>
<script src="{{AppSubUrl}}/js/gogs.js?v={{AppVer}}"></script> <script src="{{AppSubUrl}}/js/gogs.js?v={{AppVer}}"></script>
<title>{{if .Title}}{{.Title}} - {{end}}{{AppName}}</title> <title>{{if .Title}}{{.Title}} - {{end}}{{AppName}}</title>