diff --git a/templates/framework/js/livestreet/captcha.js b/templates/framework/js/livestreet/captcha.js index 01ae65cd..93214123 100644 --- a/templates/framework/js/livestreet/captcha.js +++ b/templates/framework/js/livestreet/captcha.js @@ -12,7 +12,9 @@ ls.captcha = (function ($) { */ var defaults = { // Селектор каптчи - sCaptchaSelector: '.js-form-auth-captcha' + selectors: { + captcha: '.js-form-auth-captcha' + } }; /** @@ -21,7 +23,7 @@ ls.captcha = (function ($) { this.init = function(options) { this.options = $.extend({}, defaults, options); - oCaptcha = $(this.options.sCaptchaSelector); + oCaptcha = $(this.options.selectors.captcha); // Подгружаем каптчу при открытии окна регистрации $('[data-option-target=tab-pane-registration]').tab('option', 'onActivate', function () { diff --git a/templates/framework/js/livestreet/editor.js b/templates/framework/js/livestreet/editor.js index 3aa78363..a799ddb7 100644 --- a/templates/framework/js/livestreet/editor.js +++ b/templates/framework/js/livestreet/editor.js @@ -12,9 +12,11 @@ ls.editor = (function($) { */ var defaults = { // Селекторы - sInsertImageButtonSelector: '.js-insert-image-button', - sUploadImageButtonSelector: '.js-upload-image-button', - sPreviewImageLoaderSelector: '.js-topic-preview-loader', + selectors: { + insertImageButton: '.js-insert-image-button', + uploadImageButton: '.js-upload-image-button', + previewImageLoader: '.js-topic-preview-loader', + } }; /** @@ -28,7 +30,7 @@ ls.editor = (function($) { this.options = $.extend({}, defaults, options); // Вставка ссылки - $(this.options.sInsertImageButtonSelector).on('click', function (e) { + $(this.options.selectors.insertImageButton).on('click', function (e) { var sUrl = $('#img_url').val(), sAlign = $('#form-image-url-align').val(), sTitle = $('#form-image-url-title').val(); @@ -37,7 +39,7 @@ ls.editor = (function($) { }); // Вставка ссылки - $(this.options.sUploadImageButtonSelector).on('click', function (e) { + $(this.options.selectors.uploadImageButton).on('click', function (e) { var sFormId = $(this).data('form-id'); self.ajaxUploadImg(sFormId); diff --git a/templates/framework/js/livestreet/topic.js b/templates/framework/js/livestreet/topic.js index 0f5cb994..c5496bf9 100644 --- a/templates/framework/js/livestreet/topic.js +++ b/templates/framework/js/livestreet/topic.js @@ -17,10 +17,12 @@ ls.topic = (function ($) { }, // Селекторы - sPreviewImageSelector: '.js-topic-preview-image', - sPreviewImageLoaderSelector: '.js-topic-preview-loader', - sPreviewTopicTextButtonSelector: '.js-topic-preview-text-button', - sPreviewTopicTextHideButtonSelector: '.js-topic-preview-text-hide-button', + selectors: { + previewImage: '.js-topic-preview-image', + previewImageLoader: '.js-topic-preview-loader', + previewTopicTextButton: '.js-topic-preview-text-button', + previewTopicTextHideButton: '.js-topic-preview-text-hide-button', + } }; /** @@ -34,22 +36,22 @@ ls.topic = (function ($) { this.options = $.extend({}, defaults, options); // Подгрузка избражений-превью - $(this.options.sPreviewImageSelector).each(function () { + $(this.options.selectors.previewImage).each(function () { $(this).imagesLoaded(function () { var $this = $(this), - $preview = $this.closest(self.options.sPreviewImageLoaderSelector).removeClass('loading'); + $preview = $this.closest(self.options.selectors.previewImageLoader).removeClass('loading'); $this.height() < $preview.height() && $this.css('top', ($preview.height() - $this.height()) / 2 ); }); }); // Превью текста - $(this.options.sPreviewTopicTextButtonSelector).on('click', function (e) { + $(this.options.selectors.previewTopicTextButton).on('click', function (e) { self.showPreviewText('form-topic-add', 'topic-text-preview'); }); // Закрытие превью - $(document).on('click', this.options.sPreviewTopicTextHideButtonSelector, function (e) { + $(document).on('click', this.options.selectors.previewTopicTextHideButton, function (e) { self.hidePreviewText(); }); }; diff --git a/templates/framework/js/livestreet/usernote.js b/templates/framework/js/livestreet/usernote.js index a3172a02..ffd84078 100644 --- a/templates/framework/js/livestreet/usernote.js +++ b/templates/framework/js/livestreet/usernote.js @@ -12,24 +12,26 @@ ls.usernote = (function($) { */ var defaults = { // Роутеры - oRouters: { + routers: { save: aRouter['profile'] + 'ajax-note-save/', remove: aRouter['profile'] + 'ajax-note-remove/', }, // Селекторы - sNoteSelector: '.js-user-note', - sNoteContentSelector: '.js-user-note-content', - sNoteTextSelector: '.js-user-note-text', - sNoteAddButtonSelector: '.js-user-note-add-button', - sNoteActionsSelector: '.js-user-note-actions', - sNoteEditButtonSelector: '.js-user-note-edit-button', - sNoteRemoveButtonSelector: '.js-user-note-remove-button', + selectors: { + note: '.js-user-note', + noteContent: '.js-user-note-content', + noteText: '.js-user-note-text', + noteAddButton: '.js-user-note-add-button', + noteActions: '.js-user-note-actions', + noteEditButton: '.js-user-note-edit-button', + noteRemoveButton: '.js-user-note-remove-button', - sNoteEditSelector: '.js-user-note-edit', - sNoteEditTextSelector: '.js-user-note-edit-text', - sNoteEditSaveButtonSelector: '.js-user-note-edit-save', - sNoteEditCancelButtonSelector: '.js-user-note-edit-cancel', + noteEdit: '.js-user-note-edit', + noteEditText: '.js-user-note-edit-text', + noteEditSaveButton: '.js-user-note-edit-save', + noteEditCancelButton: '.js-user-note-edit-cancel', + } }; /** @@ -43,44 +45,44 @@ ls.usernote = (function($) { this.options = $.extend({}, defaults, options); // Добавление - $(this.options.sNoteSelector).each(function () { + $(this.options.selectors.note).each(function () { var oNote = $(this); var oVars = { oNote: oNote, - oNoteText: oNote.find(self.options.sNoteTextSelector), - oNoteEditText: oNote.find(self.options.sNoteEditTextSelector), - oNoteContent: oNote.find(self.options.sNoteContentSelector), - oNoteEdit: oNote.find(self.options.sNoteEditSelector), - oNoteAdd: oNote.find(self.options.sNoteAddButtonSelector), - oNoteActions: oNote.find(self.options.sNoteActionsSelector), + oNoteText: oNote.find(self.options.selectors.noteText), + oNoteEditText: oNote.find(self.options.selectors.noteEditText), + oNoteContent: oNote.find(self.options.selectors.noteContent), + oNoteEdit: oNote.find(self.options.selectors.noteEdit), + oNoteAdd: oNote.find(self.options.selectors.noteAddButton), + oNoteActions: oNote.find(self.options.selectors.noteActions), iUserId: oNote.data('user-id') }; // Показывает форму добавления - oVars.oNote.find(self.options.sNoteAddButtonSelector).on('click', function (e) { + oVars.oNote.find(self.options.selectors.noteAddButton).on('click', function (e) { self.showForm(oVars); e.preventDefault(); }.bind(self)); // Отмена - oVars.oNote.find(self.options.sNoteEditCancelButtonSelector).on('click', function (e) { + oVars.oNote.find(self.options.selectors.noteEditCancelButton).on('click', function (e) { self.hideForm(oVars); }); // Сохранение заметки - oVars.oNote.find(self.options.sNoteEditSaveButtonSelector).on('click', function (e) { + oVars.oNote.find(self.options.selectors.noteEditSaveButton).on('click', function (e) { self.save(oVars); }); // Удаление заметки - oVars.oNote.find(self.options.sNoteRemoveButtonSelector).on('click', function (e) { + oVars.oNote.find(self.options.selectors.noteRemoveButton).on('click', function (e) { self.remove(oVars); e.preventDefault(); }); // Редактирование заметки - oVars.oNote.find(self.options.sNoteEditButtonSelector).on('click', function (e) { + oVars.oNote.find(self.options.selectors.noteEditButton).on('click', function (e) { self.showForm(oVars); oVars.oNoteEditText.val( $.trim(oVars.oNoteText.html()) ); e.preventDefault(); @@ -122,7 +124,7 @@ ls.usernote = (function($) { ls.hook.marker('saveBefore'); - ls.ajax(this.options.oRouters.save, params, function (result) { + ls.ajax(this.options.routers.save, params, function (result) { if (result.bStateError) { ls.msg.error(null, result.sMsg); } else { @@ -148,7 +150,7 @@ ls.usernote = (function($) { ls.hook.marker('removeBefore'); - ls.ajax(this.options.oRouters.remove, params, function (result) { + ls.ajax(this.options.routers.remove, params, function (result) { if (result.bStateError) { ls.msg.error(null, result.sMsg); } else { diff --git a/templates/framework/js/livestreet/vote.js b/templates/framework/js/livestreet/vote.js index 8c610f7c..f1f7c26f 100644 --- a/templates/framework/js/livestreet/vote.js +++ b/templates/framework/js/livestreet/vote.js @@ -4,11 +4,24 @@ var ls = ls || {}; * Голосование */ ls.vote = (function ($) { + "use strict"; + /** - * Опции - */ - this.options = { - classes: { + * Дефолтные опции + */ + var defaults = { + // Селекторы + selectors : { + vote: '.js-vote', + up: '.js-vote-up', + down: '.js-vote-down', + abstain: '.js-vote-abstain', + count: '.js-vote-count', + rating: '.js-vote-rating', + }, + + // Классы + classes : { voted: 'voted', plus: 'voted-up', minus: 'voted-down', @@ -18,109 +31,174 @@ ls.vote = (function ($) { zero: 'vote-count-zero', not_voted: 'not-voted' }, - prefix_area: 'vote_area_', - prefix_total: 'vote_total_', - prefix_count: 'vote_count_', type: { comment: { - url: aRouter['ajax']+'vote/comment/', + url: aRouter['ajax'] + 'vote/comment/', targetName: 'idComment' }, topic: { - url: aRouter['ajax']+'vote/topic/', + url: aRouter['ajax'] + 'vote/topic/', targetName: 'idTopic' }, blog: { - url: aRouter['ajax']+'vote/blog/', + url: aRouter['ajax'] + 'vote/blog/', targetName: 'idBlog' }, user: { - url: aRouter['ajax']+'vote/user/', + url: aRouter['ajax'] + 'vote/user/', targetName: 'idUser' } } }; - this.vote = function(idTarget, objVote, value, type) { - if (!this.options.type[type]) return false; + /** + * Инициализация + * + * @param {Object} options Опции + */ + this.init = function(options) { + var self = this; - objVote = $(objVote); - var params = {}; - params['value'] = value; - params[this.options.type[type].targetName] = idTarget; + this.options = $.extend({}, defaults, options); - ls.hook.marker('voteBefore'); - ls.ajax(this.options.type[type].url, params, function(result) { - var args = [idTarget, objVote, value, type, result]; - this.onVote.apply(this,args); - }.bind(this)); - return false; - } + $(this.options.selectors.vote).each(function () { + var oVote = $(this); - this.onVote = function(idTarget, objVote, value, type, result) { + var oVars = { + vote: oVote, + up: oVote.find(self.options.selectors.up), + down: oVote.find(self.options.selectors.down), + abstain: oVote.find(self.options.selectors.abstain), + count: oVote.find(self.options.selectors.count), + rating: oVote.find(self.options.selectors.rating), + id: oVote.data('vote-id'), + type: oVote.data('vote-type'), + }; + + // Плюс + oVars.up.on('click', function (e) { + self.vote(oVars.id, 1, oVars.type, oVars); + e.preventDefault(); + }); + + // Минус + oVars.down.on('click', function (e) { + self.vote(oVars.id, -1, oVars.type, oVars); + e.preventDefault(); + }); + + // Воздержаться + oVars.abstain.on('click', function (e) { + self.vote(oVars.id, 0, oVars.type, oVars); + e.preventDefault(); + }); + }); + }; + + /** + * Голосование + * + * @param {Number} iTargetId ID объекта + * @param {Number} iValue Значение + * @param {String} sType Тип голосования + * @param {Object} oVars Переменные текущего голосования + */ + this.vote = function(iTargetId, iValue, sType, oVars) { + var self = this; + + if ( ! this.options.type[sType] ) return false; + + var params = { + value: iValue + }; + params[this.options.type[sType].targetName] = iTargetId; + + ls.hook.marker('voteBefore'); + + ls.ajax(this.options.type[sType].url, params, function (result) { + var args = [iTargetId, iValue, sType, oVars, result]; + this.onVote.apply(this, args); + }.bind(this)); + }; + + /** + * Коллбэк вызываемый при успешном голосовании + * + * @param {Number} iTargetId ID объекта + * @param {Number} iValue Значение + * @param {String} sType Тип голосования + * @param {Object} oVars Переменные текущего голосования + * @param {Object} result Объект возвращемый сервером + */ + this.onVote = function(iTargetId, iValue, sType, oVars, result) { if (result.bStateError) { ls.msg.error(null, result.sMsg); } else { ls.msg.notice(null, result.sMsg); - - var divVoting = $('#'+this.options.prefix_area+type+'_'+idTarget); - divVoting.addClass(this.options.classes.voted); + oVars.vote + .addClass(this.options.classes.voted) + .removeClass(this.options.classes.negative + ' ' + this.options.classes.positive + ' ' + this.options.classes.not_voted + ' ' + this.options.classes.zero); - if (value > 0) { - divVoting.addClass(this.options.classes.plus); - } - if (value < 0) { - divVoting.addClass(this.options.classes.minus); - } - if (value == 0) { - divVoting.addClass(this.options.classes.voted_zero); + if (iValue > 0) { + oVars.vote.addClass(this.options.classes.plus); + } else if (iValue < 0) { + oVars.vote.addClass(this.options.classes.minus); + } else if (iValue == 0) { + oVars.vote.addClass(this.options.classes.voted_zero); } - var divTotal = $('#'+this.options.prefix_total+type+'_'+idTarget); - var divCount = $('#'+this.options.prefix_count+type+'_'+idTarget); - - if (divCount.length>0 && result.iCountVote) { - divCount.text(parseInt(result.iCountVote)); + if (oVars.count.length > 0 && result.iCountVote) { + oVars.count.text(parseInt(result.iCountVote)); } result.iRating = parseFloat(result.iRating); - divVoting.removeClass(this.options.classes.negative); - divVoting.removeClass(this.options.classes.positive); - divVoting.removeClass(this.options.classes.not_voted); - divVoting.removeClass(this.options.classes.zero); - if (result.iRating > 0) { - divVoting.addClass(this.options.classes.positive); - divTotal.text('+'+result.iRating); - }else if (result.iRating < 0) { - divVoting.addClass(this.options.classes.negative); - divTotal.text(result.iRating); - }else if (result.iRating == 0) { - divVoting.addClass(this.options.classes.zero); - divTotal.text(0); + oVars.vote.addClass(this.options.classes.positive); + oVars.rating.text('+' + result.iRating); + } else if (result.iRating < 0) { + oVars.vote.addClass(this.options.classes.negative); + oVars.rating.text(result.iRating); + } else if (result.iRating == 0) { + oVars.vote.addClass(this.options.classes.zero); + oVars.rating.text(0); } - var method='onVote'+ls.tools.ucfirst(type); - if ($.type(this[method])=='function') { - this[method].apply(this,[idTarget, objVote, value, type, result]); - } - - if (type == 'topic') { - $('#' + this.options.prefix_area + type + '_' + idTarget).addClass('js-tooltip-vote-topic').tooltip('enter'); + var method = 'onVote' + ls.tools.ucfirst(sType); + + if (typeof this[method] == 'function') { + this[method].apply(this, [iTargetId, iValue, sType, oVars, result]); } } - - $(this).trigger('vote',[idTarget, objVote, value, type, result]); - } + }; + /** + * Голосование за пользователя + * + * @param {Number} iTargetId ID объекта + * @param {Number} iValue Значение + * @param {String} sType Тип голосования + * @param {Object} oVars Переменные текущего голосования + * @param {Object} result Объект возвращемый сервером + */ + this.onVoteUser = function(iTargetId, iValue, sType, oVars, result) { + $('#user_skill_' + iTargetId).text(result.iSkill); + }; - - this.onVoteUser = function(idTarget, objVote, value, type, result) { - $('#user_skill_'+idTarget).text(result.iSkill); - } + /** + * Голосование за топик + * + * @param {Number} iTargetId ID объекта + * @param {Number} iValue Значение + * @param {String} sType Тип голосования + * @param {Object} oVars Переменные текущего голосования + * @param {Object} result Объект возвращемый сервером + */ + this.onVoteTopic = function(iTargetId, iValue, sType, oVars, result) { + oVars.vote.addClass('js-tooltip-vote-topic').tooltip('enter'); + }; return this; }).call(ls.vote || {},jQuery); \ No newline at end of file diff --git a/templates/skin/developer/actions/ActionBlog/blog.tpl b/templates/skin/developer/actions/ActionBlog/blog.tpl index b0827c45..2e3b9711 100644 --- a/templates/skin/developer/actions/ActionBlog/blog.tpl +++ b/templates/skin/developer/actions/ActionBlog/blog.tpl @@ -28,26 +28,28 @@
{* Голосование за блог *} -
+ {if $oVote->getDirection() > 0} + voted-up + {elseif $oVote->getDirection() < 0} + voted-down + {/if} + {/if}">
{$aLang.blog_rating}
- - -
{if $oBlog->getRating() > 0}+{/if}{$oBlog->getRating()}
+ + +
{if $oBlog->getRating() > 0}+{/if}{$oBlog->getRating()}
{* Аватар *} diff --git a/templates/skin/developer/assets/js/init.js b/templates/skin/developer/assets/js/init.js index 6c0bdd0c..552a63ff 100644 --- a/templates/skin/developer/assets/js/init.js +++ b/templates/skin/developer/assets/js/init.js @@ -156,6 +156,12 @@ jQuery(document).ready(function($){ ls.topic.init(); + /** + * Vote + */ + ls.vote.init(); + + /** * Photoset */ diff --git a/templates/skin/developer/comments/comment.tpl b/templates/skin/developer/comments/comment.tpl index 7ec84fd1..5ca04a7c 100644 --- a/templates/skin/developer/comments/comment.tpl +++ b/templates/skin/developer/comments/comment.tpl @@ -84,25 +84,27 @@ * Не выводим блок голосования в личных сообщениях и списках *} {if $oComment->getTargetType() != 'talk'} -
  • -
    - {if $oComment->getRating() > 0}+{/if}{$oComment->getRating()} -
    +
  • +
    + {if $oComment->getRating() > 0}+{/if}{$oComment->getRating()} +
  • {/if} diff --git a/templates/skin/developer/layouts/layout.user.tpl b/templates/skin/developer/layouts/layout.user.tpl index 713a46ed..28bf9d35 100644 --- a/templates/skin/developer/layouts/layout.user.tpl +++ b/templates/skin/developer/layouts/layout.user.tpl @@ -16,11 +16,28 @@ avatar -
    +
    {$aLang.user_rating}
    - - -
    {if $oUserProfile->getRating() > 0}+{/if}{$oUserProfile->getRating()}
    + + +
    {if $oUserProfile->getRating() > 0}+{/if}{$oUserProfile->getRating()}
    diff --git a/templates/skin/developer/topics/topic_base.tpl b/templates/skin/developer/topics/topic_base.tpl index 652e54aa..593348aa 100644 --- a/templates/skin/developer/topics/topic_base.tpl +++ b/templates/skin/developer/topics/topic_base.tpl @@ -1,18 +1,24 @@ {** * Базовый шаблон топика + * + * @styles assets/css/topic.css + * @scripts /js/livestreet/topic.js *} {block name='topic_options'}{/block} -{assign var="oBlog" value=$oTopic->getBlog()} -{assign var="oUser" value=$oTopic->getUser()} -{assign var="oVote" value=$oTopic->getVote()} -{assign var="oFavourite" value=$oTopic->getFavourite()} +{$oBlog = $oTopic->getBlog()} +{$oUser = $oTopic->getUser()} +{$oVote = $oTopic->getVote()} +{$oFavourite = $oTopic->getFavourite()}
    - {* Header *} + {** + * Хидер + *} {block name='topic_header'}
    + {* Заголовок *}

    {if $oTopic->getPublish() == 0} @@ -27,6 +33,7 @@ {/if}

    + {* Информация *}
    {$oBlog->getTitle()|escape:'html'} @@ -34,6 +41,7 @@ {date_format date=$oTopic->getDateAdd() format="j F Y, H:i"} + {* Управление *} {if $oTopic->getIsAllowAction()} {/if} @@ -52,7 +65,9 @@ {block name='topic_header_after'}{/block} - {* Content *} + {** + * Текст + *} {block name='topic_content'}
    {hook run='topic_content_begin' topic=$oTopic bTopicList=$bTopicList} @@ -66,11 +81,14 @@ {block name='topic_content_after'}{/block} - {* Footer *} + {** + * Футер + *} {block name='topic_footer'}