Шаблон Synio (в процессе)
|
@ -0,0 +1,21 @@
|
|||
{**
|
||||
* Админка
|
||||
*
|
||||
* @param boolean $availableAdminPlugin
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{lang 'admin.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'nav'
|
||||
hook = 'admin_nav'
|
||||
mods = 'stacked pills'
|
||||
items = [
|
||||
[ 'name' => 'user', 'url' => "{router page='admin/plugins'}?plugin=admin&action=activate&security_ls_key={$LIVESTREET_SECURITY_KEY}", 'text' => {lang 'admin.install_plugin_admin'}, is_enabled => $availableAdminPlugin ],
|
||||
[ 'name' => 'plugins', 'url' => "{router page='admin'}plugins/", 'text' => {lang 'admin.items.plugins'} ]
|
||||
]}
|
||||
{/block}
|
|
@ -0,0 +1,15 @@
|
|||
{**
|
||||
* Плагины
|
||||
*
|
||||
* @param array $plugins Список плагинов
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.admin.tpl'}
|
||||
|
||||
{block 'layout_admin_page_title'}
|
||||
{lang 'admin.items.plugins'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'admin' template='plugins' plugins=$plugins}
|
||||
{/block}
|
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Уведомление об успешной регистрации
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.registration.notices.success_activate}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
<a href="{router page='/'}">{$aLang.common.site_go_main}</a>
|
||||
{/block}
|
|
@ -0,0 +1,15 @@
|
|||
{**
|
||||
* Просьба перейти по ссылке отправленной на емэйл для активации аккаунта
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.registration.confirm.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{$aLang.auth.registration.confirm.text}<br /><br />
|
||||
|
||||
<a href="{router page='/'}">{$aLang.common.site_go_main}</a>
|
||||
{/block}
|
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Регистрация через инвайт
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.invite.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'auth' template='invite'}
|
||||
{/block}
|
13
application/frontend/skin/synio/actions/ActionAuth/login.tpl
Normal file
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Страница входа
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.login.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'auth' template='login' showExtra=true}
|
||||
{/block}
|
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Форма запроса повторной активации аккаунта
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.reactivation.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'auth' template='reactivation'}
|
||||
{/block}
|
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Регистрация
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.registration.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'auth' template='registration'}
|
||||
{/block}
|
13
application/frontend/skin/synio/actions/ActionAuth/reset.tpl
Normal file
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Форма восстановления пароля
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.reset.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'auth' template='reset'}
|
||||
{/block}
|
|
@ -0,0 +1,14 @@
|
|||
{**
|
||||
* Восстановление пароля.
|
||||
* Пароль отправлен на емэйл пользователя.
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.auth.reset.title}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{$aLang.auth.reset.notices.success_send_password}
|
||||
{/block}
|
20
application/frontend/skin/synio/actions/ActionBlog/add.tpl
Normal file
|
@ -0,0 +1,20 @@
|
|||
{**
|
||||
* Создание блога
|
||||
*
|
||||
* @param array $blogCategories Список категорий блогов
|
||||
* @param object $blogEdit Блог, передается в случае если блог редактируется
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.blog.edit.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{if $sEvent == 'add'}
|
||||
{$aLang.blog.add.title}
|
||||
{else}
|
||||
{$aLang.blog.admin.title}: <a href="{$blogEdit->getUrlFull()}">{$blogEdit->getTitle()|escape}</a>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'blog' template='add' blog=$blogEdit}
|
||||
{/block}
|
17
application/frontend/skin/synio/actions/ActionBlog/admin.tpl
Normal file
|
@ -0,0 +1,17 @@
|
|||
{**
|
||||
* Управление пользователями блога
|
||||
*
|
||||
* @param object $blogEdit Блог
|
||||
* @param array $blogUsers Список пользователей блога
|
||||
* @param array $blogUsersInvited Список приглашенных пользователей, передается в случае если блог закрытый
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.blog.edit.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.blog.admin.title}: <a href="{$blogEdit->getUrlFull()}">{$blogEdit->getTitle()|escape}</a>
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'blog' template='admin' users=$blogUsers pagination=$paging}
|
||||
{/block}
|
34
application/frontend/skin/synio/actions/ActionBlog/blog.tpl
Normal file
|
@ -0,0 +1,34 @@
|
|||
{**
|
||||
* Блог
|
||||
*
|
||||
* @param object $blog Блог
|
||||
* @param boolean $isPrivateBlog Закрытый блог или нет
|
||||
* @param array $topics Список топиков
|
||||
* @param array $paging Пагинация
|
||||
* @param string $periodSelectCurrent
|
||||
* @param string $periodSelectRoot
|
||||
* @param array $blogUsers Читатели блога
|
||||
* @param array $blogModerators Модераторы блога
|
||||
* @param array $blogAdministrators Администраторы блога
|
||||
* @param integer $countBlogUsers Кол-во читателей
|
||||
* @param integer $countBlogModerators Кол-во модераторов
|
||||
* @param integer $countBlogAdministrators Кол-во администраторов
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.topics.tpl'}
|
||||
|
||||
{block 'layout_content_header'}
|
||||
{component 'blog' blog=$blog blogs=$blogs}
|
||||
|
||||
{$smarty.block.parent}
|
||||
|
||||
{* Сообщение для забаненного пользователя *}
|
||||
{if $blogUserCurrent and $blogUserCurrent->getIsBanned()}
|
||||
{component 'alert' text=$aLang.blog.alerts.banned mods='error'}
|
||||
{/if}
|
||||
|
||||
{* Список топиков *}
|
||||
{if $isPrivateBlog}
|
||||
{component 'alert' text=$aLang.blog.alerts.private mods='error'}
|
||||
{/if}
|
||||
{/block}
|
10
application/frontend/skin/synio/actions/ActionBlog/index.tpl
Normal file
|
@ -0,0 +1,10 @@
|
|||
{**
|
||||
* Список топиков
|
||||
*
|
||||
* @param array $topics
|
||||
* @param array $paging
|
||||
* @param string $periodSelectCurrent
|
||||
* @param string $periodSelectRoot
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.topics.tpl'}
|
42
application/frontend/skin/synio/actions/ActionBlog/topic.tpl
Normal file
|
@ -0,0 +1,42 @@
|
|||
{**
|
||||
* Топик
|
||||
*
|
||||
* @param object $topic
|
||||
* @param array $comments
|
||||
* @param integer $lastCommentId
|
||||
* @param array $pagingComments
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{* Топик *}
|
||||
{component 'topic' template='topic-type' topic=$topic}
|
||||
|
||||
{* Комментарии *}
|
||||
{component 'comment' template='comments'
|
||||
comments = $comments
|
||||
count = $topic->getCountComment()
|
||||
classes = 'js-topic-comments'
|
||||
attributes = [ 'id' => 'comments' ]
|
||||
targetId = $topic->getId()
|
||||
targetType = 'topic'
|
||||
authorId = $topic->getUserId()
|
||||
authorText = $aLang.topic.author
|
||||
dateReadLast = $topic->getDateRead()
|
||||
forbidAdd = $topic->getForbidComment()
|
||||
forbidText = $aLang.topic.comments.notices.not_allowed
|
||||
useSubscribe = true
|
||||
isSubscribed = $topic->getSubscribeNewComment() && $topic->getSubscribeNewComment()->getStatus()
|
||||
lastCommentId = $lastCommentId
|
||||
pagination = [
|
||||
total => +$pagingComments.iCountPage,
|
||||
current => +$pagingComments.iCurrentPage,
|
||||
url => "{$pagingComments.sGetParams}{($pagingComments.sGetParams) ? '&' : '?'}cmtpage=__page__"
|
||||
]
|
||||
commentParams = [
|
||||
useVote => true,
|
||||
useEdit => true,
|
||||
useFavourite => true
|
||||
]}
|
||||
{/block}
|
19
application/frontend/skin/synio/actions/ActionBlog/users.tpl
Normal file
|
@ -0,0 +1,19 @@
|
|||
{**
|
||||
* Список пользователей которые подключены к блогу
|
||||
*
|
||||
* @param object $blog
|
||||
* @param array $blogUsers
|
||||
* @param integer $countBlogUsers
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.blog.users.readers_all} ({$countBlogUsers}):
|
||||
<a href="{$blog->getUrlFull()}">{$blog->getTitle()|escape}</a>
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'user' template='list' users=$blogUsers pagination=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,38 @@
|
|||
{**
|
||||
* Список блогов
|
||||
*
|
||||
* @param array $blogs
|
||||
* @param integer $searchCount
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_options' append}
|
||||
{$sMenuHeadItemSelect = 'blogs'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.blog.blogs}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'blog' template='search-form'}
|
||||
|
||||
{* Сортировка *}
|
||||
{component 'sort' template='ajax'
|
||||
classes = 'js-search-sort js-search-sort-menu'
|
||||
text = $aLang.blog.sort.by_users
|
||||
items = [
|
||||
[ name => 'blog_count_user', text => $aLang.blog.sort.by_users ],
|
||||
[ name => 'blog_count_topic', text => $aLang.blog.sort.by_topics ],
|
||||
[ name => 'blog_title', text => $aLang.sort.by_title ]
|
||||
]}
|
||||
|
||||
{* Список блогов *}
|
||||
<div class="js-search-ajax-blog">
|
||||
<h3 class="h3 js-blog-list-search-title" style="display: none"></h3>
|
||||
|
||||
{component 'blog' template='list' blogs=$blogs useMore=true}
|
||||
</div>
|
||||
{/block}
|
|
@ -0,0 +1,14 @@
|
|||
{**
|
||||
* Создание/редактирование топика
|
||||
*
|
||||
* @parama object $topicEdit
|
||||
* @parama string $topicType
|
||||
* @parama array $blogsAllow
|
||||
* @parama integer $blogId
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.content.form.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'topic.add-type' classes='syn-form-panel' topic=$topicEdit type=$topicType blogs=$blogsAllow blogId=$blogId skipBlogs=$skipBlogs}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Черновики
|
||||
*
|
||||
* @parama array $topics
|
||||
* @parama array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.content.form.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.topic.add.title.add}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'topic.list' topics=$topics paging=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,23 @@
|
|||
{**
|
||||
* Страница вывода ошибок
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_options' append}
|
||||
{$layoutShowSystemMessages = false}
|
||||
{/block}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{if $aMsgError[0].title}
|
||||
{$aLang.common.error.error}: <span>{$aMsgError[0].title}</span>
|
||||
{/if}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
<p>{$aMsgError[0].msg}</p>
|
||||
<p>
|
||||
<a href="javascript:history.go(-1);">{$aLang.common.site_history_back}</a>,
|
||||
<a href="{router page='/'}">{$aLang.common.site_go_main}</a>
|
||||
</p>
|
||||
{/block}
|
|
@ -0,0 +1,8 @@
|
|||
{**
|
||||
* Главная
|
||||
*
|
||||
* @parama array $topics
|
||||
* @parama array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.index.tpl'}
|
|
@ -0,0 +1,36 @@
|
|||
{**
|
||||
* Список всех пользователей
|
||||
*
|
||||
* @param array $users
|
||||
* @param integer $searchCount
|
||||
* @param array $countriesUsed
|
||||
* @param array $paging
|
||||
* @param array $usersStat
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.user.users}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'user' template='search-form'}
|
||||
|
||||
{* Сортировка *}
|
||||
{component 'sort' template='ajax'
|
||||
classes = 'js-search-sort js-search-sort-menu'
|
||||
text = $aLang.sort.by_rating
|
||||
items = [
|
||||
[ name => 'user_rating', text => $aLang.sort.by_rating, order => 'asc' ],
|
||||
[ name => 'user_login', text => $aLang.sort.by_login ],
|
||||
[ name => 'user_date_register', text => $aLang.sort.by_date_registration ]
|
||||
]}
|
||||
|
||||
{* Список пользователей *}
|
||||
<div class="js-search-ajax-users">
|
||||
<h3 class="h3 js-user-list-search-title" style="display: none"></h3>
|
||||
|
||||
{component 'user' template='list' users=$users useMore=true}
|
||||
</div>
|
||||
{/block}
|
|
@ -0,0 +1,20 @@
|
|||
{**
|
||||
* Активность пользователя
|
||||
*
|
||||
* @param array $activityEvents
|
||||
* @param integer $activityEventsAllCount
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang name='activity.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'activity'
|
||||
events = $activityEvents
|
||||
count = $activityEventsAllCount
|
||||
targetId = $oUserProfile->getId()
|
||||
classes = 'js-activity--user'}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Список комментариев созданных пользователем
|
||||
*
|
||||
* @param array $comments
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.created.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang 'user.publications.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'comment.list' comments=$comments paging=$paging classes='js-topic-comments-list'}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Список заметок созданных пользователем
|
||||
*
|
||||
* @param array $notesUsers
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.created.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang 'user.publications.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user.list' users=$notesUsers pagination=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Список топиков созданных пользователем
|
||||
*
|
||||
* @param array $topics
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.created.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang 'user.publications.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'topic.list' topics=$topics paging=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Избранные комментарии пользователя
|
||||
*
|
||||
* @param array $comments
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.favourite.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang 'user.favourites.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'comment.list' comments=$comments paging=$paging classes='js-topic-comments-list'}
|
||||
{/block}
|
|
@ -0,0 +1,25 @@
|
|||
{**
|
||||
* Избранные топики пользователя
|
||||
*
|
||||
* @param array $topics
|
||||
* @param array $paging
|
||||
* @param array $activeFavouriteTag
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.favourite.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang 'user.favourites.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{* Блок с тегами избранного *}
|
||||
{if $oUserCurrent && $oUserCurrent->getId() == $oUserProfile->getId()}
|
||||
{insert name='block' block='tagsPersonalTopic' params=[
|
||||
'user' => $oUserProfile,
|
||||
'activeTag' => $activeFavouriteTag
|
||||
]}
|
||||
{/if}
|
||||
|
||||
{component 'topic.list' topics=$topics paging=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Список друзей
|
||||
*
|
||||
* @param array $friends
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang name='user.friends.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user' template='list' users=$friends pagination=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,29 @@
|
|||
{**
|
||||
* Профиль пользователя с информацией о нем
|
||||
*
|
||||
* @param array usersInvited
|
||||
* @param object invitedByUser
|
||||
* @param array blogsJoined
|
||||
* @param array blogsModerate
|
||||
* @param array blogsAdminister
|
||||
* @param array blogsCreated
|
||||
* @param array usersFriend
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.tpl'}
|
||||
|
||||
{block 'layout_content_header' prepend}
|
||||
{component 'user.header' user=$oUserProfile}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user' template='info'
|
||||
user = $oUserProfile
|
||||
friends = $userFriends
|
||||
usersInvited = $usersInvited
|
||||
invitedByUser = $invitedByUser
|
||||
blogsJoined = $blogsJoined
|
||||
blogsAdminister = $blogsAdminister
|
||||
blogsModerate = $blogsModerate
|
||||
blogsCreated = $blogsCreated}
|
||||
{/block}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Стена
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.tpl'}
|
||||
|
||||
{block 'layout_user_page_title'}
|
||||
{lang name='wall.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{insert name='block' block='wall' params=[
|
||||
'classes' => 'js-wall-default',
|
||||
'user_id' => $oUserProfile->getId()
|
||||
]}
|
||||
{/block}
|
27
application/frontend/skin/synio/actions/ActionRss/index.tpl
Normal file
|
@ -0,0 +1,27 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
|
||||
<channel>
|
||||
<title>{$aChannel.title}</title>
|
||||
<link>{$aChannel.link}</link>
|
||||
<atom:link href="{$PATH_WEB_CURRENT}/" rel="self" type="application/rss+xml" />
|
||||
<description><![CDATA[{$aChannel.description}]]></description>
|
||||
<language>{$aChannel.language}</language>
|
||||
<managingEditor>{$aChannel.managingEditor} ({Router::GetPath('/')})</managingEditor>
|
||||
<webMaster>{$aChannel.managingEditor} ({Router::GetPath('/')})</webMaster>
|
||||
<copyright>{Router::GetPath('/')}</copyright>
|
||||
<generator>{$aChannel.generator}</generator>
|
||||
|
||||
{foreach $aItems as $item}
|
||||
<item>
|
||||
<title>{$item.title|escape:'html'}</title>
|
||||
<guid isPermaLink="true">{$item.guid}</guid>
|
||||
<link>{$item.link}</link>
|
||||
<dc:creator>{$item.author}</dc:creator>
|
||||
<description><![CDATA[{$item.description}]]></description>
|
||||
<pubDate>{date_format date=$item.pubDate format="r"}</pubDate>
|
||||
<category>{$item.category|replace:',':'</category>
|
||||
<category>'}</category>
|
||||
</item>
|
||||
{/foreach}
|
||||
</channel>
|
||||
</rss>
|
|
@ -0,0 +1,44 @@
|
|||
{**
|
||||
* Страница с формой поиска
|
||||
*
|
||||
* @param array resultItems
|
||||
* @param array paging
|
||||
* @param array searchType
|
||||
* @param array query
|
||||
* @param array typeCounts
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{$aLang.search.search}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content_header' prepend}
|
||||
{component 'search.main' searchType=$searchType}
|
||||
{/block}
|
||||
|
||||
{block 'layout_options' append}
|
||||
{$layoutNav = [
|
||||
name => 'search',
|
||||
activeItem => $searchType,
|
||||
items => [
|
||||
[ 'name' => 'topics', 'url' => "{router page='search/topics'}?q={$_aRequest.q}", 'text' => $aLang.search.result.topics, 'count' => $typeCounts.topics ],
|
||||
[ 'name' => 'comments', 'url' => "{router page='search/comments'}?q={$_aRequest.q}", 'text' => $aLang.search.result.comments, 'count' => $typeCounts.comments ]
|
||||
]
|
||||
]}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{if $resultItems}
|
||||
{if $searchType == 'topics'}
|
||||
{component 'topic' template='list' topics=$resultItems paging=$paging}
|
||||
{elseif $searchType == 'comments'}
|
||||
{component 'comment' template='list' comments=$resultItems paging=$paging}
|
||||
{else}
|
||||
{hook run='search_result' type=$searchType}
|
||||
{/if}
|
||||
{elseif $_aRequest.q}
|
||||
{component 'blankslate' text=$aLang.search.alerts.empty}
|
||||
{/if}
|
||||
{/block}
|
|
@ -0,0 +1,18 @@
|
|||
<OpenSearchDescription xmlns="http://a9.com/-/spec/opensearch/1.1/">
|
||||
<ShortName>{Config::Get('view.name')}</ShortName>
|
||||
<Description>{$sHtmlTitle}</Description>
|
||||
<Contact>{Config::Get('sys.mail.from_email')}</Contact>
|
||||
<Url type="text/html" template="{router page='search/topics'}?q={literal}{searchTerms}{/literal}" />
|
||||
<LongName>{$sHtmlDescription}</LongName>
|
||||
<Image height="64" width="64" type="image/png">{Config::Get('path.skin.assets.web')}/images/favicons/opensearch.png</Image>
|
||||
<Image height="16" width="16" type="image/vnd.microsoft.icon">{Config::Get('path.skin.assets.web')}/images/favicons/favicon.ico</Image>
|
||||
<Developer>{Config::Get('view.name')} ({Router::GetPath('/')})</Developer>
|
||||
<Attribution>
|
||||
© «{Config::Get('view.name')}»
|
||||
</Attribution>
|
||||
<SyndicationRight>open</SyndicationRight>
|
||||
<AdultContent>false</AdultContent>
|
||||
<Language>ru-ru</Language>
|
||||
<OutputEncoding>UTF-8</OutputEncoding>
|
||||
<InputEncoding>UTF-8</InputEncoding>
|
||||
</OpenSearchDescription>
|
|
@ -0,0 +1,14 @@
|
|||
{**
|
||||
* Уведомления о смене емэйла
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_options' append}
|
||||
{$layoutShowSystemMessages = false}
|
||||
{$layoutShowSidebar = false}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{$sText}
|
||||
{/block}
|
|
@ -0,0 +1,9 @@
|
|||
{**
|
||||
* Настройки аккаунта (емэйл, пароль)
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.settings.tpl'}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user' template='settings/account' user=$oUserCurrent}
|
||||
{/block}
|
|
@ -0,0 +1,9 @@
|
|||
{**
|
||||
* Управление инвайтами
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.settings.tpl'}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user' template='settings/invite' user=$oUserCurrent}
|
||||
{/block}
|
|
@ -0,0 +1,9 @@
|
|||
{**
|
||||
* Основные настройки профиля
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.settings.tpl'}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user' template='settings/profile' user=$oUserCurrent}
|
||||
{/block}
|
|
@ -0,0 +1,9 @@
|
|||
{**
|
||||
* Настройка уведомлений
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.settings.tpl'}
|
||||
|
||||
{block 'layout_content' append}
|
||||
{component 'user' template='settings/tuning' user=$oUserCurrent}
|
||||
{/block}
|
12
application/frontend/skin/synio/actions/ActionStream/all.tpl
Normal file
|
@ -0,0 +1,12 @@
|
|||
{**
|
||||
* Вся активность
|
||||
*
|
||||
* @param array $activityEvents
|
||||
* @param integer $activityEventsAllCount
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.activity.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'activity' events=$activityEvents count=$activityEventsAllCount classes='js-activity--all'}
|
||||
{/block}
|
|
@ -0,0 +1,12 @@
|
|||
{**
|
||||
* Настраиваемая, персональная страница активности
|
||||
*
|
||||
* @param array $activityEvents
|
||||
* @param integer $activityEventsAllCount
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.activity.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'activity' events=$activityEvents count=$activityEventsAllCount classes='js-activity--personal'}
|
||||
{/block}
|
18
application/frontend/skin/synio/actions/ActionTag/index.tpl
Normal file
|
@ -0,0 +1,18 @@
|
|||
{**
|
||||
* Поиск по тегам
|
||||
*
|
||||
* @param array $topics
|
||||
* @param array $paging
|
||||
* @param string $tag
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.base.tpl'}
|
||||
|
||||
{block 'layout_page_title'}
|
||||
{lang 'tags.search.title'}
|
||||
{/block}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'tags' template='search-form'}
|
||||
{component 'topic' template='list' topics=$topics paging=$paging}
|
||||
{/block}
|
|
@ -0,0 +1,9 @@
|
|||
{**
|
||||
* Создание личного сообщения
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.messages.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'talk' template='add'}
|
||||
{/block}
|
|
@ -0,0 +1,11 @@
|
|||
{**
|
||||
* Черный список
|
||||
*
|
||||
* @param array $talkBlacklistUsers
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.messages.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'talk' template='blacklist' users=$talkBlacklistUsers}
|
||||
{/block}
|
|
@ -0,0 +1,12 @@
|
|||
{**
|
||||
* Список избранных сообщений
|
||||
*
|
||||
* @param array $talks
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.messages.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'talk.list' talks=$talks paging=$paging}
|
||||
{/block}
|
13
application/frontend/skin/synio/actions/ActionTalk/inbox.tpl
Normal file
|
@ -0,0 +1,13 @@
|
|||
{**
|
||||
* Список сообщений
|
||||
*
|
||||
* @param array $talks
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.messages.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'talk' template='search-form'}
|
||||
{component 'talk' template='list' talks=$talks paging=$paging selectable=true}
|
||||
{/block}
|
17
application/frontend/skin/synio/actions/ActionTalk/talk.tpl
Normal file
|
@ -0,0 +1,17 @@
|
|||
{**
|
||||
* Диалог
|
||||
*
|
||||
* @param object $talk
|
||||
* @param array $comments
|
||||
* @param integer $lastCommentId
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.user.messages.tpl'}
|
||||
|
||||
{block 'layout_content'}
|
||||
{component 'talk'
|
||||
talk = $talk
|
||||
comments = $comments
|
||||
lastCommentId = $lastCommentId
|
||||
activeParticipantsCount = $activeParticipantsCount}
|
||||
{/block}
|
|
@ -0,0 +1,8 @@
|
|||
{**
|
||||
* Лента пользователя
|
||||
*
|
||||
* @param array $topics
|
||||
* @param array $paging
|
||||
*}
|
||||
|
||||
{extends 'layouts/layout.index.tpl'}
|
134
application/frontend/skin/synio/assets/css/layout.css
Normal file
|
@ -0,0 +1,134 @@
|
|||
/**
|
||||
* Сетка
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
/* Основной блок */
|
||||
.layout-container {
|
||||
margin: 0 auto;
|
||||
padding: 0 50px;
|
||||
}
|
||||
|
||||
/* Навигация */
|
||||
.layout-nav {
|
||||
min-height: 26px;
|
||||
margin: 0 auto 32px;
|
||||
overflow: hidden;
|
||||
padding: 15px 17px 15px;
|
||||
box-sizing: border-box;
|
||||
box-shadow: 0 0 10px rgba(0,0,0,.15);
|
||||
border-radius: 0 0 10px 10px;
|
||||
position: relative;
|
||||
|
||||
background: #fdfdfd;
|
||||
background: -moz-linear-gradient(top, #fdfdfd 0%, #f6f8f9 100%);
|
||||
background: -webkit-linear-gradient(top, #fdfdfd 0%,#f6f8f9 100%);
|
||||
background: linear-gradient(top, #fdfdfd 0%,#f6f8f9 100%);
|
||||
}
|
||||
.layout-nav-main .ls-nav-item {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
/* Враппер для контента и сайдбара */
|
||||
.layout-wrapper {
|
||||
margin-bottom: 60px;
|
||||
position: relative;
|
||||
border-bottom: 1px solid #eee;
|
||||
box-shadow: 0 0 5px rgba(0, 0, 0, .05);
|
||||
border-radius: 10px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
/* Вертикальная линия разделяющая контент и сайдбар */
|
||||
.layout-wrapper:before {
|
||||
content: "";
|
||||
width: 1px;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
bottom: 0;
|
||||
right: 30%;
|
||||
background: #f1f3f5;
|
||||
}
|
||||
|
||||
/* Контент */
|
||||
.layout-content {
|
||||
float: left;
|
||||
width: 70%;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Отображение контента без сайдбара */
|
||||
.layout-container.layout-no-sidebar .layout-content {
|
||||
width: 100%;
|
||||
margin-right: 0;
|
||||
}
|
||||
.layout-container.layout-no-sidebar .layout-wrapper:before {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/* Сайдбар */
|
||||
.layout-sidebar {
|
||||
float: left;
|
||||
width: 30%;
|
||||
padding: 20px;
|
||||
box-sizing: border-box;
|
||||
}
|
||||
|
||||
/* Подвал */
|
||||
.layout-footer {
|
||||
padding: 0 0 50px 30px;
|
||||
color: #000;
|
||||
font-size: 11px;
|
||||
}
|
||||
|
||||
.layout-footer a {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.layout-footer a:hover {
|
||||
color: #777;
|
||||
}
|
||||
|
||||
.layout-footer-copyright {
|
||||
float: right;
|
||||
width: 255px;
|
||||
}
|
||||
|
||||
.layout-footer-design-by {
|
||||
overflow: hidden;
|
||||
line-height: 15px;
|
||||
margin-top: 30px;
|
||||
}
|
||||
.layout-footer-design-by img {
|
||||
float: left;
|
||||
margin-right: 10px;
|
||||
margin-top: 3px;
|
||||
}
|
||||
.layout-footer-design-by div {
|
||||
font-size: 10px;
|
||||
color: #8b9191;
|
||||
margin-top: 1px;
|
||||
}
|
||||
|
||||
.layout-footer-links {
|
||||
float: left;
|
||||
width: 138px;
|
||||
padding-right: 20px;
|
||||
}
|
||||
.layout-footer-links-title {
|
||||
margin-bottom: 11px;
|
||||
color: #000;
|
||||
font-family: Verdana;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.layout-footer-links-nav .ls-nav-item {
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
.layout-footer-links-nav a {
|
||||
color: #4c4c4c;
|
||||
}
|
37
application/frontend/skin/synio/assets/css/print.css
Normal file
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* Стили для печати
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
@media print {
|
||||
@page { margin: 0.5cm; }
|
||||
|
||||
* { background: transparent !important; color: black !important; text-shadow: none !important; filter:none !important; -ms-filter: none !important; }
|
||||
|
||||
body, .text { font-size: 14pt; }
|
||||
|
||||
a, a:visited { text-decoration: underline; }
|
||||
|
||||
pre, blockquote { border: 1px solid #999; page-break-inside: avoid; }
|
||||
thead { display: table-header-group; }
|
||||
tr, img { page-break-inside: avoid; }
|
||||
img { max-width: 100% !important; }
|
||||
|
||||
h1 { font-size: 30pt !important; }
|
||||
h4 { font-size: 26pt !important; }
|
||||
h5 { font-size: 23pt !important; }
|
||||
h6 { font-size: 20pt !important; }
|
||||
p, h3, h4, h5 { orphans: 3; widows: 3; }
|
||||
h3, h4, h5 { page-break-after: avoid; }
|
||||
|
||||
#header, #userbar, #nav, #sidebar, #footer, #comments, .toolbar, .nav-filter-wrapper,
|
||||
.topic-footer, .stat-performance, .actions, .reply-header { display: none !important; }
|
||||
|
||||
#wrapper { -webkit-box-shadow: none; box-shadow: none; border: 0; padding: 0; }
|
||||
#content { width: 100%; margin: 0; }
|
||||
|
||||
.topic { margin-bottom: 100px; }
|
||||
}
|
After Width: | Height: | Size: 2.5 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 2.4 KiB |
After Width: | Height: | Size: 14 KiB |
After Width: | Height: | Size: 2.9 KiB |
After Width: | Height: | Size: 8.1 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.7 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 8.2 KiB |
After Width: | Height: | Size: 1.3 KiB |
After Width: | Height: | Size: 3.3 KiB |
After Width: | Height: | Size: 5.2 KiB |
After Width: | Height: | Size: 28 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 1.1 KiB |
After Width: | Height: | Size: 1 KiB |
BIN
application/frontend/skin/synio/assets/images/header.jpg
Normal file
After Width: | Height: | Size: 98 KiB |
BIN
application/frontend/skin/synio/assets/images/xeoart.png
Normal file
After Width: | Height: | Size: 1.3 KiB |
653
application/frontend/skin/synio/assets/js/init.js
Normal file
|
@ -0,0 +1,653 @@
|
|||
/**
|
||||
* Инициализации модулей
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
jQuery(document).ready(function($){
|
||||
// Хук начала инициализации javascript-составляющих шаблона
|
||||
ls.hook.run('ls_template_init_start',[],window);
|
||||
|
||||
$('html').removeClass('no-js');
|
||||
|
||||
/**
|
||||
* Иниц-ия модулей ядра
|
||||
*/
|
||||
ls.init({
|
||||
production: false
|
||||
});
|
||||
|
||||
ls.dev.init();
|
||||
|
||||
/**
|
||||
* Form validate
|
||||
* Валидатор нужно иниц-ть до иниц-ии аякс форм, чтобы избежать валидации аякс-полей после сабмита формы
|
||||
*/
|
||||
$('.js-form-validate').parsley();
|
||||
|
||||
|
||||
/**
|
||||
* Userbar
|
||||
*/
|
||||
$('.js-userbar').lsUserbar();
|
||||
$('.js-search-hideable').lsSearchHideable();
|
||||
|
||||
|
||||
/**
|
||||
* Навигация по контенту
|
||||
*/
|
||||
$('.ls-nav--root.ls-nav--pills > .ls-nav-item--has-children').lsDropdown({
|
||||
selectors: {
|
||||
toggle: '> .ls-nav-item-link',
|
||||
text: '> .ls-nav-item-link > .ls-nav-item-text',
|
||||
menu: '> .ls-nav--sub'
|
||||
},
|
||||
selectable: true
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Подтверждение удаления
|
||||
*/
|
||||
$('.js-confirm-remove-default').livequery(function () {
|
||||
$(this).lsConfirm({
|
||||
message: ls.lang.get('common.remove_confirm')
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Notification
|
||||
*/
|
||||
ls.notification.init();
|
||||
|
||||
|
||||
/**
|
||||
* Actionbar
|
||||
*/
|
||||
$('.js-user-list-modal-actionbar').livequery(function () {
|
||||
$( this ).lsActionbarItemSelect({
|
||||
selectors: {
|
||||
target_item: '.js-user-list-select .js-user-list-small-item'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Modals
|
||||
*/
|
||||
$('.js-modal-default').lsModal();
|
||||
$('.js-modal-toggle-default').lsModalToggle();
|
||||
|
||||
|
||||
/**
|
||||
* Details
|
||||
*/
|
||||
$('.js-details-default').lsDetails();
|
||||
|
||||
|
||||
/**
|
||||
* Dropdowns
|
||||
*/
|
||||
$('.js-dropdown-default').livequery(function () {
|
||||
$(this).lsDropdown();
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Fields
|
||||
*/
|
||||
$('.js-field-geo-default').lsFieldGeo({
|
||||
urls: {
|
||||
regions: aRouter.ajax + 'geo/get/regions/',
|
||||
cities: aRouter.ajax + 'geo/get/cities/'
|
||||
}
|
||||
});
|
||||
|
||||
$('.js-field-date-default').livequery(function () {
|
||||
$(this).lsDate({
|
||||
language: LANGUAGE
|
||||
});
|
||||
});
|
||||
|
||||
$('.js-field-time-default').livequery(function () {
|
||||
$(this).lsTime();
|
||||
});
|
||||
|
||||
$('[data-type=captcha]').livequery(function () {
|
||||
$(this).lsCaptcha();
|
||||
});
|
||||
|
||||
$('[data-type=recaptcha]').livequery(function () {
|
||||
$(this).lsReCaptcha({
|
||||
key: ls.registry.get('recaptcha.site_key')
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Alerts
|
||||
*/
|
||||
$('.js-alert').lsAlert();
|
||||
|
||||
|
||||
/**
|
||||
* Tooltips
|
||||
*/
|
||||
$('.js-tooltip').lsTooltip();
|
||||
|
||||
$('.js-popover-default').lsTooltip({
|
||||
useAttrTitle: false,
|
||||
trigger: 'click',
|
||||
classes: 'tooltip-light'
|
||||
});
|
||||
|
||||
if (ls.registry.get('block_stream_show_tip')) {
|
||||
$('.js-title-comment, .js-title-topic').livequery(function () {
|
||||
$(this).lsTooltip({
|
||||
position: {
|
||||
my: "right center",
|
||||
at: "left left"
|
||||
},
|
||||
show: {
|
||||
delay: 1500
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Autocomplete
|
||||
*/
|
||||
$( '.autocomplete-tags' ).lsAutocomplete({
|
||||
multiple: false,
|
||||
urls: {
|
||||
load: aRouter.ajax + 'autocompleter/tag/'
|
||||
}
|
||||
});
|
||||
|
||||
$( '.autocomplete-tags-sep' ).lsAutocomplete({
|
||||
multiple: true,
|
||||
urls: {
|
||||
load: aRouter.ajax + 'autocompleter/tag/'
|
||||
}
|
||||
});
|
||||
|
||||
$( '.autocomplete-users' ).lsAutocomplete({
|
||||
multiple: false,
|
||||
urls: {
|
||||
load: aRouter.ajax + 'autocompleter/user/'
|
||||
}
|
||||
});
|
||||
|
||||
$( '.autocomplete-users-sep' ).lsAutocomplete({
|
||||
multiple: true,
|
||||
urls: {
|
||||
load: aRouter.ajax + 'autocompleter/user/'
|
||||
}
|
||||
});
|
||||
|
||||
$('.autocomplete-property-tags').each(function(k,v){
|
||||
$(v).lsAutocomplete({
|
||||
multiple: false,
|
||||
urls: {
|
||||
load: aRouter.ajax + 'property/tags/autocompleter/'
|
||||
},
|
||||
params: {
|
||||
property_id: $(v).data('propertyId')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$('.autocomplete-property-tags-sep').each(function(k,v){
|
||||
$(v).lsAutocomplete({
|
||||
multiple: true,
|
||||
urls: {
|
||||
load: aRouter.ajax + 'property/tags/autocompleter/'
|
||||
},
|
||||
params: {
|
||||
property_id: $(v).data('propertyId')
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
/**
|
||||
* Code highlight
|
||||
*/
|
||||
$( 'pre code' ).lsHighlighter();
|
||||
|
||||
|
||||
/**
|
||||
* Blocks
|
||||
*/
|
||||
$( '.js-block-default' ).lsBlock();
|
||||
|
||||
|
||||
/**
|
||||
* Активность
|
||||
*/
|
||||
$('.js-activity--all').lsActivity({ urls: { more: aRouter.stream + 'get_more_all' } });
|
||||
$('.js-activity--user').lsActivity({ urls: { more: aRouter.stream + 'get_more_user' } });
|
||||
$('.js-activity--personal').lsActivity({
|
||||
urls: {
|
||||
more: aRouter.stream + 'get_more_personal'
|
||||
},
|
||||
create: function() {
|
||||
// Настройки активности
|
||||
$('.js-activity-settings').lsActivitySettings({
|
||||
urls: {
|
||||
toggle_type: aRouter.stream + 'switchEventType'
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление пользователей в персональную активность
|
||||
$('.js-activity-users').lsUserListAdd({
|
||||
urls: {
|
||||
add: aRouter.stream + 'ajaxadduser',
|
||||
remove: aRouter.stream + 'ajaxremoveuser',
|
||||
list: aRouter.ajax + 'modal-friend-list'
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Лента
|
||||
*/
|
||||
// Блоги
|
||||
$('.js-feed-blogs').lsFeedBlogs({
|
||||
urls: {
|
||||
subscribe: aRouter.feed + 'subscribe',
|
||||
unsubscribe: aRouter.feed + 'unsubscribe'
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление пользователей в свою ленту
|
||||
$('.js-feed-users').lsUserListAdd({
|
||||
urls: {
|
||||
add: aRouter.feed + 'ajaxadduser',
|
||||
remove: aRouter.feed + 'unsubscribe',
|
||||
list: aRouter.ajax + 'modal-friend-list'
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Auth
|
||||
*/
|
||||
ls.auth.init();
|
||||
|
||||
// Поиск
|
||||
$( '.js-search-ajax-users' ).lsSearchAjax({
|
||||
urls: {
|
||||
search: aRouter.people + 'ajax-search/'
|
||||
},
|
||||
i18n: {
|
||||
title: ls.lang.get( 'user.search.result_title' )
|
||||
},
|
||||
selectors: {
|
||||
list: '.js-more-users-container',
|
||||
more: '.js-more-search',
|
||||
title: '@.js-user-list-search-title'
|
||||
},
|
||||
filters : [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'sText',
|
||||
selector: '.js-search-text-main'
|
||||
},
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'sex',
|
||||
selector: '.js-search-ajax-user-sex'
|
||||
},
|
||||
{
|
||||
type: 'checkbox',
|
||||
name: 'is_online',
|
||||
selector: '.js-search-ajax-user-online'
|
||||
},
|
||||
{
|
||||
type: 'sort',
|
||||
name: 'sort_by',
|
||||
selector: '.js-search-sort-menu li'
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'country',
|
||||
selector: '.js-field-geo-country'
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'region',
|
||||
selector: '.js-field-geo-region'
|
||||
},
|
||||
{
|
||||
type: 'select',
|
||||
name: 'city',
|
||||
selector: '.js-field-geo-city'
|
||||
}
|
||||
],
|
||||
afterupdate: function ( event, data ) {
|
||||
data.context.getElement( 'more' ).lsMore( 'option', 'params.next_page', 2 );
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление пользователя в свою активность
|
||||
$('.js-user-follow').lsUserFollow({
|
||||
urls: {
|
||||
follow: aRouter['stream'] + 'ajaxadduser/',
|
||||
unfollow: aRouter['stream'] + 'ajaxremoveuser/'
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление пользователя в друзья
|
||||
$('.js-user-friend').lsUserFriend({
|
||||
urls: {
|
||||
add: aRouter.profile + 'ajaxfriendadd/',
|
||||
remove: aRouter.profile + 'ajaxfrienddelete/',
|
||||
accept: aRouter.profile + 'ajaxfriendaccept/',
|
||||
modal: aRouter.profile + 'ajax-modal-add-friend'
|
||||
}
|
||||
});
|
||||
|
||||
// Жалоба
|
||||
$('.js-user-report').lsReport({
|
||||
urls: {
|
||||
modal: aRouter.profile + 'ajax-modal-complaint',
|
||||
add: aRouter.profile + 'ajax-complaint-add'
|
||||
}
|
||||
});
|
||||
|
||||
// Управление кастомными полями
|
||||
$( '.js-user-fields' ).lsUserFields();
|
||||
|
||||
// Фото пользователя
|
||||
$( '.js-user-photo' ).lsPhoto({
|
||||
urls: {
|
||||
upload: aRouter.settings + 'ajax-upload-photo',
|
||||
remove: aRouter.settings + 'ajax-remove-photo',
|
||||
crop_photo: aRouter.settings + 'ajax-modal-crop-photo',
|
||||
crop_avatar: aRouter.settings + 'ajax-modal-crop-avatar',
|
||||
save_photo: aRouter.settings + 'ajax-crop-photo',
|
||||
save_avatar: aRouter.settings + 'ajax-change-avatar',
|
||||
cancel_photo: aRouter.settings + 'ajax-crop-cancel-photo'
|
||||
},
|
||||
changeavatar: function ( event, _this, avatars ) {
|
||||
$( '.js-user-profile-avatar, .js-wall-entry[data-user-id=' + _this.option( 'params.user_id' ) + '] .comment-avatar img' ).attr( 'src', avatars[ '64crop' ] + '?' + Math.random() );
|
||||
$( '.nav-item--userbar-username img' ).attr( 'src', avatars[ '24crop' ] + '?' + Math.random() );
|
||||
}
|
||||
});
|
||||
|
||||
/**
|
||||
* Talk
|
||||
*/
|
||||
|
||||
$('.js-talk-list').lsTalkList();
|
||||
|
||||
// Выбор получателей в форме добавления
|
||||
$('.js-talk-add-user-choose').lsUserFieldChoose({
|
||||
urls: {
|
||||
modal: aRouter.ajax + 'modal-friend-list'
|
||||
}
|
||||
});
|
||||
|
||||
// Форма поиска
|
||||
$('.js-talk-search-form').lsDetails();
|
||||
|
||||
// Добавление диалога в избранное
|
||||
$('.js-favourite-talk').lsFavourite({
|
||||
urls: {
|
||||
toggle: aRouter['ajax'] + 'favourite/talk/'
|
||||
}
|
||||
});
|
||||
|
||||
// Добавление в избранное на странице диалога
|
||||
$('.js-talk-message-root-favourite').on('click', function (event) {
|
||||
if (event.target == event.currentTarget) {
|
||||
$(this).find('.js-favourite-talk').lsFavourite('toggle');
|
||||
}
|
||||
});
|
||||
|
||||
// Комментарии
|
||||
$('.js-comments-talk').lsComments({
|
||||
urls: {
|
||||
add: aRouter['talk'] + 'ajaxaddcomment/',
|
||||
load: aRouter['talk'] + 'ajaxresponsecomment/'
|
||||
}
|
||||
});
|
||||
|
||||
// Управление участниками личного сообщения
|
||||
$('.js-message-users').lsTalkUsers();
|
||||
|
||||
// Черный список
|
||||
$('.js-user-list-add-blacklist').lsUserListAdd({
|
||||
urls: {
|
||||
add: aRouter['talk'] + 'ajaxaddtoblacklist/',
|
||||
remove: aRouter['talk'] + 'ajaxdeletefromblacklist/',
|
||||
list: aRouter.ajax + 'modal-friend-list'
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Poll
|
||||
*/
|
||||
$('.js-poll').lsPoll();
|
||||
$('.js-poll-manage').lsPollManage({
|
||||
max: ls.registry.get('poll_max_answers')
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* User Note
|
||||
*/
|
||||
$('.js-user-note').livequery(function () {
|
||||
$(this).lsNote({
|
||||
urls: {
|
||||
save: aRouter['profile'] + 'ajax-note-save/',
|
||||
remove: aRouter['profile'] + 'ajax-note-remove/'
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Editor
|
||||
*/
|
||||
$( '.js-editor-default' ).lsEditor();
|
||||
|
||||
|
||||
/**
|
||||
* Blog
|
||||
*/
|
||||
|
||||
// Форма добавления блога
|
||||
$('.js-blog-add').lsBlogAdd();
|
||||
|
||||
// Приглашение пользователей в блог
|
||||
$('.js-user-list-add-blog-invite').lsBlogInvites();
|
||||
|
||||
// Вступить/покинуть блог (список блогов)
|
||||
$( '.js-blog-join' ).livequery(function() {
|
||||
$( this ).lsBlogJoin({
|
||||
urls: {
|
||||
toggle: aRouter.blog + 'ajaxblogjoin'
|
||||
},
|
||||
classes: {
|
||||
loading: ls.options.classes.states.loading
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
// Вступить/покинуть блог (страница блога)
|
||||
$( '.js-blog-profile-join' ).lsBlogJoin({
|
||||
urls: {
|
||||
toggle: aRouter.blog + 'ajaxblogjoin'
|
||||
},
|
||||
selectors: {
|
||||
text: 'a'
|
||||
},
|
||||
classes: {
|
||||
active: 'active'
|
||||
}
|
||||
});
|
||||
|
||||
// Поиск
|
||||
$( '.js-search-ajax-blog' ).lsSearchAjax({
|
||||
urls: {
|
||||
search: aRouter.blogs + 'ajax-search/'
|
||||
},
|
||||
i18n: {
|
||||
title: ls.lang.get( 'blog.search.result_title' )
|
||||
},
|
||||
selectors: {
|
||||
list: '.js-more-blogs-container',
|
||||
more: '.js-more-search',
|
||||
title: '@.js-blog-list-search-title'
|
||||
},
|
||||
filters : [
|
||||
{
|
||||
type: 'text',
|
||||
name: 'sText',
|
||||
selector: '.js-search-text-main'
|
||||
},
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'type',
|
||||
selector: '.js-search-ajax-blog-type'
|
||||
},
|
||||
{
|
||||
type: 'radio',
|
||||
name: 'relation',
|
||||
selector: '.js-search-ajax-blog-relation'
|
||||
},
|
||||
{
|
||||
type: 'list',
|
||||
name: 'category',
|
||||
selector: '#js-search-ajax-blog-category li'
|
||||
},
|
||||
{
|
||||
type: 'sort',
|
||||
name: 'sort_by',
|
||||
selector: '.js-search-sort-menu li'
|
||||
}
|
||||
],
|
||||
afterupdate: function ( event, data ) {
|
||||
data.context.getElement( 'more' ).lsMore( 'option', 'params.next_page', 2 );
|
||||
}
|
||||
});
|
||||
|
||||
// Аватар блога
|
||||
$( '.js-blog-avatar' ).lsPhoto({
|
||||
urls: {
|
||||
upload: aRouter.blog + 'ajax/upload-avatar',
|
||||
remove: aRouter.blog + 'ajax/remove-avatar',
|
||||
crop_photo: aRouter.blog + 'ajax/modal-crop-avatar',
|
||||
save_photo: aRouter.blog + 'ajax/crop-avatar',
|
||||
cancel_photo: aRouter.blog + 'ajax/crop-cancel-avatar'
|
||||
},
|
||||
use_avatar: false,
|
||||
crop_photo: {
|
||||
minSize: [ 100, 100 ],
|
||||
usePreview: true
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Topic
|
||||
*/
|
||||
$( '.js-topic' ).lsTopic();
|
||||
|
||||
// Форма добавления
|
||||
$( '#topic-add-form' ).lsTopicAdd({
|
||||
max_blog_count: ls.registry.get('topic_max_blog_count')
|
||||
});
|
||||
|
||||
// Пагинация
|
||||
$('.js-pagination-topics').lsPagination({
|
||||
hash: {
|
||||
next: 'goTopic=first',
|
||||
prev: 'goTopic=last'
|
||||
}
|
||||
});
|
||||
|
||||
// Комментарии
|
||||
$('.js-topic-comments, .js-topic-comments-list').lsComments({
|
||||
urls: {
|
||||
add: aRouter['blog'] + 'ajaxaddcomment/',
|
||||
load: aRouter['blog'] + 'ajaxresponsecomment/'
|
||||
},
|
||||
show_form: ls.registry.get('comment_show_form')
|
||||
});
|
||||
|
||||
// Кнопка обновления комментариев
|
||||
// TODO: Fix init
|
||||
$('.js-comments-toolbar').lsCommentsToolbar({
|
||||
comments: $('.js-topic-comments, .js-comments-talk')
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Теги
|
||||
*/
|
||||
|
||||
// Облако тегов избранного
|
||||
$('.js-tags-favourite-cloud').lsDetails();
|
||||
|
||||
// Поиск по тегам
|
||||
$('.js-tag-search-form').submit(function() {
|
||||
var val = $(this).find('.js-tag-search').val();
|
||||
|
||||
if ( val ) {
|
||||
window.location = aRouter['tag'] + encodeURIComponent( val ) + '/';
|
||||
}
|
||||
|
||||
return false;
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Стена
|
||||
*/
|
||||
$('.js-wall-default').lsWall({
|
||||
urls: {
|
||||
add: aRouter.ajax + 'wall/add/',
|
||||
remove: aRouter.ajax + 'wall/remove/',
|
||||
load: aRouter.ajax + 'wall/load/',
|
||||
load_comments: aRouter.ajax + 'wall/load-comments/'
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Лайтбокс
|
||||
*/
|
||||
$('a.js-lbx').lsLightbox({ width:"100%", height:"100%" });
|
||||
|
||||
|
||||
/**
|
||||
* Toolbar
|
||||
*/
|
||||
$('.js-toolbar-default').lsToolbar({
|
||||
target: '.layout-wrapper',
|
||||
offsetX: 10
|
||||
});
|
||||
$('.js-toolbar-scrollup').lsToolbarScrollUp();
|
||||
$('.js-toolbar-topics').lsToolbarTopics();
|
||||
|
||||
|
||||
/**
|
||||
* Fotorama
|
||||
*/
|
||||
$( '.fotorama' ).livequery(function() {
|
||||
$( this ).lsSlider();
|
||||
});
|
||||
|
||||
// Хук конца инициализации javascript-составляющих шаблона
|
||||
ls.hook.run('ls_template_init_end',[],window);
|
||||
});
|
|
@ -0,0 +1,25 @@
|
|||
{**
|
||||
* Последняя активность
|
||||
*}
|
||||
|
||||
{component_define_params params=[ 'content' ]}
|
||||
|
||||
{* Подвал *}
|
||||
{capture 'block_footer'}
|
||||
<a href="{router 'stream'}">{lang 'activity.block_recent.all'}</a> ·
|
||||
<a href="{router 'rss'}allcomments/">{lang 'activity.block_recent.feed'}</a>
|
||||
{/capture}
|
||||
|
||||
{component 'block'
|
||||
mods = 'primary activity-recent'
|
||||
classes = 'js-block-default'
|
||||
title = {lang 'activity.block_recent.title'}
|
||||
titleUrl = {router 'stream'}
|
||||
footer = $smarty.capture.block_footer
|
||||
tabs = [
|
||||
'classes' => 'js-tabs-block js-activity-block-recent-tabs',
|
||||
'tabs' => [
|
||||
[ 'text' => {lang 'activity.block_recent.comments'}, 'url' => "{router page='ajax'}stream/comment", 'list' => $content ],
|
||||
[ 'text' => {lang 'activity.block_recent.topics'}, 'url' => "{router page='ajax'}stream/topic" ]
|
||||
]
|
||||
]}
|
|
@ -0,0 +1,8 @@
|
|||
{**
|
||||
* Блок настройки ленты активности
|
||||
*}
|
||||
|
||||
{component 'block'
|
||||
mods = 'activity-settings'
|
||||
title = {lang 'activity.settings.title'}
|
||||
content = {component 'activity' template='settings' typesActive=$typesActive types=$types}}
|
|
@ -0,0 +1,8 @@
|
|||
{**
|
||||
* Выбор пользователей для чтения в ленте активности
|
||||
*}
|
||||
|
||||
{component 'block'
|
||||
mods = 'activity-users'
|
||||
title = {lang 'activity.users.title'}
|
||||
content = {component 'activity' template='users' users=$users}}
|
|
@ -0,0 +1,21 @@
|
|||
{**
|
||||
* Последняя активность
|
||||
* Топики отсортированные по времени последнего комментария
|
||||
*}
|
||||
|
||||
{component_define_params params=[ 'comments' ]}
|
||||
|
||||
{capture 'items'}
|
||||
{foreach $comments as $comment}
|
||||
{$topic = $comment->getTarget()}
|
||||
|
||||
{component 'activity' template='recent-item'
|
||||
user = $comment->getUser()
|
||||
topic = $topic
|
||||
date = $comment->getDate()}
|
||||
{foreachelse}
|
||||
{component 'blankslate' text={lang 'common.empty'} mods='no-background'}
|
||||
{/foreach}
|
||||
{/capture}
|
||||
|
||||
{component 'item' template='group' items=$smarty.capture.items}
|
|
@ -0,0 +1,26 @@
|
|||
{component_define_params params=[ 'user', 'topic', 'date' ]}
|
||||
|
||||
{capture 'item_content'}
|
||||
<a href="{$user->getUserWebPath()}" class="ls-activity-block-recent-user">{$user->getDisplayName()}</a> →
|
||||
<a href="{$topic->getUrl()}">{$topic->getTitle()|escape}</a>
|
||||
|
||||
<p class="ls-activity-block-recent-info">
|
||||
<time datetime="{date_format date=$date format='c'}" class="ls-activity-block-recent-time">
|
||||
{date_format date=$date hours_back="12" minutes_back="60" now="60" day="day H:i" format="j F Y"}
|
||||
</time>
|
||||
|
||||
<a href="{$topic->getUrl()}#comments" class="ls-activity-block-recent-comments">
|
||||
{component 'icon' icon='comments'}
|
||||
{lang 'comments.comments_declension' count=$topic->getCountComment() plural=true}
|
||||
</a>
|
||||
</p>
|
||||
{/capture}
|
||||
|
||||
{component 'item'
|
||||
element = 'li'
|
||||
mods = 'image-rounded'
|
||||
desc = $smarty.capture.item_content
|
||||
image=[
|
||||
'path' => $user->getProfileAvatarPath(48),
|
||||
'url' => $user->getUserWebPath()
|
||||
]}
|
|
@ -0,0 +1,19 @@
|
|||
{**
|
||||
* Последняя активность
|
||||
* Последние топики
|
||||
*}
|
||||
|
||||
{component_define_params params=[ 'topics' ]}
|
||||
|
||||
{capture 'items'}
|
||||
{foreach $topics as $topic}
|
||||
{component 'activity' template='recent-item'
|
||||
user = $topic->getUser()
|
||||
topic = $topic
|
||||
date = $topic->getDatePublish()}
|
||||
{foreachelse}
|
||||
{component 'blankslate' text={lang 'common.empty'} mods='no-background'}
|
||||
{/foreach}
|
||||
{/capture}
|
||||
|
||||
{component 'item' template='group' items=$smarty.capture.items}
|
|
@ -0,0 +1,47 @@
|
|||
/**
|
||||
* Активность
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
|
||||
/**
|
||||
* Список событий
|
||||
*/
|
||||
.activity-event-list {
|
||||
margin: 0 0 20px;
|
||||
}
|
||||
|
||||
/* Дата-заголовок */
|
||||
.activity-date {
|
||||
font: 400 18px/1.3em 'Open Sans', sans-serif;
|
||||
padding: 10px 0;
|
||||
border-bottom: 1px solid #E7E7E7;
|
||||
}
|
||||
.activity-event + .activity-date {
|
||||
margin-top: 30px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Событие
|
||||
*/
|
||||
.activity-event {
|
||||
padding: 15px;
|
||||
}
|
||||
.activity-event + .activity-event {
|
||||
border-top: 1px solid #f2f2f2;
|
||||
}
|
||||
.activity-event-date {
|
||||
display: block;
|
||||
color: #999;
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
.activity-event-text {
|
||||
padding: 10px 15px;
|
||||
margin-top: 10px;
|
||||
color: #777;
|
||||
background: #fafafa;
|
||||
font-size: 13px;
|
||||
}
|
|
@ -0,0 +1,26 @@
|
|||
/**
|
||||
* Последняя активность
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-activity-block-recent-user {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
.ls-activity-block-recent-info {
|
||||
margin-top: 5px;
|
||||
color: #999;
|
||||
font-size: 12px;
|
||||
}
|
||||
|
||||
.ls-activity-block-recent-comments {
|
||||
margin-left: 10px;
|
||||
color: #666;
|
||||
}
|
||||
.ls-activity-block-recent-comments:hover {
|
||||
color: #444;
|
||||
}
|
|
@ -0,0 +1,91 @@
|
|||
/**
|
||||
* Уведомления
|
||||
*
|
||||
* @module ls/alert
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-alert {
|
||||
position: relative;
|
||||
background-color: #d9edf7;
|
||||
color: #3a87ad;
|
||||
padding: 10px 15px;
|
||||
margin-bottom: 15px;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
}
|
||||
.ls-alert:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Заголовок */
|
||||
.ls-alert-title {
|
||||
padding-top: 3px;
|
||||
margin-bottom: 10px;
|
||||
font-size: 16px;
|
||||
font-weight: normal;
|
||||
}
|
||||
.ls-alert-title:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Кнопка закрывающая уведомление */
|
||||
.ls-alert-close {
|
||||
border: none;
|
||||
background-color: transparent;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
width: 14px;
|
||||
height: 14px;
|
||||
position: absolute;
|
||||
top: 10px;
|
||||
right: 12px;
|
||||
cursor: pointer;
|
||||
opacity: .6;
|
||||
}
|
||||
.ls-alert-close:hover {
|
||||
opacity: 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier dismissible
|
||||
*/
|
||||
.ls-alert.ls-alert--dismissible {
|
||||
padding-right: 35px;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier error Ошибка
|
||||
*/
|
||||
.ls-alert.ls-alert--error {
|
||||
background-color: #f0c8c8;
|
||||
color: #b22626;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier success Успешно завершено
|
||||
*/
|
||||
.ls-alert.ls-alert--success {
|
||||
background-color: #dafad8;
|
||||
color: #4bb23b;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier info Информация
|
||||
*/
|
||||
.ls-alert.ls-alert--info {
|
||||
background-color: #d9edf7;
|
||||
color: #3a87ad;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier empty Пусто
|
||||
*/
|
||||
.ls-alert.ls-alert--empty {
|
||||
background-color: #fafafa;
|
||||
color: #777;
|
||||
}
|
|
@ -0,0 +1,37 @@
|
|||
/**
|
||||
* Blankslate
|
||||
*
|
||||
* @module ls/blankslate
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-blankslate {
|
||||
margin-bottom: 15px;
|
||||
padding: 30px;
|
||||
text-align: center;
|
||||
color: #aaa;
|
||||
}
|
||||
.ls-blankslate:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/* Заголовок */
|
||||
.ls-blankslate-title {
|
||||
margin-bottom: 15px;
|
||||
font-size: 18px;
|
||||
font-weight: bold;
|
||||
}
|
||||
.ls-blankslate-title:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier no-background
|
||||
*/
|
||||
.ls-blankslate--no-background {
|
||||
border: none;
|
||||
background: transparent;
|
||||
}
|
76
application/frontend/skin/synio/components/block/block.tpl
Normal file
|
@ -0,0 +1,76 @@
|
|||
{**
|
||||
* Блок
|
||||
*
|
||||
* @param string $title Заголовок
|
||||
* @param string $content
|
||||
* @param boolean $show
|
||||
* @param array|string $list
|
||||
* @param array|string $tabs
|
||||
* @param string $mods Список модификторов основного блока (через пробел)
|
||||
* @param string $classes Список классов основного блока (через пробел)
|
||||
* @param array $attributes Список атрибутов основного блока
|
||||
*}
|
||||
|
||||
{$component = 'ls-block'}
|
||||
{component_define_params params=[ 'title', 'content', 'show', 'footer', 'list', 'tabs', 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
{block 'block_options'}{/block}
|
||||
|
||||
{$show = $show|default:true}
|
||||
|
||||
{if $show}
|
||||
<div class="{$component} {cmods name=$component mods=$mods} {$classes}" {cattr list=$attributes}>
|
||||
{* Шапка *}
|
||||
{if $title}
|
||||
<header class="{$component}-header">
|
||||
{block 'block_header_inner'}
|
||||
<h3 class="{$component}-title">
|
||||
{$title}
|
||||
</h3>
|
||||
{/block}
|
||||
</header>
|
||||
{/if}
|
||||
|
||||
{block 'block_header_after'}{/block}
|
||||
|
||||
{* Содержимое *}
|
||||
{if $content}
|
||||
{block 'block_content'}
|
||||
<div class="{$component}-content">
|
||||
{block 'block_content_inner'}
|
||||
{$content}
|
||||
{/block}
|
||||
</div>
|
||||
{/block}
|
||||
{/if}
|
||||
|
||||
{block 'block_content_after'}{/block}
|
||||
|
||||
{* List group *}
|
||||
{if is_array( $list )}
|
||||
{component 'item' template='group' params=$list}
|
||||
{elseif $list}
|
||||
{$list}
|
||||
{/if}
|
||||
|
||||
{* Tabs *}
|
||||
{if is_array( $tabs )}
|
||||
{component 'tabs' classes='js-tabs-block' params=$tabs}
|
||||
{elseif $tabs}
|
||||
{$tabs}
|
||||
{/if}
|
||||
|
||||
{* Подвал *}
|
||||
{if $footer}
|
||||
{block 'block_footer'}
|
||||
<div class="{$component}-footer">
|
||||
{block 'block_footer_inner'}
|
||||
{$footer}
|
||||
{/block}
|
||||
</div>
|
||||
{/block}
|
||||
{/if}
|
||||
|
||||
{block 'block_footer_after'}{/block}
|
||||
</div>
|
||||
{/if}
|
|
@ -0,0 +1,95 @@
|
|||
/**
|
||||
* Блок
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-block {
|
||||
overflow: hidden;
|
||||
}
|
||||
.ls-block + .ls-block {
|
||||
margin-top: 50px;
|
||||
}
|
||||
.ls-block:last-child {
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.ls-block .text-help {
|
||||
font-size: 11px;
|
||||
line-height: 14px;
|
||||
}
|
||||
.ls-block .ls-text {
|
||||
font-size: 13px;
|
||||
line-height: 18px;
|
||||
}
|
||||
.ls-block .max-height-200 {
|
||||
overflow: auto;
|
||||
max-height: 200px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Шапка */
|
||||
.ls-block-header {
|
||||
padding: 0 0 15px;
|
||||
position: relative;
|
||||
}
|
||||
.ls-block-header .ls-block-title {
|
||||
margin-bottom: 0;
|
||||
font-size: 22px;
|
||||
line-height: 1em;
|
||||
font-weight: normal;
|
||||
color: #333;
|
||||
}
|
||||
|
||||
/* Навигация */
|
||||
.ls-block .ls-tab-list {
|
||||
padding: 15px 0;
|
||||
margin-bottom: 0;
|
||||
border-bottom: 1px solid #eee;
|
||||
}
|
||||
|
||||
/* Контент */
|
||||
.ls-block-content {
|
||||
}
|
||||
|
||||
/* Подвал */
|
||||
.ls-block-footer {
|
||||
border-top: 1px solid #eee;
|
||||
padding: 15px 0;
|
||||
font-size: 11px;
|
||||
color: #b9c2c2;
|
||||
}
|
||||
.ls-block-footer a {
|
||||
color: #727a90;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.ls-block-footer .ls-search-form {
|
||||
padding: 0;
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Поддержка списков
|
||||
*/
|
||||
.ls-block .ls-item-group {
|
||||
border: none;
|
||||
}
|
||||
.ls-block .ls-block-content + .ls-item-group {
|
||||
border-top: 1px solid #eee;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier nopadding Блок без отступов у контента
|
||||
*/
|
||||
.ls-block--nopadding .ls-block-content {
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* @modifier transparent Блок без фона
|
||||
*/
|
||||
.ls-block--transparent {
|
||||
background-color: transparent;
|
||||
border-color: transparent;
|
||||
}
|
232
application/frontend/skin/synio/components/button/css/button.css
Normal file
|
@ -0,0 +1,232 @@
|
|||
/**
|
||||
* Buttons
|
||||
* Стили частично позаимствованы у бутстрапа
|
||||
*
|
||||
* @module ls/button
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-button {
|
||||
display: inline-block;
|
||||
margin: 0;
|
||||
border: 1px solid transparent;
|
||||
text-align: center;
|
||||
vertical-align: middle;
|
||||
text-decoration: none;
|
||||
touch-action: manipulation;
|
||||
white-space: nowrap;
|
||||
line-height: normal;
|
||||
color: #444;
|
||||
cursor: pointer;
|
||||
-webkit-border-radius: 3px;
|
||||
-moz-border-radius: 3px;
|
||||
border-radius: 3px;
|
||||
-webkit-box-sizing: border-box;
|
||||
-moz-box-sizing: border-box;
|
||||
box-sizing: border-box;
|
||||
-webkit-transition: color .1s, border-color .1s;
|
||||
-moz-transition: color .1s, border-color .1s;
|
||||
transition: color .1s, border-color .1s;
|
||||
|
||||
border-radius: 5px;
|
||||
border: 1px solid transparent;
|
||||
font-family: Verdana, sans-serif;
|
||||
}
|
||||
.ls-button:active,
|
||||
.ls-button.active {
|
||||
outline: none;
|
||||
-webkit-box-shadow: inset 0 0px 7px rgba(0,0,0,.2);
|
||||
box-shadow: inset 0 0 7px rgba(0,0,0,.2);
|
||||
}
|
||||
|
||||
/* Icon */
|
||||
.ls-button [class^="icon-"],
|
||||
.ls-button [class*=" icon-"] {
|
||||
float: left;
|
||||
position: relative;
|
||||
margin: 0px 5px 1px 0;
|
||||
}
|
||||
|
||||
/**
|
||||
* Colors
|
||||
*/
|
||||
.ls-button {
|
||||
color: #434343;
|
||||
border-color: #dfe3e8;
|
||||
|
||||
background: #fbfcfc;
|
||||
background: -moz-linear-gradient(top, #fbfcfc 0%, #f0f2f5 100%);
|
||||
background: -webkit-linear-gradient(top, #fbfcfc 0%,#f0f2f5 100%);
|
||||
background: linear-gradient(top, #fbfcfc 0%,#f0f2f5 100%);
|
||||
}
|
||||
.ls-button:active,
|
||||
.ls-button.active,
|
||||
.ls-button:hover {
|
||||
border-color: #adadad;
|
||||
}
|
||||
|
||||
.ls-button--primary {
|
||||
color: #fff;
|
||||
border-color: #27ace8;
|
||||
|
||||
background: #66cfff;
|
||||
background: -moz-linear-gradient(top, #66cfff 0%, #2abcfe 100%);
|
||||
background: -webkit-linear-gradient(top, #66cfff 0%,#2abcfe 100%);
|
||||
background: linear-gradient(top, #66cfff 0%,#2abcfe 100%);
|
||||
}
|
||||
.ls-button--primary:active,
|
||||
.ls-button--primary.active,
|
||||
.ls-button--primary:hover {
|
||||
color: #fff;
|
||||
background: #2abcfe;
|
||||
border-color: #27ace8;
|
||||
}
|
||||
|
||||
.ls-button--success {
|
||||
color: #fff;
|
||||
background: #5cb85c;
|
||||
border-color: #4cae4c;
|
||||
}
|
||||
.ls-button--success:active,
|
||||
.ls-button--success.active,
|
||||
.ls-button--success:hover {
|
||||
color: #fff;
|
||||
background: #449d44;
|
||||
border-color: #398439;
|
||||
}
|
||||
|
||||
.ls-button--info {
|
||||
color: #fff;
|
||||
background: #5bc0de;
|
||||
border-color: #46b8da;
|
||||
}
|
||||
.ls-button--info:active,
|
||||
.ls-button--info.active,
|
||||
.ls-button--info:hover {
|
||||
color: #fff;
|
||||
background: #31b0d5;
|
||||
border-color: #269abc;
|
||||
}
|
||||
|
||||
.ls-button--warning {
|
||||
color: #fff;
|
||||
background: #f0ad4e;
|
||||
border-color: #eea236;
|
||||
}
|
||||
.ls-button--warning:active,
|
||||
.ls-button--warning.active,
|
||||
.ls-button--warning:hover {
|
||||
color: #fff;
|
||||
background: #ec971f;
|
||||
border-color: #d58512;
|
||||
}
|
||||
|
||||
.ls-button--danger {
|
||||
color: #fff;
|
||||
border-color: #d43f3a;
|
||||
|
||||
background: #d9534f;
|
||||
background: -moz-linear-gradient(top, #f1726e 0%, #d9534f 100%);
|
||||
background: -webkit-linear-gradient(top, #f1726e 0%,#d9534f 100%);
|
||||
background: linear-gradient(top, #f1726e 0%,#d9534f 100%);
|
||||
}
|
||||
.ls-button--danger:active,
|
||||
.ls-button--danger.active,
|
||||
.ls-button--danger:hover {
|
||||
color: #fff;
|
||||
background: #d9534f;
|
||||
border-color: #ac2925;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Disabled
|
||||
*/
|
||||
.ls-button.disabled,
|
||||
.ls-button.disabled:hover,
|
||||
.ls-button[disabled],
|
||||
.ls-button[disabled]:hover {
|
||||
border-color: #ccc;
|
||||
background: #eee;
|
||||
color: #999;
|
||||
}
|
||||
|
||||
.ls-button.disabled:active,
|
||||
.ls-button[disabled]:active {
|
||||
-webkit-box-shadow: none;
|
||||
-moz-box-shadow: none;
|
||||
box-shadow: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Icon
|
||||
*/
|
||||
.ls-button.ls-button--icon { padding-left: 8px; padding-right: 8px; }
|
||||
.ls-button.ls-button--icon [class^="icon-"],
|
||||
.ls-button.ls-button--icon [class*=" icon-"] { margin-right: 0; float: none; }
|
||||
|
||||
/**
|
||||
* Sizes
|
||||
*/
|
||||
.ls-button {
|
||||
padding: 7px 12px;
|
||||
font-size: 13px;
|
||||
}
|
||||
.ls-button--large {
|
||||
padding: 10px 16px;
|
||||
font-size: 18px;
|
||||
}
|
||||
.ls-button--small {
|
||||
padding: 4px 10px 6px;
|
||||
font-size: 11px;
|
||||
}
|
||||
.ls-button--xsmall {
|
||||
padding: 1px 5px;
|
||||
font-size: 12px;
|
||||
}
|
||||
.ls-button--block {
|
||||
display: block;
|
||||
width: 100%;
|
||||
}
|
||||
.ls-button--block + .ls-button--block {
|
||||
margin-top: 5px;
|
||||
}
|
||||
input[type="submit"].ls-button--block,
|
||||
input[type="reset"].ls-button--block,
|
||||
input[type="button"].ls-button--block {
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
/**
|
||||
* Loading
|
||||
*/
|
||||
.ls-button[disabled].ls-loading,
|
||||
.ls-button.ls-loading {
|
||||
color: transparent;
|
||||
background-repeat: no-repeat;
|
||||
background-position: 50% 50%;
|
||||
transition: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Счетчик
|
||||
*/
|
||||
.ls-button .ls-badge {
|
||||
vertical-align: middle;
|
||||
line-height: 18px;
|
||||
}
|
||||
.ls-button--primary .ls-badge { background: #fff; color: #286090; }
|
||||
.ls-button--success .ls-badge { background: #fff; color: #5cb85c; }
|
||||
.ls-button--info .ls-badge { background: #fff; color: #5bc0de; }
|
||||
.ls-button--warning .ls-badge { background: #fff; color: #f0ad4e; }
|
||||
.ls-button--danger .ls-badge { background: #fff; color: #d9534f; }
|
||||
|
||||
/**
|
||||
* Закругленные углы
|
||||
*/
|
||||
.ls-button--round {
|
||||
border-radius: 30px;
|
||||
}
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Действие
|
||||
*}
|
||||
|
||||
{$component = 'ls-comment-actions-item'}
|
||||
{component_define_params params=[ 'text', 'link', 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
<li class="{$component} {cmods name=$component mods=$mods} {$classes}" {cattr list=$attributes}>
|
||||
{if $link}
|
||||
<a href="{$link.url|default:'#'}" class="ls-link-dotted {$link.classes}" {cattr list=$link.attributes}>
|
||||
{$text}
|
||||
</a>
|
||||
{else}
|
||||
{$text}
|
||||
{/if}
|
||||
</li>
|
|
@ -0,0 +1,62 @@
|
|||
{**
|
||||
* Форма комментирования
|
||||
*
|
||||
* @param integer $targetId
|
||||
* @param string $targetType
|
||||
* @param string $editorSet (light) Стиль редактора
|
||||
*
|
||||
* @param string $classes Дополнительные классы
|
||||
* @param string $attributes Атрибуты
|
||||
* @param string $mods Модификаторы
|
||||
*}
|
||||
|
||||
{* Название компонента *}
|
||||
{$component = 'ls-comment-form'}
|
||||
{component_define_params params=[ 'editorSet', 'targetId', 'targetType', 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
{* Форма *}
|
||||
<form method = "post"
|
||||
class = "{$component} {cmods name=$component mods=$mods} {$classes}"
|
||||
enctype = "multipart/form-data"
|
||||
data-target-id = "{$targetId}"
|
||||
data-target-type = "{$targetType}"
|
||||
{cattr list=$attributes}>
|
||||
{block 'comment-form'}
|
||||
{* @hook Начало формы комментирования *}
|
||||
{hook run='comment_form_begin' params=$params}
|
||||
|
||||
{block 'comment-form-fields'}
|
||||
{* Скрытые поля *}
|
||||
{component 'field' template='hidden' name='reply' value='0' inputClasses='js-comment-form-id'}
|
||||
{component 'field' template='hidden' name='comment_target_id' value=$targetId}
|
||||
|
||||
{* Текст комментария *}
|
||||
{component 'editor'
|
||||
set = $editorSet|default:'light'
|
||||
name = 'comment_text'
|
||||
inputClasses = 'js-comment-form-text'
|
||||
help = false
|
||||
mediaTargetType = 'comment'}
|
||||
{/block}
|
||||
|
||||
{* @hook Хук расположенный после полей формы и перед кнопками управления формой *}
|
||||
{hook run='comment_form_fields_after' params=$params}
|
||||
|
||||
{**
|
||||
* Кнопки
|
||||
*}
|
||||
|
||||
{* Кнопка добавления *}
|
||||
{component 'button' name='submit_comment' text=$aLang.common.add mods='primary' classes='js-comment-form-submit'}
|
||||
|
||||
{* Кнопки редактирования *}
|
||||
{component 'button' name='submit_comment' text=$aLang.common.save mods='primary' classes='js-comment-form-update-submit hide'}
|
||||
{component 'button' name='submit_comment' type='button' text=$aLang.common.cancel classes='js-comment-form-update-cancel ls-fl-r'}
|
||||
|
||||
{* Кнопка превью текста *}
|
||||
{component 'button' text=$aLang.common.preview_text type='button' classes='js-comment-form-preview'}
|
||||
|
||||
{* @hook Конец формы комментирования *}
|
||||
{hook run='comment_form_end' params=$params}
|
||||
{/block}
|
||||
</form>
|
|
@ -0,0 +1,16 @@
|
|||
{**
|
||||
* Пункт с информацией
|
||||
*}
|
||||
|
||||
{$component = 'ls-comment-info-item'}
|
||||
{component_define_params params=[ 'text', 'link', 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
<li class="{$component} {cmods name=$component mods=$mods} {$classes}" {cattr list=$attributes}>
|
||||
{if $link}
|
||||
<a href="{$link.url|default:'#'}" class="{$link.classes}" {cattr list=$link.attributes}>
|
||||
{$text}
|
||||
</a>
|
||||
{else}
|
||||
{$text}
|
||||
{/if}
|
||||
</li>
|
227
application/frontend/skin/synio/components/comment/comment.tpl
Normal file
|
@ -0,0 +1,227 @@
|
|||
{**
|
||||
* Комментарий
|
||||
*
|
||||
* @param object $comment Комментарий
|
||||
* @param boolean $useVote (true) Показывать или нет голосование
|
||||
* @param boolean $useFavourite
|
||||
* @param boolean $useScroll
|
||||
* @param boolean $showReply (true) Показывать или нет кнопку Ответить
|
||||
* @param integer $authorId
|
||||
* @param string $authorText
|
||||
* @param string $dateReadLast
|
||||
*
|
||||
* @param string $classes Дополнительные классы
|
||||
* @param string $attributes Атрибуты
|
||||
* @param string $mods Модификаторы
|
||||
*}
|
||||
|
||||
{* Название компонента *}
|
||||
{$component = 'ls-comment'}
|
||||
{component_define_params params=[ 'dateReadLast', 'showPath', 'showReply', 'authorId', 'comment', 'useFavourite', 'useScroll', 'useVote', 'useEdit', 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
{* Переменные *}
|
||||
{$useEdit = $useEdit|default:true}
|
||||
|
||||
{$isDeleted = $comment->getDelete()}
|
||||
{$user = $comment->getUser()}
|
||||
{$commentId = $comment->getId()}
|
||||
{$target = $comment->getTarget()}
|
||||
|
||||
{* Получаем ссылку на комментарий *}
|
||||
{* TODO: Вынести в бэкенд *}
|
||||
{$permalink = ( Config::Get('module.comment.use_nested') ) ? "{router page='comments'}{$commentId}" : "{if $target}{$target->getUrl()}{/if}#comment{$commentId}"}
|
||||
|
||||
{**
|
||||
* Добавляем модификаторы
|
||||
*}
|
||||
|
||||
{* Комментарий с отрицательным рейтингом *}
|
||||
{if $useVote && $comment->isBad()}
|
||||
{$mods = "$mods bad"}
|
||||
{/if}
|
||||
|
||||
{* Автор комментария является автором объекта к которому оставлен комментарий *}
|
||||
{if $authorId == $user->getId()}
|
||||
{$mods = "$mods author"}
|
||||
{/if}
|
||||
|
||||
{* Комментарий удален *}
|
||||
{if $isDeleted}
|
||||
{$mods = "$mods deleted"}
|
||||
|
||||
{* Комментарий текущего залогиненого пользователя *}
|
||||
{elseif $oUserCurrent && $comment->getUserId() == $oUserCurrent->getId()}
|
||||
{$mods = "$mods self"}
|
||||
|
||||
{* Непрочитанный комментарий *}
|
||||
{elseif $dateReadLast && strtotime($dateReadLast) <= strtotime($comment->getDate())}
|
||||
{$mods = "$mods new"}
|
||||
{/if}
|
||||
|
||||
|
||||
{**
|
||||
* Комментарий
|
||||
* Атрибут id используется для ссылки на комментарий через хэш в урл (например #comment123)
|
||||
*}
|
||||
<section class = "{$component} {cmods name=$component mods=$mods} {$classes} open js-comment"
|
||||
id = "comment{$commentId}"
|
||||
data-id = "{$commentId}"
|
||||
data-parent-id = "{$comment->getPid()}"
|
||||
{cattr list=$attributes}>
|
||||
{* @hook Начало комментария *}
|
||||
{hook run='comment_comment_begin' params=$params}
|
||||
|
||||
{* Сворачивание *}
|
||||
<div class="{$component}-fold js-comment-fold" data-id="{$commentId}">
|
||||
{component 'syn-icon' icon='fold' classes="{$component}-fold-icon-fold" attributes=[ title => $aLang.comments.folding.fold ]}
|
||||
{component 'syn-icon' icon='unfold' classes="{$component}-fold-icon-unfold" attributes=[ title => $aLang.comments.folding.unfold ]}
|
||||
</div>
|
||||
|
||||
{* Путь до комментария *}
|
||||
{if $showPath}
|
||||
<div class="{$component}-path">
|
||||
{$target = $comment->getTarget()}
|
||||
|
||||
<a href="{$target->getUrl()}" class="{$component}-path-target">{$target->getTitle()|escape}</a>
|
||||
<a href="{$target->getUrl()}#comments" class="{$component}-path-comments">({$target->getCountComment()})</a>
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{* Показываем удаленные комментарии только администраторам *}
|
||||
{if ! $isDeleted || ( $oUserCurrent && $oUserCurrent->isAdministrator() )}
|
||||
{* Аватар пользователя *}
|
||||
<a href="{$user->getUserWebPath()}" class="{$component}-avatar">
|
||||
<img src="{$user->getProfileAvatarPath(64)}" alt="{$user->getDisplayName()}" />
|
||||
</a>
|
||||
|
||||
{* Информация *}
|
||||
<ul class="{$component}-info ls-clearfix">
|
||||
{* @hook Начало блока с информацией *}
|
||||
{hook run='comment_info_begin' params=$params}
|
||||
|
||||
{* @hook Конец блока с информацией *}
|
||||
{hook run='comment_info_end' params=$params}
|
||||
</ul>
|
||||
|
||||
{* Текст комментария *}
|
||||
<div class="{$component}-content">
|
||||
{* @hook Начало блока с содержимым комментария *}
|
||||
{hook run='comment_content_begin' params=$params}
|
||||
|
||||
<div class="{$component}-text ls-text">
|
||||
{$comment->getText()}
|
||||
</div>
|
||||
|
||||
{* @hook Конец блока с содержимым комментария *}
|
||||
{hook run='comment_content_end' params=$params}
|
||||
</div>
|
||||
|
||||
{* Информация о редактировании *}
|
||||
{if $comment->getDateEdit()}
|
||||
<div class="{$component}-edit-info">
|
||||
{$aLang.comments.comment.edit_info}:
|
||||
|
||||
<span class="{$component}-edit-info-time js-comment-edit-time">
|
||||
{date_format date=$comment->getDateEdit() hours_back="12" minutes_back="60" now="60" day="day H:i" format="j F Y, H:i"}
|
||||
</span>
|
||||
|
||||
{if $comment->getCountEdit() > 1}
|
||||
({$comment->getCountEdit()} {$comment->getCountEdit()|declension:$aLang.common.times_declension})
|
||||
{/if}
|
||||
</div>
|
||||
{/if}
|
||||
|
||||
{* Действия *}
|
||||
<ul class="{$component}-actions ls-clearfix">
|
||||
{* @hook Начало списка экшенов комментария *}
|
||||
{hook run='comment_actions_begin' params=$params}
|
||||
|
||||
{* Автор комментария *}
|
||||
{component 'comment.info-item'
|
||||
classes="{$component}-username"
|
||||
link=[ url => $user->getUserWebPath() ]
|
||||
text=$user->getDisplayName()}
|
||||
|
||||
{* Дата добавления комментария *}
|
||||
{* Так же является ссылкой на комментарий *}
|
||||
<li class="{$component}-date">
|
||||
<a href="{$permalink}" title="{$aLang.comments.comment.url}">
|
||||
<time datetime="{date_format date=$comment->getDate() format='c'}" title="{date_format date=$comment->getDate() format="j F Y, H:i"}">
|
||||
{date_format date=$comment->getDate() hours_back="12" minutes_back="60" now="60" day="day H:i" format="j F Y, H:i"}
|
||||
</time>
|
||||
</a>
|
||||
</li>
|
||||
|
||||
{* Избранное *}
|
||||
{if $oUserCurrent && $useFavourite}
|
||||
<li>
|
||||
{component 'favourite' classes="{$component}-favourite js-comment-favourite" target=$comment}
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
{* Прокрутка к родительскому комментарию *}
|
||||
{if $useScroll|default:true}
|
||||
{if $comment->getPid()}
|
||||
<li class="{$component}-scroll-to {$component}-scroll-to-parent js-comment-scroll-to-parent"
|
||||
title="{$aLang.comments.comment.scroll_to_parent}">
|
||||
|
||||
<i class="{$component}-scroll-to-icon"></i>
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
{* Прокрутка к дочернему комментарию *}
|
||||
<li class="{$component}-scroll-to {$component}-scroll-to-child js-comment-scroll-to-child"
|
||||
title="{$aLang.comments.comment.scroll_to_child}">
|
||||
|
||||
<i class="{$component}-scroll-to-icon"></i>
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
{* Ответить *}
|
||||
{if $oUserCurrent && ! $isDeleted && $showReply|default:true}
|
||||
<li>
|
||||
<a href="#" class="ls-link-dotted js-comment-reply" data-id="{$commentId}">{$aLang.comments.comment.reply}</a>
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
{* Редактировать *}
|
||||
{if $useEdit && $oUserCurrent && $comment->IsAllowEdit()}
|
||||
<li>
|
||||
<a href="#" class="ls-link-dotted js-comment-update" data-id="{$commentId}">
|
||||
{$aLang.common.edit}
|
||||
|
||||
{* Отображение времени отведенного для редактирования *}
|
||||
{* Используется плагин jquery.timers *}
|
||||
{if $comment->getEditTimeRemaining()}
|
||||
(<span class="js-comment-update-timer" data-seconds="{$comment->getEditTimeRemaining()}">...</span>)
|
||||
{/if}
|
||||
</a>
|
||||
</li>
|
||||
{/if}
|
||||
|
||||
{* Удалить *}
|
||||
{if $oUserCurrent && $comment->IsAllowDelete()}
|
||||
{component 'comment.actions-item'
|
||||
link=[ classes => 'js-comment-remove', attributes => [ 'data-id' => $commentId ] ]
|
||||
text=(( $isDeleted ) ? $aLang.comments.comment.restore : $aLang.common.remove)}
|
||||
{/if}
|
||||
|
||||
{* @hook Конец списка экшенов комментария *}
|
||||
{hook run='comment_actions_end' params=$params}
|
||||
</ul>
|
||||
|
||||
{* Голосование *}
|
||||
{if $useVote}
|
||||
{* Блокируем голосование для гостей или если залогиненый пользователь является автором комментария*}
|
||||
{component 'vote'
|
||||
classes = "{$component}-vote js-comment-vote"
|
||||
target = $comment
|
||||
isLocked = ($oUserCurrent && $oUserCurrent->getId() == $user->getId()) || strtotime($comment->getDate()) < $smarty.now - Config::Get('acl.vote.comment.limit_time')}
|
||||
{/if}
|
||||
{else}
|
||||
{$aLang.comments.comment.deleted}
|
||||
{/if}
|
||||
|
||||
{* @hook Конец комментария *}
|
||||
{hook run='comment_comment_end' params=$params}
|
||||
</section>
|
|
@ -0,0 +1,21 @@
|
|||
/**
|
||||
* Форма комментирования
|
||||
*
|
||||
* @template comment-form.tpl
|
||||
*/
|
||||
|
||||
.ls-comment-form {
|
||||
background: #f8fbfe;
|
||||
padding: 15px;
|
||||
border-radius: 5px;
|
||||
}
|
||||
.ls-comment-form textarea {
|
||||
height: 150px;
|
||||
}
|
||||
|
||||
/* Предпросмотр текста комментария */
|
||||
.ls-comment-preview {
|
||||
padding: 15px;
|
||||
margin: 10px 0 10px 0;
|
||||
border: 1px solid #eee;
|
||||
}
|
|
@ -0,0 +1,224 @@
|
|||
/**
|
||||
* Комментарий
|
||||
*
|
||||
* @modifier deleted Удаленный комментарий
|
||||
* @modifier self Ваш комментарий
|
||||
* @modifier new Новый, непрочитанный комментарий
|
||||
* @modifier current Активный комментарий, который выделяется при исползование кнопки обновления в тулбаре
|
||||
* @modifier list-item Комментарий выводимый в списках
|
||||
*
|
||||
* @template comment.tpl
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-comment {
|
||||
min-height: 48px;
|
||||
padding: 0 0 0 40px;
|
||||
margin-bottom: 25px;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
.ls-comment--self .ls-comment-content { background: #fefef1; border-color: #e6e6bd; }
|
||||
.ls-comment--self .ls-comment-content:before { border-top-color: #e6e6bd; }
|
||||
.ls-comment--self .ls-comment-content:after { border-top-color: #fefef1; }
|
||||
|
||||
.ls-comment--new .ls-comment-content { background: #fff; border-color: #dddb5c; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.1); }
|
||||
.ls-comment--new .ls-comment-content:before { border-top-color: #dddb5c; }
|
||||
.ls-comment--new .ls-comment-content:after { border-top-color: #fff; }
|
||||
|
||||
.ls-comment--current .ls-comment-content { background: #cdf5a6; border-color: #bae48e; }
|
||||
.ls-comment--current .ls-comment-content:before { border-top-color: #bae48e; }
|
||||
.ls-comment--current .ls-comment-content:after { border-top-color: #cdf5a6; }
|
||||
|
||||
.ls-comment--bad .ls-comment-content {
|
||||
opacity: 0.3;
|
||||
filter: alpha(opacity=30);
|
||||
}
|
||||
.ls-comment--bad:hover {
|
||||
opacity: 1;
|
||||
filter: alpha(opacity=100);
|
||||
}
|
||||
|
||||
.ls-comment.ls-comment--deleted { background: #efd5d5; }
|
||||
.ls-user-role-not-admin .ls-comment.ls-comment--deleted {
|
||||
padding: 10px 15px;
|
||||
min-height: 0;
|
||||
background: #f7f7f7;
|
||||
color: #888;
|
||||
}
|
||||
|
||||
/* Аватар */
|
||||
.ls-comment-avatar {
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
overflow: hidden;
|
||||
}
|
||||
.ls-comment-avatar img {
|
||||
width: 30px;
|
||||
height: 30px;
|
||||
}
|
||||
|
||||
/* Логин */
|
||||
.ls-comment-username {
|
||||
font-weight: bold;
|
||||
}
|
||||
.ls-comment-username a {
|
||||
color: #4b5468;
|
||||
text-decoration: underline;
|
||||
}
|
||||
.ls-comment--author .ls-comment-username {
|
||||
padding-left: 7px;
|
||||
background: rgb(254,255,163);
|
||||
background: -moz-linear-gradient(left, rgba(254,255,163,1) 0%, rgba(255,255,255,1) 100%);
|
||||
background: -webkit-linear-gradient(left, rgba(254,255,163,1) 0%,rgba(255,255,255,1) 100%);
|
||||
background: linear-gradient(to right, rgba(254,255,163,1) 0%,rgba(255,255,255,1) 100%);
|
||||
}
|
||||
.ls-comment--author .ls-comment-username a {
|
||||
color: #4b5468;
|
||||
}
|
||||
|
||||
/* Избранное */
|
||||
.ls-comment-favourite {
|
||||
position: relative;
|
||||
top: 1px;
|
||||
}
|
||||
|
||||
|
||||
/* Content */
|
||||
.ls-comment-content {
|
||||
position: relative;
|
||||
padding: 9px 10px 10px;
|
||||
background: #fff;
|
||||
border: 1px solid #e7ebed;
|
||||
border-radius: 3px;
|
||||
}
|
||||
|
||||
/* Arrow */
|
||||
.ls-comment-content:after,
|
||||
.ls-comment-content:before {
|
||||
top: 100%;
|
||||
left: 20px;
|
||||
border: solid transparent;
|
||||
content: " ";
|
||||
height: 0;
|
||||
width: 0;
|
||||
position: absolute;
|
||||
pointer-events: none;
|
||||
}
|
||||
.ls-comment-content:after {
|
||||
border-color: rgba(255, 255, 255, 0);
|
||||
border-top-color: #fff;
|
||||
border-width: 6px;
|
||||
margin-left: -6px;
|
||||
}
|
||||
.ls-comment-content:before {
|
||||
border-color: rgba(231, 235, 237, 0);
|
||||
border-top-color: #e7ebed;
|
||||
border-width: 7px;
|
||||
margin-left: -7px;
|
||||
}
|
||||
|
||||
/* Дата */
|
||||
.ls-comment-date a { color: #818189; }
|
||||
.ls-comment-date a:hover { color: #666; }
|
||||
|
||||
/* Голосование */
|
||||
.ls-comment-vote {
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
right: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
.ls-comment-vote.vote--not-voted.vote--count-zero { display: none; }
|
||||
.ls-comment:hover .ls-comment-vote { display: block; }
|
||||
|
||||
/* Прокрутка к дочернему комментарию */
|
||||
.ls-comment-scroll-to {
|
||||
cursor: pointer;
|
||||
}
|
||||
.ls-comment-scroll-to-child {
|
||||
display: none;
|
||||
}
|
||||
.ls-comment-scroll-to-icon {
|
||||
background-repeat: no-repeat;
|
||||
position: relative;
|
||||
top: 3px;
|
||||
width: 11px;
|
||||
height: 11px;
|
||||
display: block;
|
||||
}
|
||||
.ls-comment-scroll-to-parent .ls-comment-scroll-to-icon {
|
||||
background-image: url(../images/arrow-up.png);
|
||||
}
|
||||
.ls-comment-scroll-to-child .ls-comment-scroll-to-icon {
|
||||
background-image: url(../images/arrow-down.png);
|
||||
}
|
||||
|
||||
/* Текст комментария */
|
||||
.ls-comment-text.ls-text {
|
||||
font-size: 13px;
|
||||
line-height: 1.7em;
|
||||
}
|
||||
.ls-comment-text.ls-text blockquote {
|
||||
background: #fff;
|
||||
border-color: #ccc;
|
||||
padding: 5px 10px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
/* Действия */
|
||||
.ls-comment-actions {
|
||||
font-size: 11px;
|
||||
}
|
||||
.ls-comment-actions li {
|
||||
float: left;
|
||||
margin: 10px 10px 0 0;
|
||||
}
|
||||
.ls-comment-actions li a {
|
||||
color: #727a90;
|
||||
}
|
||||
.ls-comment-actions li a:hover {
|
||||
color: #f00;
|
||||
}
|
||||
|
||||
/* Сворачивание */
|
||||
.ls-comment-fold {
|
||||
display: none;
|
||||
position: absolute;
|
||||
top: 8px;
|
||||
left: -20px;
|
||||
width: 13px;
|
||||
height: 13px;
|
||||
cursor: pointer;
|
||||
}
|
||||
.ls-comment:not(.ls-comment--folded) .ls-comment-fold-icon-unfold,
|
||||
.ls-comment--folded .ls-comment-fold-icon-fold {
|
||||
display: none;
|
||||
}
|
||||
.ls-comment:not(.ls-comment--folded) .ls-comment-fold-icon-fold,
|
||||
.ls-comment--folded .ls-comment-fold-icon-unfold {
|
||||
display: block;
|
||||
}
|
||||
|
||||
/* Информация о редактировании */
|
||||
.ls-comment-edit-info {
|
||||
margin-top: 10px;
|
||||
font-size: 11px;
|
||||
opacity: .5;
|
||||
}
|
||||
|
||||
/* Путь до комментария */
|
||||
.ls-comment-path {
|
||||
background: #fff;
|
||||
color: #aaa;
|
||||
border-radius: 3px;
|
||||
padding: 3px 5px 2px;
|
||||
margin-bottom: 10px;
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
/**
|
||||
* Кнопка обновления комментариев
|
||||
*
|
||||
* @template toolbar.comment.tpl
|
||||
*/
|
||||
|
||||
.ls-toolbar-item--comments .ls-toolbar-comments-count {
|
||||
border-top: 1px solid #eee;
|
||||
padding: 10px 0;
|
||||
color: #333;
|
||||
text-align: center;
|
||||
font-size: 11px;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
.ls-toolbar-comments-update i {
|
||||
-webkit-transition: -webkit-transform 1s;
|
||||
transition: transform 1s;
|
||||
}
|
||||
|
||||
.ls-toolbar-comments-update.active i {
|
||||
-ms-transform: rotate(360deg);
|
||||
-webkit-transform: rotate(360deg);
|
||||
transform: rotate(360deg);
|
||||
}
|
|
@ -0,0 +1,69 @@
|
|||
/**
|
||||
* Блок со списком комментариев
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
/**
|
||||
* @modifier forbid Комментирование запрещено
|
||||
*/
|
||||
.ls-comments--forbid .ls-comment-form {
|
||||
display: none;
|
||||
}
|
||||
|
||||
/**
|
||||
* Блок с комментариями
|
||||
*/
|
||||
.ls-comment-list {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Хидер
|
||||
*/
|
||||
.ls-comments-header {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
/* Заголовок */
|
||||
.ls-comments-title {
|
||||
font-size: 24px;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
/* Действия */
|
||||
.ls-comments-actions {
|
||||
padding: 0;
|
||||
background-color: transparent;
|
||||
}
|
||||
|
||||
/**
|
||||
* Кнопка "Комментировать"
|
||||
*/
|
||||
.ls-comment-reply-root {
|
||||
font-size: 20px;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
.ls-comment-reply-root + .ls-comment-form {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Пагинация
|
||||
*/
|
||||
.ls-comments-pagination {
|
||||
margin-bottom: 30px;
|
||||
}
|
||||
|
||||
/**
|
||||
* Вспомогательный блок-обертка
|
||||
*/
|
||||
.ls-comment-wrapper .ls-comment-wrapper { padding-left: 40px; }
|
||||
.ls-comment-wrapper .ls-comment-form,
|
||||
.ls-comment-wrapper .ls-comment-preview { margin-left: 40px; }
|
||||
|
||||
.ls-comment-wrapper .ls-comment-form {
|
||||
margin-bottom: 20px;
|
||||
}
|
After Width: | Height: | Size: 983 B |
After Width: | Height: | Size: 979 B |
|
@ -0,0 +1,22 @@
|
|||
{**
|
||||
* Тулбар
|
||||
* Кнопка обновления комментариев
|
||||
*}
|
||||
|
||||
{component_define_params params=[ 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
{component 'toolbar' template='item'
|
||||
classes = "{$classes} js-comments-toolbar"
|
||||
mods = 'comments'
|
||||
buttons = [
|
||||
[
|
||||
classes => 'ls-toolbar-comments-update js-toolbar-comments-update',
|
||||
attributes => [ 'title' => {lang 'comments.update'} ],
|
||||
icon => 'refresh'
|
||||
],
|
||||
[
|
||||
classes => 'js-toolbar-comments-count',
|
||||
attributes => [ 'title' => {lang 'comments.count_new'} ],
|
||||
text => '0'
|
||||
]
|
||||
]}
|
|
@ -0,0 +1,52 @@
|
|||
/**
|
||||
* Справка по разметке редактора
|
||||
*/
|
||||
|
||||
.editor-help header {
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
.editor-help header a {
|
||||
font-size: 11px;
|
||||
color: #000;
|
||||
border-bottom: 1px dotted #000;
|
||||
}
|
||||
|
||||
.editor-help-body {
|
||||
display: none;
|
||||
position: relative;
|
||||
padding: 20px;
|
||||
margin-bottom: 20px;
|
||||
background: #fefef1;
|
||||
color: #363636;
|
||||
margin-top: 13px;
|
||||
font-size: 11px;
|
||||
border-radius: 5px;
|
||||
-webkit-box-shadow: 0 0 5px #e8e8c0 inset;
|
||||
box-shadow: 0 0 5px #e8e8c0 inset;
|
||||
}
|
||||
.editor-help-body:before {
|
||||
display: block;
|
||||
content: "";
|
||||
position: absolute;
|
||||
top: -12px;
|
||||
left: 15px;
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-width: 6px;
|
||||
border-color: transparent transparent #F2F2DD transparent;
|
||||
border-style: solid;
|
||||
}
|
||||
.editor-help-body h3 { font-size: 18px; font-weight: bold; margin-bottom: 10px; }
|
||||
.editor-help-body a {
|
||||
color: #727a90;
|
||||
border-bottom: 1px dotted #727a90;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
.editor-help-col { float: left; width: 47%; margin-left: 6%; }
|
||||
.editor-help-col:first-child { margin-left: 0; }
|
||||
|
||||
.editor-help-item { margin-bottom: 20px; }
|
||||
.editor-help-item dd { margin-left: 0; }
|
||||
.editor-help-item:last-child { margin-bottom: 0; }
|
||||
.editor-help-item h4 { font-family: monospace; font-weight: bold; margin-bottom: 3px; }
|
|
@ -0,0 +1,87 @@
|
|||
{**
|
||||
* Справка по разметке редактора
|
||||
*}
|
||||
|
||||
{$component = 'editor-help'}
|
||||
{component_define_params params=[ 'targetId' ]}
|
||||
|
||||
{function editor_help_item}
|
||||
{strip}
|
||||
{foreach $items as $item}
|
||||
<dl class="{$component}-item">
|
||||
{foreach $item['tags'] as $tag}
|
||||
<dt>
|
||||
<a href="#" class="ls-link-dotted js-tags-help-link" {if $tag['insert']}data-insert="{$tag['insert']}"{/if}>
|
||||
{$tag['text']}
|
||||
</a>
|
||||
</dt>
|
||||
{/foreach}
|
||||
|
||||
<dd>{$item['def']}</dd>
|
||||
</dl>
|
||||
{/foreach}
|
||||
{/strip}
|
||||
{/function}
|
||||
|
||||
|
||||
<div class="{$component} js-editor-help" data-form-id="{$targetId}">
|
||||
<header class="{$component}-header ls-clearfix">
|
||||
<a href="#" class="ls-link-dotted help-link js-editor-help-toggle">{$aLang.editor.markup.help.link_show}</a>
|
||||
</header>
|
||||
|
||||
<div class="{$component}-body js-editor-help-body">
|
||||
<h3 class="h3">{$aLang.editor.markup.help.special}</h3>
|
||||
|
||||
<div class="ls-mb-30">
|
||||
{editor_help_item items=[
|
||||
[ 'tags' => [ [ 'text' => '<cut>' ] ], 'def' => $aLang.editor.markup.help.special_cut ],
|
||||
[ 'tags' => [ [ 'text' => "<cut name=\"{$aLang.editor.markup.help.special_cut_name_example_name}\">" ] ], 'def' => $aLang.editor.markup.help.special_cut_name ],
|
||||
[ 'tags' => [ [ 'text' => "<video>http://...</video>", 'insert' => '<video></video>' ] ], 'def' => $aLang.editor.markup.help.special_video ],
|
||||
[ 'tags' => [ [ 'text' => "<ls user=\"{$aLang.editor.markup.help.special_ls_user_example_user}\" />", 'insert' => '<ls user="" />' ] ], 'def' => $aLang.editor.markup.help.special_ls_user ]
|
||||
]}
|
||||
</div>
|
||||
|
||||
<h3 class="h3">{$aLang.editor.markup.help.standart}</h3>
|
||||
|
||||
<div class="ls-clearfix">
|
||||
<ul class="{$component}-col">
|
||||
{editor_help_item items=[
|
||||
[ 'tags' => [
|
||||
[ 'text' => '<h4></h4>' ],
|
||||
[ 'text' => '<h5></h5>' ],
|
||||
[ 'text' => '<h6></h6>' ]
|
||||
], 'def' => $aLang.editor.markup.help.standart_h ],
|
||||
[ 'tags' => [ [ 'text' => "<img src=\"\" />" ] ], 'def' => $aLang.editor.markup.help.standart_img ],
|
||||
[ 'tags' => [
|
||||
[ 'text' => "<a href=\"http://...\">{$aLang.editor.markup.help.standart_a_example_href}</a>", 'insert' => '<a href=""></a>"' ]
|
||||
], 'def' => $aLang.editor.markup.help.standart_a ],
|
||||
[ 'tags' => [ [ 'text' => "<b></b>" ] ], 'def' => $aLang.editor.markup.help.standart_b ],
|
||||
[ 'tags' => [ [ 'text' => "<i></i>" ] ], 'def' => $aLang.editor.markup.help.standart_i ],
|
||||
[ 'tags' => [ [ 'text' => "<s></s>" ] ], 'def' => $aLang.editor.markup.help.standart_s ],
|
||||
[ 'tags' => [ [ 'text' => "<u></u>" ] ], 'def' => $aLang.editor.markup.help.standart_u ]
|
||||
]}
|
||||
</ul>
|
||||
|
||||
<ul class="{$component}-col">
|
||||
{editor_help_item items=[
|
||||
[ 'tags' => [ [ 'text' => "<hr />" ] ], 'def' => $aLang.editor.markup.help.standart_hr ],
|
||||
[ 'tags' => [ [ 'text' => "<blockquote></blockquote>" ] ], 'def' => $aLang.editor.markup.help.standart_blockquote ],
|
||||
[ 'tags' => [
|
||||
[ 'text' => '<table></table>' ],
|
||||
[ 'text' => '<th></th>' ],
|
||||
[ 'text' => '<td></td>' ],
|
||||
[ 'text' => '<tr></tr>' ]
|
||||
], 'def' => $aLang.editor.markup.help.standart_table ],
|
||||
[ 'tags' => [
|
||||
[ 'text' => '<ul></ul>' ],
|
||||
[ 'text' => '<li></li>' ]
|
||||
], 'def' => $aLang.editor.markup.help.standart_ul ],
|
||||
[ 'tags' => [
|
||||
[ 'text' => '<ol></ol>' ],
|
||||
[ 'text' => '<li></li>' ]
|
||||
], 'def' => $aLang.editor.markup.help.standart_ol ]
|
||||
]}
|
||||
</ul>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
|
@ -0,0 +1,32 @@
|
|||
/**
|
||||
* Избранное
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
.ls-favourite {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
}
|
||||
.ls-favourite-toggle {
|
||||
display: inline-block;
|
||||
width: 11px;
|
||||
height: 11px;
|
||||
background: url(../images/favourite.png) no-repeat;
|
||||
}
|
||||
.ls-favourite--added .ls-favourite-toggle {
|
||||
background-image: url(../images/favourite-active.png);
|
||||
}
|
||||
.ls-favourite-count {
|
||||
display: none;
|
||||
margin-left: 0;
|
||||
font-size: 10px;
|
||||
color: #a2b6cd;
|
||||
position: relative;
|
||||
top: -1px;
|
||||
}
|
||||
.ls-favourite--has-counter .ls-favourite-count {
|
||||
display: inline-block;
|
||||
}
|
|
@ -0,0 +1,42 @@
|
|||
{**
|
||||
* Добавление в избранное
|
||||
*
|
||||
* @param object $target Объект который добавляется в избранное
|
||||
* @param boolean $hideZeroCounter
|
||||
*}
|
||||
|
||||
{* Название компонента *}
|
||||
{$component = 'ls-favourite'}
|
||||
{component_define_params params=[ 'target', 'hideZeroCounter', 'mods', 'classes', 'attributes' ]}
|
||||
|
||||
{* True если объект находится в избранном *}
|
||||
{$isActive = $target && $target->getIsFavourite()}
|
||||
|
||||
{* Кол-во объектов в избранном *}
|
||||
{$count = $target->getCountFavourite()}
|
||||
|
||||
{* Добавляем модификаторы *}
|
||||
{if $count}
|
||||
{$mods = "$mods has-counter"}
|
||||
{/if}
|
||||
|
||||
{if $isActive}
|
||||
{$mods = "$mods added"}
|
||||
{/if}
|
||||
|
||||
|
||||
<div class="{$component} {cmods name=$component mods=$mods} {if $isActive}active{/if} {$classes}"
|
||||
data-param-i-target-id="{$target->getId()}"
|
||||
title="{$aLang.favourite[ ($isActive) ? 'remove' : 'add' ]}"
|
||||
{cattr list=$attributes}>
|
||||
|
||||
{* Кнопка добавления/удаления из избранного *}
|
||||
<div class="{$component}-toggle js-favourite-toggle"></div>
|
||||
|
||||
{* Кол-во объектов в избранном *}
|
||||
{if isset( $count )}
|
||||
<span class="{$component}-count js-favourite-count" {if ! $count && $hideZeroCounter|default:true}style="display: none;"{/if}>
|
||||
{$count}
|
||||
</span>
|
||||
{/if}
|
||||
</div>
|
After Width: | Height: | Size: 1.2 KiB |
After Width: | Height: | Size: 1.2 KiB |