controls-live.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. 'use strict';
  2. require('jsdom-global')();
  3. const chai = require('chai');
  4. const dom = require('../mock/dom');
  5. const mixitup = require('../../dist/mixitup.js');
  6. chai.use(require('chai-shallow-deep-equal'));
  7. chai.use(require('chai-as-promised'));
  8. describe('Controls', () => {
  9. describe('Live', () => {
  10. let frag = document.createDocumentFragment();
  11. let container = dom.getContainer();
  12. let filterControls = dom.getFilterControls();
  13. let sortControls = dom.getSortControls();
  14. container.insertBefore(filterControls, container.children[0]);
  15. container.insertBefore(sortControls, filterControls);
  16. frag.appendChild(container);
  17. let mixer = mixitup(container, {
  18. controls: {
  19. scope: 'local',
  20. live: true
  21. }
  22. }, frag);
  23. after(() => mixer.destroy());
  24. it('should detect nested controls and set active states upon instantiation', () => {
  25. let filter = filterControls.querySelector('[data-filter="all"]');
  26. chai.assert.isOk(filter.matches('.mixitup-control-active'));
  27. });
  28. it('should allow new filter controls to be added', () => {
  29. let control = dom.getFilterControl();
  30. let totalMatching = container.querySelectorAll('.category-d').length;
  31. filterControls.appendChild(control);
  32. control.click();
  33. let state = mixer.getState();
  34. chai.assert.equal(state.activeFilter.selector, '.category-d');
  35. chai.assert.equal(state.totalShow, totalMatching);
  36. chai.assert.isOk(control.matches('.mixitup-control-active'));
  37. });
  38. it('should allow new toggle controls to be added', () => {
  39. let control = dom.getToggleControl();
  40. let totalMatching = container.querySelectorAll('.category-b, .category-d').length;
  41. filterControls.appendChild(control);
  42. control.click();
  43. let state = mixer.getState();
  44. chai.assert.equal(state.activeFilter.selector, '.category-d, .category-b');
  45. chai.assert.equal(state.totalShow, totalMatching);
  46. chai.assert.isOk(control.matches('.mixitup-control-active'));
  47. });
  48. it('should allow new sort controls to be added', () => {
  49. let control = dom.getSortControl();
  50. sortControls.appendChild(control);
  51. control.click();
  52. let state = mixer.getState();
  53. chai.assert.equal(state.activeSort.sortString, 'views:desc');
  54. chai.assert.isOk(state.activeSort.next);
  55. chai.assert.equal(state.activeSort.next.sortString, 'published:asc');
  56. chai.assert.isOk(control.matches('.mixitup-control-active'));
  57. });
  58. it ('should allow a single set of filter controls to control multiple mixer instance simultanously', () => {
  59. let frag = document.createDocumentFragment();
  60. let container1 = dom.getContainer();
  61. let container2 = dom.getContainer();
  62. let controls = dom.getFilterControls();
  63. let config = {
  64. controls: {
  65. live: true
  66. }
  67. };
  68. frag.appendChild(controls);
  69. frag.appendChild(container1);
  70. frag.appendChild(container2);
  71. let mixer1 = mixitup(container1, config, frag);
  72. let mixer2 = mixitup(container2, config, frag);
  73. after(() => {
  74. mixer1.destroy();
  75. mixer2.destroy();
  76. });
  77. let filter = controls.querySelector('[data-filter=".category-a"]');
  78. filter.click();
  79. chai.assert.equal(mixer1.getState().activeFilter.selector, '.category-a');
  80. chai.assert.equal(mixer2.getState().activeFilter.selector, '.category-a');
  81. chai.assert.isOk(filter.matches('.mixitup-control-active'));
  82. });
  83. it ('should restrict control clicks to only those matching is a control selector is defined', () => {
  84. let frag = document.createDocumentFragment();
  85. let container = dom.getContainer();
  86. let controls = dom.getFilterControls();
  87. let config = {
  88. controls: {
  89. live: true
  90. },
  91. selectors: {
  92. control: '.mixitup-control-restrict'
  93. }
  94. };
  95. frag.appendChild(controls);
  96. frag.appendChild(container);
  97. let mixer = mixitup(container, config, frag);
  98. after(() => {
  99. mixer.destroy();
  100. });
  101. let filter1 = controls.querySelector('[data-filter=".category-a"]');
  102. filter1.classList.add('mixitup-control-restrict');
  103. filter1.click();
  104. let filter2 = controls.querySelector('[data-filter=".category-b"]');
  105. filter2.click();
  106. chai.assert.equal(mixer.getState().activeFilter.selector, '.category-a');
  107. chai.assert.isOk(filter1.matches('.mixitup-control-active'));
  108. chai.assert.isNotOk(filter2.matches('.mixitup-control-active'));
  109. });
  110. });
  111. });