1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-01 05:55:02 +03:00

Оптимизация персональных тегов

This commit is contained in:
Denis Shakhov 2014-01-02 12:55:07 +07:00
parent 4397ba9192
commit 0bc5eac1ec
4 changed files with 196 additions and 129 deletions

View file

@ -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),

View file

@ -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);

View 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);

View file

@ -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}