mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-01 05:55:02 +03:00
Оптимизация персональных тегов
This commit is contained in:
parent
4397ba9192
commit
0bc5eac1ec
|
@ -525,6 +525,7 @@ $config['head']['default']['js'] = array(
|
|||
"___path.application.web___/frontend/common/js/userfield.js",
|
||||
"___path.application.web___/frontend/common/js/captcha.js",
|
||||
"___path.application.web___/frontend/common/js/media.js",
|
||||
"___path.application.web___/frontend/common/js/tags.js",
|
||||
"___path.application.web___/frontend/common/js/init.js",
|
||||
|
||||
"http://yandex.st/share/share.js" => array('merge'=>false),
|
||||
|
|
|
@ -19,11 +19,6 @@ ls.favourite = (function ($) {
|
|||
* @private
|
||||
*/
|
||||
var _defaults = {
|
||||
// Classes
|
||||
classes: {
|
||||
active: 'active'
|
||||
},
|
||||
|
||||
// Selectors
|
||||
selectors: {
|
||||
// Блок добавления в избранное
|
||||
|
@ -84,7 +79,7 @@ ls.favourite = (function ($) {
|
|||
if ( ! this.options.type[data.type] ) return false;
|
||||
|
||||
var params = {
|
||||
type: ! data.toggle.hasClass(this.options.classes.active),
|
||||
type: ! data.toggle.hasClass(ls.options.classes.states.active),
|
||||
id: data.targetId
|
||||
};
|
||||
|
||||
|
@ -96,14 +91,14 @@ ls.favourite = (function ($) {
|
|||
} else {
|
||||
ls.msg.notice(null, result.sMsg);
|
||||
|
||||
data.toggle.removeClass(this.options.classes.active);
|
||||
data.toggle.removeClass(ls.options.classes.states.active);
|
||||
|
||||
if (result.bState) {
|
||||
data.toggle.addClass(this.options.classes.active).attr('title', ls.lang.get('talk_favourite_del'));
|
||||
this.showTags(data.type,data.targetId);
|
||||
data.toggle.addClass(ls.options.classes.states.active).attr('title', ls.lang.get('talk_favourite_del'));
|
||||
ls.tags && ls.tags.showPersonalTags(data.type, data.targetId);
|
||||
} else {
|
||||
data.toggle.attr('title', ls.lang.get('talk_favourite_add'));
|
||||
this.hideTags(data.type,data.targetId);
|
||||
ls.tags && ls.tags.hidePersonalTags(data.type, data.targetId);
|
||||
}
|
||||
|
||||
if (data.count) {
|
||||
|
@ -119,118 +114,5 @@ ls.favourite = (function ($) {
|
|||
}.bind(this));
|
||||
};
|
||||
|
||||
|
||||
/**
|
||||
* ID объекта
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var _targetId = 0;
|
||||
|
||||
/**
|
||||
* Тип объекта
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var _targetType = null;
|
||||
|
||||
/**
|
||||
* Показывает форму редактирования тегов
|
||||
*
|
||||
* @param {String} targetType
|
||||
* @param {String} targetId
|
||||
*/
|
||||
this.showEditTags = function(targetId, type, obj) {
|
||||
_targetType = type;
|
||||
_targetId = targetId;
|
||||
|
||||
var form = $('#favourite-form-tags'),
|
||||
text = '',
|
||||
tags = $('.js-favourite-tags-' + _targetType + '-' + _targetId);
|
||||
|
||||
tags.find('.js-favourite-tag-user-link').each(function(k, tag){
|
||||
if (text) {
|
||||
text = text + ', ' + $(tag).text();
|
||||
} else {
|
||||
text = $(tag).text();
|
||||
}
|
||||
});
|
||||
|
||||
form.find('.js-form-favourite-tags-list').val(text);
|
||||
form.modal('show');
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Скрывает форму редактирования тегов
|
||||
*
|
||||
* @param {String} targetType
|
||||
* @param {String} targetId
|
||||
*/
|
||||
this.hideEditTags = function() {
|
||||
$('#favourite-form-tags').modal('hide');
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Сохраняет персональные теги
|
||||
*
|
||||
* @param {String} targetType
|
||||
* @param {String} targetId
|
||||
*/
|
||||
this.saveTags = function(form) {
|
||||
var url = aRouter['ajax'] + 'favourite/save-tags/';
|
||||
var submitButton = $('.js-favourite-form-submit');
|
||||
|
||||
ls.hook.marker('saveTagsBefore');
|
||||
|
||||
ls.ajax.submit(url, $(form), function(result) {
|
||||
if (result.bStateError) {
|
||||
ls.msg.error(null, result.sMsg);
|
||||
} else {
|
||||
this.hideEditTags();
|
||||
var tags = $('.js-favourite-tags-' + _targetType + '-' + _targetId);
|
||||
tags.find('.js-favourite-tag-user').detach();
|
||||
var edit = tags.find('.js-favourite-tag-edit');
|
||||
$.each(result.aTags,function(k,v){
|
||||
edit.before('<li class="' + _targetType + '-tags-tag ' + _targetType + '-tags-tag-user js-favourite-tag-user">, <a rel="tag" href="'+v.url+'" class="topic-tags-tag-link js-topic-tags-tag-link">'+v.tag+'</a></li>');
|
||||
});
|
||||
|
||||
ls.hook.run('ls_favourite_save_tags_after',[form,result],this);
|
||||
}
|
||||
}.bind(this), {
|
||||
submitButton: submitButton,
|
||||
params: {
|
||||
target_id: _targetId,
|
||||
target_type: _targetType
|
||||
}
|
||||
});
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Показывает персональные теги
|
||||
*
|
||||
* @param {String} targetType
|
||||
* @param {String} targetId
|
||||
*/
|
||||
this.showTags = function(targetType,targetId) {
|
||||
$('.js-favourite-tags-'+targetType+'-'+targetId).find('.js-favourite-tag-edit').show();
|
||||
};
|
||||
|
||||
/**
|
||||
* Скрывает персональные теги
|
||||
*
|
||||
* @param {String} targetType
|
||||
* @param {String} targetId
|
||||
*/
|
||||
this.hideTags = function(targetType,targetId) {
|
||||
var tags=$('.js-favourite-tags-'+targetType+'-'+targetId);
|
||||
tags.find('.js-favourite-tag-user').detach();
|
||||
tags.find('.js-favourite-tag-edit').hide();
|
||||
this.hideEditTags();
|
||||
};
|
||||
|
||||
return this;
|
||||
}).call(ls.favourite || {},jQuery);
|
182
application/frontend/common/js/tags.js
Normal file
182
application/frontend/common/js/tags.js
Normal file
|
@ -0,0 +1,182 @@
|
|||
/**
|
||||
* Теги
|
||||
*
|
||||
* @module ls/tags
|
||||
*
|
||||
* @license GNU General Public License, version 2
|
||||
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
||||
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
||||
*/
|
||||
|
||||
var ls = ls || {};
|
||||
|
||||
ls.tags = (function ($) {
|
||||
"use strict";
|
||||
|
||||
/**
|
||||
* ID текущего объекта
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var _targetId = 0;
|
||||
|
||||
/**
|
||||
* Тип текущего объекта
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var _targetType = null;
|
||||
|
||||
/**
|
||||
* Дефолтные опции
|
||||
*
|
||||
* @private
|
||||
*/
|
||||
var _defaults = {
|
||||
// Селекторы
|
||||
selectors: {
|
||||
form: '#favourite-form-tags',
|
||||
submitForm: '#js-favourite-form',
|
||||
submitButton: '.js-tags-form-submit',
|
||||
submitInputList: '.js-tags-form-input-list',
|
||||
tag: '.js-tag-list-item-tag',
|
||||
tagPersonal: '.js-tag-list-item-tag-personal',
|
||||
editPersonalTags: '.js-favourite-tag-edit'
|
||||
},
|
||||
// Роуты
|
||||
routers: {
|
||||
save: aRouter['ajax'] + 'favourite/save-tags/'
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Инициализация
|
||||
*
|
||||
* @param {Object} options Опции
|
||||
*/
|
||||
this.init = function(options) {
|
||||
var _this = this;
|
||||
|
||||
this.options = $.extend({}, _defaults, options);
|
||||
|
||||
this.oForm = $(this.options.selectors.form);
|
||||
this.oSubmitButton = $(this.options.selectors.submitButton);
|
||||
this.oSubmitForm = $(this.options.selectors.submitForm);
|
||||
this.oSubmitInputList = $(this.options.selectors.submitInputList);
|
||||
this.oEditPersonalTags = $(this.options.selectors.editPersonalTags);
|
||||
|
||||
// Показываем форму редактирования персональных тегов
|
||||
this.oEditPersonalTags.on('click', function (e) {
|
||||
var oElement = $(this);
|
||||
|
||||
_this.setTarget(oElement.data('id'), oElement.data('type'));
|
||||
_this.showForm();
|
||||
|
||||
e.preventDefault();
|
||||
});
|
||||
|
||||
// Сабмит формы редактирования персональных тегов
|
||||
this.oSubmitForm.on('submit', function (e) {
|
||||
this.save();
|
||||
e.preventDefault();
|
||||
}.bind(this));
|
||||
};
|
||||
|
||||
/**
|
||||
* Устанавливает id и тип текущего объекта
|
||||
*
|
||||
* @param {Number} iId ID объекта
|
||||
* @param {String} sType Тип объекта
|
||||
*/
|
||||
this.setTarget = function(iId, sType) {
|
||||
_targetId = iId;
|
||||
_targetType = sType;
|
||||
};
|
||||
|
||||
/**
|
||||
* Сохраняет персональные теги
|
||||
*/
|
||||
this.save = function() {
|
||||
var _this = this;
|
||||
|
||||
ls.hook.marker('saveTagsBefore');
|
||||
|
||||
ls.ajax.submit(this.options.routers.save, this.oSubmitForm, function(result) {
|
||||
if (result.bStateError) {
|
||||
ls.msg.error(null, result.sMsg);
|
||||
} else {
|
||||
var tagsContainer = $('.js-tags-' + _targetType + '-' + _targetId),
|
||||
aTags = [];
|
||||
|
||||
$.each(result.aTags, function(k, v) {
|
||||
aTags.push('<li class="tag-list-item tag-list-item-tag tag-list-item-tag-personal js-tag-list-item-tag-personal">, ' +
|
||||
'<a rel="tag" href="' + v.url + '" class="">' + v.tag + '</a></li>');
|
||||
});
|
||||
|
||||
this.hideForm();
|
||||
|
||||
tagsContainer.find(this.options.selectors.tagPersonal).remove();
|
||||
tagsContainer.find(this.options.selectors.editPersonalTags).before( aTags.join('') );
|
||||
|
||||
ls.hook.run('ls_favourite_save_tags_after', [this.oSubmitForm, result], this);
|
||||
}
|
||||
}.bind(this), {
|
||||
submitButton: _this.oSubmitButton,
|
||||
params: {
|
||||
target_id: _targetId,
|
||||
target_type: _targetType
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Показывает форму редактирования тегов
|
||||
*/
|
||||
this.showForm = function() {
|
||||
var aTags = [];
|
||||
|
||||
$('.js-tags-' + _targetType + '-' + _targetId).find(this.options.selectors.tagPersonal + ' a').each(function(k, tag) {
|
||||
aTags.push( $(tag).text() );
|
||||
});
|
||||
|
||||
this.oSubmitInputList.val( aTags.join(', ') );
|
||||
this.oForm.modal('show');
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
/**
|
||||
* Скрывает форму редактирования тегов
|
||||
*/
|
||||
this.hideForm = function() {
|
||||
this.oForm.modal('hide');
|
||||
};
|
||||
|
||||
/**
|
||||
* Показывает персональные теги
|
||||
*
|
||||
* @param {Number} iTargetId ID объекта
|
||||
* @param {String} sTargetType Тип объекта
|
||||
*/
|
||||
this.showPersonalTags = function(sTargetType, iTargetId) {
|
||||
$('.js-tags-' + sTargetType + '-' + iTargetId).find(this.options.selectors.editPersonalTags).show();
|
||||
};
|
||||
|
||||
/**
|
||||
* Скрывает персональные теги
|
||||
*
|
||||
* @param {Number} iTargetId ID объекта
|
||||
* @param {String} sTargetType Тип объекта
|
||||
*/
|
||||
this.hidePersonalTags = function(sTargetType, iTargetId) {
|
||||
var tagsContainer = $('.js-tags-' + sTargetType + '-' + iTargetId);
|
||||
|
||||
tagsContainer.find(this.options.selectors.tagPersonal).remove();
|
||||
tagsContainer.find(this.options.selectors.editPersonalTags).hide();
|
||||
this.hideForm();
|
||||
};
|
||||
|
||||
return this;
|
||||
}).call(ls.tags || {}, jQuery);
|
|
@ -2,6 +2,7 @@
|
|||
* Добавление пользовательских тегов к топику
|
||||
*
|
||||
* @styles css/modals.css
|
||||
* @scripts <common>/js/tags.js
|
||||
*}
|
||||
|
||||
{extends file='modals/modal_base.tpl'}
|
||||
|
@ -11,14 +12,15 @@
|
|||
{block name='modal_title'}{$aLang.add_favourite_tags}{/block}
|
||||
|
||||
{block name='modal_content'}
|
||||
<form onsubmit="return ls.favourite.saveTags(this);" id="js-favourite-form">
|
||||
{include file='forms/form.field.text.tpl'
|
||||
sFieldName = 'tags'
|
||||
bFieldNoMargin = true
|
||||
sFieldClasses = 'width-full autocomplete-tags-sep js-form-favourite-tags-list'}
|
||||
<form id="js-favourite-form">
|
||||
{include file='forms/fields/form.field.text.tpl'
|
||||
sFieldName = 'tags'
|
||||
bFieldNoMargin = true
|
||||
bFieldIsAutofocus = true
|
||||
sFieldClasses = 'width-full autocomplete-tags-sep js-tags-form-input-list'}
|
||||
</form>
|
||||
{/block}
|
||||
|
||||
{block name='modal_footer_begin'}
|
||||
<button type="submit" class="button button-primary js-favourite-form-submit" onclick="jQuery('#js-favourite-form').submit()">{$aLang.favourite_form_tags_button_save}</button>
|
||||
<button type="submit" class="button button-primary js-tags-form-submit" data-button-submit-form="js-favourite-form">{$aLang.favourite_form_tags_button_save}</button>
|
||||
{/block}
|
Loading…
Reference in a new issue