examples.mediagallery.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221
  1. (function ($) {
  2. $("#switch").click(function () {
  3. if ($(this).hasClass('btn-default')) {
  4. $("#caret").css('transform', 'rotate(180deg)')
  5. $(this).removeClass('btn-default');
  6. $(this).addClass('btn-primary');
  7. $("#filter-content").fadeIn();
  8. } else {
  9. $("#caret").css('transform', 'rotate(0deg)')
  10. $(this).addClass('btn-default');
  11. $(this).removeClass('btn-primary');
  12. $("#filter-content").fadeOut();
  13. }
  14. });
  15. /*
  16. Thumbnail: Select
  17. */
  18. $('.mg-option input[type=checkbox]').on('change', function (ev) {
  19. var wrapper = $(this).parents('.thumbnail');
  20. if ($(this).is(':checked')) {
  21. wrapper.addClass('thumbnail-selected');
  22. } else {
  23. wrapper.removeClass('thumbnail-selected');
  24. }
  25. });
  26. $('.mg-option input[type=checkbox]:checked').trigger('change');
  27. /*
  28. Toolbar: Select All
  29. */
  30. $('#mgSelectAll').on('click', function (ev) {
  31. ev.preventDefault();
  32. var $this = $(this),
  33. $label = $this.find('> span');
  34. $checks = $("input[name='delCheck']")
  35. if ($this.attr('data-all-selected')) {
  36. $this.removeAttr('data-all-selected');
  37. $checks.prop('checked', false).trigger('change');
  38. $label.html($label.data('all-text'));
  39. } else {
  40. $this.attr('data-all-selected', 'true');
  41. $checks.prop('checked', true).trigger('change');
  42. $label.html($label.data('none-text'));
  43. }
  44. });
  45. /*
  46. Image Preview: Lightbox
  47. */
  48. $('.thumb-preview a[href]').magnificPopup({
  49. type: 'image',
  50. closeOnContentClick: true,
  51. mainClass: 'mfp-img-mobile',
  52. image: {
  53. verticalFit: true
  54. }
  55. });
  56. $('.thumb-preview .mg-zoom').on('click.lightbox', function (ev) {
  57. ev.preventDefault();
  58. $(this).closest('.thumb-preview').find('a.thumb-image').triggerHandler('click');
  59. });
  60. /*
  61. Thumnail: Dropdown Options
  62. */
  63. $('.thumbnail .mg-toggle').parent()
  64. .on('show.bs.dropdown', function (ev) {
  65. $(this).closest('.mg-thumb-options').css('overflow', 'visible');
  66. })
  67. .on('hidden.bs.dropdown', function (ev) {
  68. $(this).closest('.mg-thumb-options').css('overflow', '');
  69. });
  70. $('.thumbnail').on('mouseenter', function () {
  71. var toggle = $(this).find('.mg-toggle');
  72. if (toggle.parent().hasClass('open')) {
  73. toggle.dropdown('toggle');
  74. }
  75. });
  76. var destination = $("[data-sort-destination]");
  77. var $grid;
  78. /*$(window).load(function () {
  79. });*/
  80. function Filter() {
  81. var $this = $(this);
  82. var searchResult = qsRegex ? $this.text().match(qsRegex) : true;
  83. var buttonResult = buttonFilter ? $this.is(buttonFilter) : true;
  84. var comboResult = comboFilter ? $this.is(comboFilter) : true;
  85. return searchResult && buttonResult && comboResult;
  86. }
  87. var buttonFilters = {};
  88. var buttonFilter;
  89. // quick search regex
  90. var qsRegex;
  91. var comboFilter;
  92. var $quicksearch = $('#quicksearch').keyup(debounce(function () {
  93. qsRegex = new RegExp($quicksearch.val(), 'gi');
  94. $grid.isotope({
  95. filter: Filter
  96. });
  97. }));
  98. // debounce so filtering doesn't happen every millisecond
  99. function debounce(fn, threshold) {
  100. var timeout;
  101. threshold = threshold || 100;
  102. return function debounced() {
  103. clearTimeout(timeout);
  104. var args = arguments;
  105. var _this = this;
  106. function delayed() {
  107. fn.apply(_this, args);
  108. }
  109. timeout = setTimeout(delayed, threshold);
  110. };
  111. }
  112. function concatValues(obj) {
  113. var value = '';
  114. for (var prop in obj) {
  115. value += obj[prop];
  116. }
  117. return value;
  118. }
  119. $('.button-group').each(function (i, buttonGroup) {
  120. var $buttonGroup = $(buttonGroup);
  121. $buttonGroup.on('click', 'a', function () {
  122. $buttonGroup.find('.active').removeClass('active');
  123. $(this).parents('li').addClass('active');
  124. });
  125. });
  126. $('.filters').on('click', '.button', function () {
  127. var $this = $(this);
  128. // get group key
  129. var $buttonGroup = $this.parents('.button-group');
  130. var filterGroup = $buttonGroup.attr('data-filter-group');
  131. // set filter for group
  132. buttonFilters[filterGroup] = $this.attr('data-filter');
  133. // combine filters
  134. buttonFilter = concatValues(buttonFilters);
  135. // Isotope arrange
  136. $grid.isotope({
  137. filter: Filter
  138. });
  139. });
  140. // store filter per group
  141. var filters = {};
  142. // do stuff when checkbox change
  143. $('#options').on('change', function (event) {
  144. var checkbox = event.target;
  145. var $checkbox = $(checkbox);
  146. var group = $checkbox.parents('.option-set').attr('data-group');
  147. // create array for filter group, if not there yet
  148. var filterGroup = filters[group];
  149. if (!filterGroup) {
  150. filterGroup = filters[group] = [];
  151. }
  152. // add/remove filter
  153. if (checkbox.checked) {
  154. // add filter
  155. filterGroup.push(checkbox.value);
  156. } else {
  157. // remove filter
  158. var index = filterGroup.indexOf(checkbox.value);
  159. filterGroup.splice(index, 1);
  160. }
  161. comboFilter = getComboFilter();
  162. $grid.isotope({
  163. filter: Filter
  164. });
  165. });
  166. function getComboFilter() {
  167. var combo = [];
  168. for (var prop in filters) {
  169. var group = filters[prop];
  170. if (!group.length) {
  171. // no filters in group, carry on
  172. continue;
  173. }
  174. // add first group
  175. if (!combo.length) {
  176. combo = group.slice(0);
  177. continue;
  178. }
  179. // add additional groups
  180. var nextCombo = [];
  181. // split group into combo: [ A, B ] & [ 1, 2 ] => [ A1, A2, B1, B2 ]
  182. for (var i = 0; i < combo.length; i++) {
  183. for (var j = 0; j < group.length; j++) {
  184. var item = combo[i] + group[j];
  185. nextCombo.push(item);
  186. }
  187. }
  188. combo = nextCombo;
  189. }
  190. var comboFilter = combo.join(', ');
  191. return comboFilter;
  192. }
  193. }(jQuery));