• Книга Async JavaScript?

    den0820
    @den0820 Автор вопроса
    Там подробно раскрыта тема: синхронность/асинхронность, однопоточность/многопоточность (воркеры), promises, fibers
  • Книга Async JavaScript?

    den0820
    @den0820 Автор вопроса
    90 - 100
  • Как в jinja2 выйти из цикла?

    den0820
    @den0820 Автор вопроса
    {% for tariff_tag in data.sub_tariff %}
                                <a class="" href="javascript:void(0);" tabindex="-1">link</a>
                                {% if loop.index == 2 and tariff_tag.tariff__tariff_category == 'amedia-subscription'%}{% break %}{% endif %}
                            {% endfor %}


    Сделал по примеру из документации - это не работает!
  • Как в jinja2 выйти из цикла?

    den0820
    @den0820 Автор вопроса
    Не совсем понятно что представляет из себя loop в вашем примере. А также немного смущают тире(-) в определении if и endfor. Loop - это зарезервированное слово?
  • Как в jinja2 выйти из цикла?

    den0820
    @den0820 Автор вопроса
    То есть, если tariff_tag.tariff__tariff_category == 'amedia-subscription', то выводим только 1 раз ссылку "link" и выходим из цикла.
  • Модули от Gulp не запускаются?

    den0820
    @den0820 Автор вопроса
    Так, вроде все норм, модули появились, но теперь при изменении LESS файла, почему то не видно изменении никаких в браузере, да и в общем css файле, который билдится на основе LESS
  • Модули от Gulp не запускаются?

    den0820
    @den0820 Автор вопроса
    Сейчас попробую. Надеюсь это в корне проекта необходимо делать?
  • Как подключить модуль с помощью require()?

    den0820
    @den0820 Автор вопроса
    Можно привести пример?
  • Почему передаем вторым параметром ссылку на объект?

    den0820
    @den0820 Автор вопроса
    Что подразумевается под "инстансом"?
  • Документация по Knockout.js/Require.js?

    den0820
    @den0820 Автор вопроса
    эти и у меня есть...но мой английский далек от совершенства))
  • Документация по Knockout.js/Require.js?

    den0820
    @den0820 Автор вопроса
    это на английском
  • Ожидание загрузки JavaScript скрипта?

    den0820
    @den0820 Автор вопроса
    Не мудрствуя лукаво, скажу: "никакого ЖыКвери". Только JS native.
  • Не срабатывает removeEventListener?

    den0820
    @den0820 Автор вопроса
    хорошо, но как выцепить колбэк из фрагмента
    for (var i = 0; i < list_items.length; i++) {
            console.log('list_items: ' + i, list_items[i]);
            list_items[i].addEventListener('click', menu.toggleTag.bind(menu));
        }
  • Не срабатывает removeEventListener?

    den0820
    @den0820 Автор вопроса
    Это минимально работающий код. Но боюсь, что даже здесь много объема будет)
  • Не срабатывает removeEventListener?

    den0820
    @den0820 Автор вопроса
    var Tags = function (wrapper, storage) {
        this.wrapper = wrapper;
        this.storage = storage;
        this.clearBtn = document.getElementById('filters-list_clear');
        document.getElementById('filters-list_clear').addEventListener('click', this.clear.bind(this));
    
        rd('app.years.changed').subscribe(function(msg) {
            utils.outputExistTags(msg.data, msg.callback);
        });
    };
    
    Tags.prototype = {
        getFilterGroupTags: function(tags) {
            var self = this;
            tags = tags.join(',');
    
            webapi.catalog.listFilters({
                method: 'GET',
                data: {
                    tags: tags
                }
            }).then(function(resp) {
                if(resp && resp.status === 0) {
                    rd('app.tags.changed').broadcast({
                        data: resp,
                        callback: Menu.prototype.toggleTag
                    });
                } else {
                    console.log('Wrong params');
                }
            });
        },
    }
  • Не срабатывает removeEventListener?

    den0820
    @den0820 Автор вопроса
    var Years = function (wrapper, storage) {
    ****************************************
    rd('app.tags.changed').subscribe(function(msg) {
    utils.outputExistTags(msg.data, msg.callback);
    });
    };

    Years.prototype = {
    getFilterGroupTags: function(from_year, till_year) {
    var self = this;

    webapi.catalog.listFilters({
    method: 'GET',
    data: {
    from_year: from_year,
    till_year: till_year
    }
    }).then(function(resp) {
    if(resp && resp.status === 0) {
    rd('app.years.changed').broadcast({
    data: resp,
    callback: Menu.prototype.toggleTag
    });
    } else {
    console.log('Wrong params');
    }
    });
    },
    }
  • Не срабатывает removeEventListener?

    den0820
    @den0820 Автор вопроса
    Menu.prototype = {
        hideAllTabs: function() {
            var tabContents = document.getElementsByClassName('tvz-filter_content'),
                tabSelects = document.getElementsByClassName('tvz-filter');
    
            for (var i = 0; i < tabContents.length; i++) {
                if (tabContents[i].classList.contains('tvz-hide') === false) {
                    tabContents[i].classList.toggle('tvz-hide');
                }
            }
            for (var i = 0; i < tabSelects.length; i++) {
                if (tabSelects[i].classList.contains('tvz-filter-open') === true) {
                    tabSelects[i].classList.toggle('tvz-filter-open');
                }
            }
    
            this.hideBtn.style.display = 'none';
    
            return false;
        },
        toggleTab: function(e) {
            var target = e.target,
                tabId = e.target.getAttribute('data-select'),
                tabEl = document.getElementById(tabId),
                closed = tabEl.classList.contains('tvz-hide');
    
            this.hideAllTabs();
    
            if (closed) {
                tabEl.classList.toggle('tvz-hide');
                this.hideBtn.style.display = 'block';
    
                /*  Скролл к открытому блоку фильтрации и простановка класса селектам (мобильная версия и десктопная) */
                document.querySelector('[data-select="' + tabId + '"]').classList.add('tvz-filter-open');
    
                var _top = $(target).offset().top;
    
                if(_top){
                    $('html, body').scrollTop(_top - (($('.navbar').css('position') == 'fixed') ? 95 : 10));
                }
            }
        },
        toggleTag: function(e) {
            var targetTagId = e.target.getAttribute('data-target');
    
            e.target.classList.toggle('selected');
    
            if (e.target.classList.contains('selected')) {
                var targetTagName = e.target.innerHTML;
                this.tags.include(targetTagId, targetTagName);
            } else {
                this.tags.remove(targetTagId);
            }
    
            return false;
        }
    };
    
    var Filter = function (storage) {
        this.storage = storage;
        var initParams = this.storage.get();
    
        var wrapper = document.getElementById('filters-list_selected');
        this.hideBtn = document.getElementById('filters-list_hide');
    
        var tags = new Tags(wrapper, storage);
        var years = new Years(wrapper, storage);
        var sort = new Sort(document.getElementById('wrapper-sort'), storage);
        var menu = new Menu(tags);
    
        var selectedList = document.getElementById('filters-list_selected');
    
        //this.hideAllTabs = function() {
        //    var tabContents = document.getElementsByClassName('tvz-filter_content'),
        //        tabSelects = document.getElementsByClassName('tvz-filter');
        //
        //    for (var i = 0; i < tabContents.length; i++) {
        //        if (tabContents[i].classList.contains('tvz-hide') === false) {
        //            tabContents[i].classList.toggle('tvz-hide');
        //        }
        //    }
        //    for (var i = 0; i < tabSelects.length; i++) {
        //        if (tabSelects[i].classList.contains('tvz-filter-open') === true) {
        //            tabSelects[i].classList.toggle('tvz-filter-open');
        //        }
        //    }
        //
        //    this.hideBtn.style.display = 'none';
        //
        //    return false;
        //};
        //
        //this.toggleTab = function(e) {
        //    var target = e.target,
        //        tabId = e.target.getAttribute('data-select'),
        //        tabEl = document.getElementById(tabId),
        //        closed = tabEl.classList.contains('tvz-hide');
        //
        //    this.hideAllTabs();
        //
        //    if (closed) {
        //        tabEl.classList.toggle('tvz-hide');
        //        this.hideBtn.style.display = 'block';
        //
        //        /*  Скролл к открытому блоку фильтрации и простановка класса селектам (мобильная версия и десктопная) */
        //        document.querySelector('[data-select="' + tabId + '"]').classList.add('tvz-filter-open');
        //
        //        var _top = $(target).offset().top;
        //
        //        if(_top){
        //            $('html, body').scrollTop(_top - (($('.navbar').css('position') == 'fixed') ? 95 : 10));
        //        }
        //    }
        //};
        //
        //this.toggleTag = function(e) {
        //    var targetTagId = e.target.getAttribute('data-target');
        //
        //    e.target.classList.toggle('selected');
        //
        //    if (e.target.classList.contains('selected')) {
        //        var targetTagName = e.target.innerHTML;
        //        tags.include(targetTagId, targetTagName);
        //    } else {
        //        tags.remove(targetTagId);
        //    }
        //
        //    return false;
        //};
        //
        //this.hideBtn.addEventListener('click', this.hideAllTabs.bind(this));
    
        rd('app.catalog.reset').subscribe(function() {
            if (selectedList.childNodes.length > 1) {
                selectedList.classList.remove('tvz-hide');
            } else {
                selectedList.classList.add('tvz-hide');
            }
        });
    
        if (initParams.tags != null && initParams.tags.length > 0) {
            for (var index = 0; index < initParams.tags.length; index++) {
                var tagId = initParams.tags[index];
                var tagSelect = document.querySelector('[data-target="' + tagId + '"]');
                tagSelect.className += ' selected';
                var tagName = tagSelect.innerHTML;
                tags.include(tagId, tagName, false);
            }
        }
    
        if (initParams.till_year) {
            years.addYear(initParams.till_year, 'till_year', false);
            years.years_slider.noUiSlider.set([null, initParams.till_year]);
        }
    
        if (initParams.from_year) {
            years.addYear(initParams.from_year, 'from_year', false);
            years.years_slider.noUiSlider.set([initParams.from_year, null]);
        }
    
        if ((initParams.tags != null && initParams.tags.length > 0)
            || initParams.till_year || initParams.from_year) {
            selectedList.classList.remove('tvz-hide');
        }
    
        var list_items = document.getElementsByClassName('filters-list_item');
        for (var i = 0; i < list_items.length; i++) {
            console.log('list_items: ' + i, list_items[i]);
            list_items[i].addEventListener('click', menu.toggleTag.bind(menu));
        }
    
        var tab_buttons = document.getElementsByClassName('tvz-filter');
    
        for (var tabIndex = 0; tabIndex < tab_buttons.length; tabIndex++) {
            tab_buttons[tabIndex].addEventListener('click', menu.toggleTab.bind(menu));
        }
    };
  • Не срабатывает removeEventListener?

    den0820
    @den0820 Автор вопроса
    var Utils = {
        outputExistTags: function(msg, callback) {
            var filter = msg.result.catalog_list_filters,
                tagsFiltered = [],
                tagsId = [],
                tags = document.getElementsByClassName('filters-list_item');
    
            for (var i = 0; i < tags.length; i++) {
                var id = tags[i].getAttribute('data-target');
                tagsId.push(id);
            }
    
            for (var i = 0; i < filter.length; i++) {
                var item = document.querySelector('[data-target="' + filter[i].mark__id + '"]');
    
                if(item) {
                    item.classList.remove('tvz-disable');
                    tagsFiltered.push(item);
                }
            }
    
            for (var i = 0; i < tagsFiltered.length; i++) {
                var filterId = tagsFiltered[i].getAttribute('data-target'),
                    pos = tagsId.indexOf(filterId);
    
                tagsId.splice(pos, 1);
            }
    
            for (var i = 0; i < tagsId.length; i++) {
                var itemList = document.querySelector('[data-target="' + tagsId[i] + '"]');
                itemList.removeEventListener('click', callback, true);
                itemList.classList.add('tvz-disable');
                console.log('itemList: ' + i, itemList);
            }
    
            //console.log('TagsId Array: ', tagsId, tagsId.length);
            //console.log('tagsFiltered Array: ',tagsFiltered, tagsFiltered.length);
            console.log(callback);
        }
    }
  • Как получить доступ к window.location.href в новом созданном окне?

    den0820
    @den0820 Автор вопроса
    что подразумевается под local storage?