summaryrefslogtreecommitdiff
path: root/_includes/scripts/archieve.js
diff options
context:
space:
mode:
Diffstat (limited to '_includes/scripts/archieve.js')
-rw-r--r--_includes/scripts/archieve.js135
1 files changed, 135 insertions, 0 deletions
diff --git a/_includes/scripts/archieve.js b/_includes/scripts/archieve.js
new file mode 100644
index 0000000..96549b5
--- /dev/null
+++ b/_includes/scripts/archieve.js
@@ -0,0 +1,135 @@
+(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));
+ });
+
+ });
+})();