integration/v2/js/keyword-mosaic.js
author ymh <ymh.work@gmail.com>
Thu, 09 Jan 2020 13:37:23 +0100
changeset 298 c40c501bca19
parent 189 037ff36ba217
permissions -rw-r--r--
Add poetry on sync script and add correct fablib dependency

$(function() {
    
    $('.masonry-177').masonry({
        columnWidth: 177,
        itemSelector: '.item-masonry'
    });
    
    function updateMasonry() {
        $('.masonry-177').masonry('layout');
    }
    
    var keywordsobj = {};
    
    $(".item-masonry").each(function(i, element) {
        $(element)
            .attr("data-keywords")
            .split(",")
            .forEach(function(kw) {
                var keyword = kw.replace(/(^\s+|\s+$)/g,''),
                    basekw = keyword.toLowerCase();
                if (!keywordsobj.hasOwnProperty(basekw)) {
                    keywordsobj[basekw] = {
                        keyword: keyword,
                        basekeyword: basekw,
                        count: 0,
                        items: $(),
                        enabled: true
                    };
                }
                kwobj = keywordsobj[basekw];
                kwobj.count++;
                kwobj.items.push(element);
            });
    });
    
    var keywordslist = [];
    
    for (var k in keywordsobj) {
        if (keywordsobj.hasOwnProperty(k)) {
            keywordslist.push(keywordsobj[k]);
        }
    }
    
    keywordslist.sort(function(a, b) {
        return b.count - a.count;
    });
    
    var filterlist = $(".filters");
    
    function updateKeywords() {
        var enabledItems = $();
        keywordslist.forEach(function(kw) {
            if (kw.enabled) {
                enabledItems = enabledItems.add(kw.items);
                kw.li.removeClass("disabled");
            } else {
                kw.li.addClass("disabled");
            }
        });
        $(".item-masonry").addClass("disabled");
        enabledItems.removeClass("disabled");
    }
    
    keywordslist.slice(0,100).forEach(function(kw) {
        var li = $('<li class="box-shadow-2">'),
            texta = $('<a class="display-keyword" href="#">'),
            actiona = $('<a class="icon-action" href="#">');
        texta.text(kw.keyword + ' ');
        li.append(actiona);
        li.append(texta);
        kw.li = li;
        li.click(function() {
            var allothersdisabled = keywordslist.reduce(function(mem, k) {
                return mem && (k === kw || !k.enabled);
            }, true);
            if (allothersdisabled) {
                keywordslist.forEach(function(k) {
                    k.enabled = true;
                });
            } else {
                keywordslist.forEach(function(k) {
                    k.enabled = false;
                });
                kw.enabled = true;
            }
            updateKeywords();
            return false;
        });
        actiona.click(function() {
            kw.enabled = !kw.enabled;
            updateKeywords();
            return false;
        });
        filterlist.append(li);
    })
        
    $('.toggle-comment').click(function(e){
        e.preventDefault();
        $('.show-comment, .hide-comment').hide();
        if($('.mosaic').length){
            $('.mosaic').removeClass('mosaic').addClass('mosaic-comment');
            $('.hide-comment').show();
        }else{
            $('.mosaic-comment').removeClass('mosaic-comment').addClass('mosaic');
            $('.show-comment').show();
        }
        updateMasonry();
    });

    //filters
    $('.filters a').each(function(){
        var text = $.trim($(this).text());
        if(text.length > 26){
            $(this).text(text.substr(0, 26) + '...')
        }
    });
});