mirror of
https://github.com/Oreolek/ifhub.club.git
synced 2024-07-03 06:55:03 +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/userfield.js",
|
||||||
"___path.application.web___/frontend/common/js/captcha.js",
|
"___path.application.web___/frontend/common/js/captcha.js",
|
||||||
"___path.application.web___/frontend/common/js/media.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",
|
"___path.application.web___/frontend/common/js/init.js",
|
||||||
|
|
||||||
"http://yandex.st/share/share.js" => array('merge'=>false),
|
"http://yandex.st/share/share.js" => array('merge'=>false),
|
||||||
|
|
|
@ -19,11 +19,6 @@ ls.favourite = (function ($) {
|
||||||
* @private
|
* @private
|
||||||
*/
|
*/
|
||||||
var _defaults = {
|
var _defaults = {
|
||||||
// Classes
|
|
||||||
classes: {
|
|
||||||
active: 'active'
|
|
||||||
},
|
|
||||||
|
|
||||||
// Selectors
|
// Selectors
|
||||||
selectors: {
|
selectors: {
|
||||||
// Блок добавления в избранное
|
// Блок добавления в избранное
|
||||||
|
@ -84,7 +79,7 @@ ls.favourite = (function ($) {
|
||||||
if ( ! this.options.type[data.type] ) return false;
|
if ( ! this.options.type[data.type] ) return false;
|
||||||
|
|
||||||
var params = {
|
var params = {
|
||||||
type: ! data.toggle.hasClass(this.options.classes.active),
|
type: ! data.toggle.hasClass(ls.options.classes.states.active),
|
||||||
id: data.targetId
|
id: data.targetId
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -96,14 +91,14 @@ ls.favourite = (function ($) {
|
||||||
} else {
|
} else {
|
||||||
ls.msg.notice(null, result.sMsg);
|
ls.msg.notice(null, result.sMsg);
|
||||||
|
|
||||||
data.toggle.removeClass(this.options.classes.active);
|
data.toggle.removeClass(ls.options.classes.states.active);
|
||||||
|
|
||||||
if (result.bState) {
|
if (result.bState) {
|
||||||
data.toggle.addClass(this.options.classes.active).attr('title', ls.lang.get('talk_favourite_del'));
|
data.toggle.addClass(ls.options.classes.states.active).attr('title', ls.lang.get('talk_favourite_del'));
|
||||||
this.showTags(data.type,data.targetId);
|
ls.tags && ls.tags.showPersonalTags(data.type, data.targetId);
|
||||||
} else {
|
} else {
|
||||||
data.toggle.attr('title', ls.lang.get('talk_favourite_add'));
|
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) {
|
if (data.count) {
|
||||||
|
@ -119,118 +114,5 @@ ls.favourite = (function ($) {
|
||||||
}.bind(this));
|
}.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;
|
return this;
|
||||||
}).call(ls.favourite || {},jQuery);
|
}).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
|
* @styles css/modals.css
|
||||||
|
* @scripts <common>/js/tags.js
|
||||||
*}
|
*}
|
||||||
|
|
||||||
{extends file='modals/modal_base.tpl'}
|
{extends file='modals/modal_base.tpl'}
|
||||||
|
@ -11,14 +12,15 @@
|
||||||
{block name='modal_title'}{$aLang.add_favourite_tags}{/block}
|
{block name='modal_title'}{$aLang.add_favourite_tags}{/block}
|
||||||
|
|
||||||
{block name='modal_content'}
|
{block name='modal_content'}
|
||||||
<form onsubmit="return ls.favourite.saveTags(this);" id="js-favourite-form">
|
<form id="js-favourite-form">
|
||||||
{include file='forms/form.field.text.tpl'
|
{include file='forms/fields/form.field.text.tpl'
|
||||||
sFieldName = 'tags'
|
sFieldName = 'tags'
|
||||||
bFieldNoMargin = true
|
bFieldNoMargin = true
|
||||||
sFieldClasses = 'width-full autocomplete-tags-sep js-form-favourite-tags-list'}
|
bFieldIsAutofocus = true
|
||||||
|
sFieldClasses = 'width-full autocomplete-tags-sep js-tags-form-input-list'}
|
||||||
</form>
|
</form>
|
||||||
{/block}
|
{/block}
|
||||||
|
|
||||||
{block name='modal_footer_begin'}
|
{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}
|
{/block}
|
Loading…
Reference in a new issue