136 lines
4.0 KiB
JavaScript
136 lines
4.0 KiB
JavaScript
|
(function() {
|
||
|
var SOURCES = window.TEXT_VARIABLES.sources;
|
||
|
function queryString() {
|
||
|
// This function is anonymous, is executed immediately and
|
||
|
// the return value is assigned to QueryString!
|
||
|
var i = 0, queryObj = {}, pair;
|
||
|
var queryStr = window.location.search.substring(1);
|
||
|
var queryArr = queryStr.split('&');
|
||
|
for (i = 0; i < queryArr.length; i++) {
|
||
|
pair = queryArr[i].split('=');
|
||
|
// If first entry with this name
|
||
|
if (typeof queryObj[pair[0]] === 'undefined') {
|
||
|
queryObj[pair[0]] = pair[1];
|
||
|
// If second entry with this name
|
||
|
} else if (typeof queryObj[pair[0]] === 'string') {
|
||
|
queryObj[pair[0]] = [queryObj[pair[0]], pair[1]];
|
||
|
// If third or later entry with this name
|
||
|
} else {
|
||
|
queryObj[pair[0]].push(pair[1]);
|
||
|
}
|
||
|
}
|
||
|
return queryObj;
|
||
|
}
|
||
|
|
||
|
var setUrlQuery = (function() {
|
||
|
var baseUrl = window.location.href.split('?')[0];
|
||
|
return function(query) {
|
||
|
if (typeof query === 'string') {
|
||
|
window.history.replaceState(null, '', baseUrl + query);
|
||
|
} else {
|
||
|
window.history.replaceState(null, '', baseUrl);
|
||
|
}
|
||
|
};
|
||
|
})();
|
||
|
|
||
|
window.Lazyload.js(SOURCES.jquery, function() {
|
||
|
var $tags = $('.js-tags');
|
||
|
var $articleTags = $tags.find('button');
|
||
|
var $tagShowAll = $tags.find('.tag-button--all');
|
||
|
var $result = $('.js-result');
|
||
|
var $sections = $result.find('section');
|
||
|
var sectionArticles = [];
|
||
|
var $lastFocusButton = null;
|
||
|
var sectionTopArticleIndex = [];
|
||
|
var hasInit = false;
|
||
|
|
||
|
$sections.each(function() {
|
||
|
sectionArticles.push($(this).find('.item'));
|
||
|
});
|
||
|
|
||
|
function init() {
|
||
|
var i, index = 0;
|
||
|
for (i = 0; i < $sections.length; i++) {
|
||
|
sectionTopArticleIndex.push(index);
|
||
|
index += $sections.eq(i).find('.item').length;
|
||
|
}
|
||
|
sectionTopArticleIndex.push(index);
|
||
|
}
|
||
|
|
||
|
function searchButtonsByTag(_tag/*raw tag*/) {
|
||
|
if (!_tag) {
|
||
|
return $tagShowAll;
|
||
|
}
|
||
|
var _buttons = $articleTags.filter('[data-encode="' + _tag + '"]');
|
||
|
if (_buttons.length === 0) {
|
||
|
return $tagShowAll;
|
||
|
}
|
||
|
return _buttons;
|
||
|
}
|
||
|
function buttonFocus(target) {
|
||
|
if (target) {
|
||
|
target.addClass('focus');
|
||
|
$lastFocusButton && !$lastFocusButton.is(target) && $lastFocusButton.removeClass('focus');
|
||
|
$lastFocusButton = target;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
function tagSelect (tag/*raw tag*/, target) {
|
||
|
var result = {}, $articles;
|
||
|
var i, j, k, _tag;
|
||
|
|
||
|
for (i = 0; i < sectionArticles.length; i++) {
|
||
|
$articles = sectionArticles[i];
|
||
|
for (j = 0; j < $articles.length; j++) {
|
||
|
if (tag === '' || tag === undefined) {
|
||
|
result[i] || (result[i] = {});
|
||
|
result[i][j] = true;
|
||
|
} else {
|
||
|
var tags = $articles.eq(j).data('tags').split(',');
|
||
|
for (k = 0; k < tags.length; k++) {
|
||
|
if (tags[k] === tag) {
|
||
|
result[i] || (result[i] = {});
|
||
|
result[i][j] = true; break;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
for (i = 0; i < sectionArticles.length; i++) {
|
||
|
result[i] && $sections.eq(i).removeClass('d-none');
|
||
|
result[i] || $sections.eq(i).addClass('d-none');
|
||
|
for (j = 0; j < sectionArticles[i].length; j++) {
|
||
|
if (result[i] && result[i][j]) {
|
||
|
sectionArticles[i].eq(j).removeClass('d-none');
|
||
|
} else {
|
||
|
sectionArticles[i].eq(j).addClass('d-none');
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
hasInit || ($result.removeClass('d-none'), hasInit = true);
|
||
|
|
||
|
|
||
|
if (target) {
|
||
|
buttonFocus(target);
|
||
|
_tag = target.attr('data-encode');
|
||
|
if (_tag === '' || typeof _tag !== 'string') {
|
||
|
setUrlQuery();
|
||
|
} else {
|
||
|
setUrlQuery('?tag=' + _tag);
|
||
|
}
|
||
|
} else {
|
||
|
buttonFocus(searchButtonsByTag(tag));
|
||
|
}
|
||
|
}
|
||
|
|
||
|
var query = queryString(), _tag = query.tag;
|
||
|
init(); tagSelect(_tag);
|
||
|
$tags.on('click', 'button', function() {
|
||
|
tagSelect($(this).data('encode'), $(this));
|
||
|
});
|
||
|
|
||
|
});
|
||
|
})();
|