diff --git a/public/src/modules/categorySearch.js b/public/src/modules/categorySearch.js new file mode 100644 index 0000000000..ad20fcce24 --- /dev/null +++ b/public/src/modules/categorySearch.js @@ -0,0 +1,44 @@ +'use strict'; + +define('categorySearch', function () { + var categorySearch = {}; + + categorySearch.init = function (el) { + if (utils.isTouchDevice()) { + return; + } + var searchEl = el.find('[component="category-selector-search"]'); + var categoryEls = el.find('[component="category/list"] [data-cid]'); + el.on('show.bs.dropdown', function () { + function updateList() { + var val = searchEl.find('input').val().toLowerCase(); + var noMatch = true; + categoryEls.each(function () { + var liEl = $(this); + var isMatch = liEl.attr('data-name').toLowerCase().indexOf(val) !== -1; + if (noMatch && isMatch) { + noMatch = false; + } + liEl.toggleClass('hidden', !isMatch); + }); + + el.find('[component="category/list"] [component="category/no-matches"]').toggleClass('hidden', !noMatch); + } + el.find('.dropdown-toggle').addClass('hidden'); + searchEl.removeClass('hidden').on('click', function (ev) { + ev.preventDefault(); + ev.stopPropagation(); + }); + searchEl.find('input').val('').focus().on('keyup', updateList); + updateList(); + }); + + el.on('hide.bs.dropdown', function () { + el.find('.dropdown-toggle').removeClass('hidden'); + searchEl.addClass('hidden').off('click'); + searchEl.find('input').off('keyup'); + }); + }; + + return categorySearch; +}); diff --git a/public/src/modules/categorySelector.js b/public/src/modules/categorySelector.js index 88b505ed1b..f9117630ba 100644 --- a/public/src/modules/categorySelector.js +++ b/public/src/modules/categorySelector.js @@ -1,6 +1,6 @@ 'use strict'; -define('categorySelector', ['benchpress', 'translator'], function (Benchpress, translator) { +define('categorySelector', ['benchpress', 'translator', 'categorySearch'], function (Benchpress, translator, categorySearch) { var categorySelector = {}; var selectedCategory; var el; @@ -14,29 +14,7 @@ define('categorySelector', ['benchpress', 'translator'], function (Benchpress, t callback(selectedCategory); }); - var searchEl = el.find('[component="category-selector-search"]'); - var categoryEls = el.find('.category-dropdown-menu .category'); - el.on('show.bs.dropdown', function () { - function updateList() { - var val = searchEl.find('input').val().toLowerCase(); - categoryEls.each(function () { - var liEl = $(this); - liEl.toggleClass('hidden', liEl.attr('data-name').toLowerCase().indexOf(val) === -1); - }); - } - - searchEl.removeClass('hidden').on('click', function (ev) { - ev.preventDefault(); - ev.stopPropagation(); - }); - searchEl.find('input').val('').on('keyup', updateList); - updateList(); - }); - - el.on('hide.bs.dropdown', function () { - searchEl.addClass('hidden').off('click'); - searchEl.find('input').off('keyup'); - }); + categorySearch.init(el); }; categorySelector.getSelectedCategory = function () { diff --git a/public/src/modules/topicList.js b/public/src/modules/topicList.js index 4c66636422..91dc3ac04c 100644 --- a/public/src/modules/topicList.js +++ b/public/src/modules/topicList.js @@ -1,6 +1,11 @@ 'use strict'; -define('topicList', ['forum/infinitescroll', 'handleBack', 'topicSelect'], function (infinitescroll, handleBack, topicSelect) { +define('topicList', [ + 'forum/infinitescroll', + 'handleBack', + 'topicSelect', + 'categorySearch', +], function (infinitescroll, handleBack, topicSelect, categorySearch) { var TopicList = {}; var templateName = ''; @@ -156,6 +161,8 @@ define('topicList', ['forum/infinitescroll', 'handleBack', 'topicSelect'], funct return cids; } + categorySearch.init($('[component="category/dropdown"]')); + $('[component="category/dropdown"]').on('hidden.bs.dropdown', function () { var cids = getSelectedCids(); var changed = ajaxify.data.selectedCids.length !== cids.length; diff --git a/src/meta/js.js b/src/meta/js.js index bc3398656b..b59167718d 100644 --- a/src/meta/js.js +++ b/src/meta/js.js @@ -66,6 +66,7 @@ JS.scripts = { 'public/src/modules/topicSelect.js', 'public/src/modules/topicList.js', 'public/src/modules/categorySelector.js', + 'public/src/modules/categorySearch.js', 'public/src/modules/share.js', 'public/src/modules/alerts.js', 'public/src/modules/taskbar.js',