1
0
Fork 0
mirror of https://github.com/Oreolek/ifhub.club.git synced 2024-07-08 09:24:25 +03:00
ifhub.club/application/frontend/common/js/blog.js

195 lines
5.7 KiB
JavaScript
Raw Normal View History

2011-05-03 00:28:36 +03:00
/**
2013-07-31 09:35:19 +03:00
* Блоги
*
* @module ls/blogs
*
* @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";
/**
* Дефолтные опции
*
* @private
2013-07-31 09:35:19 +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'
2014-01-25 14:39:19 +02:00
}
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
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)
2014-01-25 14:39:19 +02:00
},
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
// Вступить/покинуть блог
$(document).on('click', this.options.selectors.toggle_join, function (e) {
2014-01-25 14:39:19 +02:00
_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();
});
};
/**
2014-01-25 14:39:19 +02: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');
2014-01-25 14:39:19 +02:00
ls.ajax.load(sUrl, oParams, function(result) {
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');
2014-01-25 14:39:19 +02:00
$(this.options.selectors.users_number + '[data-blog-id=' + iIdBlog + ']').text(result.iCountUser);
ls.hook.run('ls_blog_toggle_join_after', [iIdBlog, result], oToggle);
}
2014-01-25 14:39:19 +02:00
oToggle.removeClass(ls.options.classes.states.loading);
}.bind(this));
};
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) {
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));
};
2013-07-31 09:35:19 +03:00
/**
2014-01-25 14:39:19 +02: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));
};
2013-04-12 16:01:40 +03: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);
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 16:01:40 +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') || '';
};
2011-05-03 00:28:36 +03:00
return this;
}).call(ls.blog || {},jQuery);