2011-05-03 00:28:36 +03:00
|
|
|
|
/**
|
2013-07-31 09:35:19 +03:00
|
|
|
|
* Блоги
|
2014-03-04 10:34:05 +02:00
|
|
|
|
*
|
2013-08-29 12:30:04 +03:00
|
|
|
|
* @module ls/blogs
|
2014-03-04 10:34:05 +02:00
|
|
|
|
*
|
2013-08-29 12:30:04 +03:00
|
|
|
|
* @license GNU General Public License, version 2
|
|
|
|
|
* @copyright 2013 OOO "ЛС-СОФТ" {@link http://livestreetcms.com}
|
|
|
|
|
* @author Denis Shakhov <denis.shakhov@gmail.com>
|
2013-07-31 09:35:19 +03:00
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
var ls = ls || {};
|
|
|
|
|
|
2011-05-03 00:28:36 +03:00
|
|
|
|
ls.blog = (function ($) {
|
2013-07-31 09:35:19 +03:00
|
|
|
|
"use strict";
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Дефолтные опции
|
2014-03-04 10:34:05 +02:00
|
|
|
|
*
|
2013-08-29 12:30:04 +03:00
|
|
|
|
* @private
|
2013-07-31 09:35:19 +03:00
|
|
|
|
*/
|
2013-08-29 12:30:04 +03:00
|
|
|
|
var _defaults = {
|
2013-07-31 09:35:19 +03:00
|
|
|
|
// Роутеры
|
2014-01-25 14:39:19 +02:00
|
|
|
|
routers: {
|
|
|
|
|
join: aRouter['blog'] + 'ajaxblogjoin/',
|
|
|
|
|
categories: aRouter['ajax'] + 'blogs/get-by-category/',
|
|
|
|
|
info: aRouter['blog'] + 'ajaxbloginfo/',
|
|
|
|
|
search: aRouter['blogs'] + 'ajax-search/',
|
2013-07-31 09:35:19 +03:00
|
|
|
|
},
|
|
|
|
|
|
|
|
|
|
// Селекторы
|
|
|
|
|
selectors: {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
addBlogSelectType: '.js-blog-add-type',
|
|
|
|
|
toggle_join: '.js-blog-join',
|
|
|
|
|
users_number: '.js-blog-users-number',
|
|
|
|
|
info: '.js-blog-info',
|
|
|
|
|
blog_add_type_note: '#blog_type_note',
|
|
|
|
|
nav: {
|
|
|
|
|
categories: '.js-blog-nav-categories',
|
|
|
|
|
blogs: '.js-blog-nav-blogs',
|
|
|
|
|
submit: '.js-blog-nav-submit',
|
|
|
|
|
}
|
2013-07-31 09:35:19 +03:00
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Инициализация
|
|
|
|
|
*
|
|
|
|
|
* @param {Object} options Опции
|
|
|
|
|
*/
|
|
|
|
|
this.init = function(options) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
var _this = this;
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2013-08-29 12:30:04 +03:00
|
|
|
|
this.options = $.extend({}, _defaults, options);
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements = {
|
|
|
|
|
nav: {
|
|
|
|
|
categories: $(this.options.selectors.nav.categories),
|
|
|
|
|
blogs: $(this.options.selectors.nav.blogs),
|
|
|
|
|
submit: $(this.options.selectors.nav.submit),
|
|
|
|
|
},
|
|
|
|
|
info: $(this.options.selectors.info),
|
|
|
|
|
toggle_join: $(this.options.selectors.toggle_join),
|
|
|
|
|
blog_add_type_note: $(this.options.selectors.blog_add_type_note),
|
|
|
|
|
};
|
|
|
|
|
|
2013-07-31 09:35:19 +03:00
|
|
|
|
// Подгрузка информации о выбранном типе блога при создании блога
|
|
|
|
|
$(this.options.selectors.addBlogSelectType).on('change', function (e) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
_this.loadInfoType($(this).val());
|
2013-07-31 09:35:19 +03:00
|
|
|
|
});
|
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
// Вступить/покинуть блог
|
|
|
|
|
this.elements.toggle_join.on('click', function (e) {
|
|
|
|
|
_this.toggleJoin($(this), $(this).data('blog-id'));
|
|
|
|
|
e.preventDefault();
|
|
|
|
|
});
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
/**
|
|
|
|
|
* Блок навигации по категориям и блогам
|
|
|
|
|
*/
|
2011-04-01 10:49:36 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
// Подгрузка блогов из выбранной категории
|
|
|
|
|
this.elements.nav.categories.on('change', function (e) {
|
|
|
|
|
_this.loadBlogsByCategory($(this).val());
|
2011-04-01 10:49:36 +03:00
|
|
|
|
});
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
// Переход на страницу выбранного блога
|
|
|
|
|
this.elements.nav.submit.on('click', function (e) {
|
|
|
|
|
_this.navigatorGoSelectBlog();
|
|
|
|
|
});
|
2012-03-30 12:52:36 +03:00
|
|
|
|
};
|
2012-06-17 08:24:48 +03:00
|
|
|
|
|
|
|
|
|
/**
|
2014-01-25 14:39:19 +02:00
|
|
|
|
* Вступить или покинуть блог
|
2012-06-17 08:24:48 +03:00
|
|
|
|
*/
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.toggleJoin = function(oToggle, iIdBlog) {
|
|
|
|
|
var sUrl = this.options.routers.join,
|
|
|
|
|
oParams = { idBlog: iIdBlog };
|
|
|
|
|
|
|
|
|
|
oToggle.addClass(ls.options.classes.states.loading);
|
|
|
|
|
|
|
|
|
|
ls.hook.marker('toggleJoinBefore');
|
2012-06-17 08:24:48 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
ls.ajax.load(sUrl, oParams, function(result) {
|
2012-06-17 08:24:48 +03:00
|
|
|
|
if (result.bStateError) {
|
|
|
|
|
ls.msg.error(null, result.sMsg);
|
|
|
|
|
} else {
|
|
|
|
|
ls.msg.notice(null, result.sMsg);
|
2014-01-25 14:39:19 +02:00
|
|
|
|
|
|
|
|
|
oToggle.empty().text( result.bState ? ls.lang.get('blog.join.leave') : ls.lang.get('blog.join.join') ).toggleClass('button-primary');
|
|
|
|
|
$(this.options.selectors.users_number + '[data-blog-id=' + iIdBlog + ']').text(result.iCountUser);
|
|
|
|
|
|
|
|
|
|
ls.hook.run('ls_blog_toggle_join_after', [iIdBlog, result], oToggle);
|
2012-06-17 08:24:48 +03:00
|
|
|
|
}
|
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
oToggle.removeClass(ls.options.classes.states.loading);
|
|
|
|
|
}.bind(this));
|
2012-06-17 08:24:48 +03:00
|
|
|
|
};
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2011-05-03 00:28:36 +03:00
|
|
|
|
/**
|
2014-01-25 14:39:19 +02:00
|
|
|
|
* Отображение информации о блоге
|
|
|
|
|
*/
|
|
|
|
|
this.loadInfo = function(iBlogId) {
|
2014-01-28 15:56:33 +02:00
|
|
|
|
if ( ! this.elements.info.length ) return;
|
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
var url = this.options.routers.info,
|
|
|
|
|
params = { idBlog: iBlogId };
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements.info.empty().addClass(ls.options.classes.states.loading);
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2012-04-28 09:09:47 +03:00
|
|
|
|
ls.hook.marker('loadInfoBefore');
|
2014-01-25 14:39:19 +02:00
|
|
|
|
|
|
|
|
|
ls.ajax.load(url, params, function(result) {
|
2011-05-03 00:28:36 +03:00
|
|
|
|
if (result.bStateError) {
|
|
|
|
|
ls.msg.error(null, result.sMsg);
|
|
|
|
|
} else {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements.info.removeClass(ls.options.classes.states.loading).html(result.sText);
|
|
|
|
|
|
|
|
|
|
ls.hook.run('ls_blog_load_info_after', [iBlogId, result], this.elements.info);
|
2011-05-03 00:28:36 +03:00
|
|
|
|
}
|
2014-01-25 14:39:19 +02:00
|
|
|
|
}.bind(this));
|
2012-03-30 12:52:36 +03:00
|
|
|
|
};
|
2013-07-31 09:35:19 +03:00
|
|
|
|
|
2011-08-21 18:13:37 +03:00
|
|
|
|
/**
|
2014-01-25 14:39:19 +02:00
|
|
|
|
* Отображение информации о типе блога
|
|
|
|
|
*/
|
2011-08-21 18:13:37 +03:00
|
|
|
|
this.loadInfoType = function(type) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements.blog_add_type_note.text(ls.lang.get('blog.add.fields.type.note_' + type));
|
2012-03-30 12:52:36 +03:00
|
|
|
|
};
|
|
|
|
|
|
2013-04-12 16:01:40 +03:00
|
|
|
|
/**
|
|
|
|
|
* Подгружает блоги из категории
|
2014-03-04 10:34:05 +02:00
|
|
|
|
*
|
2013-04-12 16:01:40 +03:00
|
|
|
|
* @param {String} id ID категории
|
|
|
|
|
*/
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.loadBlogsByCategory = function(iId) {
|
|
|
|
|
var url = this.options.routers.categories,
|
|
|
|
|
params = { id: iId };
|
|
|
|
|
|
|
|
|
|
this.elements.nav.blogs.empty().prop('disabled', true),
|
|
|
|
|
this.elements.nav.submit.prop('disabled', true).addClass(ls.options.classes.states.loading);
|
2013-04-12 06:44:36 +03:00
|
|
|
|
|
|
|
|
|
ls.hook.marker('loadBlogsByCategoryBefore');
|
2013-04-12 16:01:40 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
if (iId !== '0') {
|
|
|
|
|
ls.ajax.load(url, params, function(result) {
|
2013-04-12 16:01:40 +03:00
|
|
|
|
if (result.bStateError) {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements.nav.blogs.append('<option>' + result.sMsg + '</option>');
|
2013-04-12 16:01:40 +03:00
|
|
|
|
} else {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
$($.map(result.aBlogs, function(value, index) {
|
|
|
|
|
return '<option value="' + value.id + '" data-url="' + value.url_full + '">' + value.title + '</option>';
|
|
|
|
|
}).join('')).appendTo(this.elements.nav.blogs);
|
2013-04-12 16:01:40 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements.nav.blogs.prop('disabled', false);
|
|
|
|
|
this.elements.nav.submit.prop('disabled', false).removeClass(ls.options.classes.states.loading);
|
2013-04-12 16:01:40 +03:00
|
|
|
|
|
2014-01-25 14:39:19 +02:00
|
|
|
|
ls.hook.run('ls_blog_load_blogs_by_category_after', [iId, result]);
|
2013-04-12 16:01:40 +03:00
|
|
|
|
}
|
2014-01-25 14:39:19 +02:00
|
|
|
|
|
|
|
|
|
this.elements.nav.submit.removeClass(ls.options.classes.states.loading);
|
|
|
|
|
}.bind(this));
|
2013-04-12 16:01:40 +03:00
|
|
|
|
} else {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
this.elements.nav.submit.removeClass(ls.options.classes.states.loading);
|
|
|
|
|
this.elements.nav.blogs.html('<option>' + ls.lang.get('blog.blog') + '</option>');
|
2013-04-12 16:01:40 +03:00
|
|
|
|
}
|
2013-04-12 06:44:36 +03:00
|
|
|
|
};
|
|
|
|
|
|
2013-04-12 16:01:40 +03:00
|
|
|
|
/**
|
|
|
|
|
* Переход на страницу выбранного блога
|
|
|
|
|
*/
|
2013-04-12 06:44:36 +03:00
|
|
|
|
this.navigatorGoSelectBlog = function() {
|
2014-01-25 14:39:19 +02:00
|
|
|
|
window.location.href = this.elements.nav.blogs.find('option:selected').data('url') || '';
|
2013-04-12 06:44:36 +03:00
|
|
|
|
};
|
|
|
|
|
|
2011-05-03 00:28:36 +03:00
|
|
|
|
return this;
|
|
|
|
|
}).call(ls.blog || {},jQuery);
|