1//var $grid; 2(function ($) { 3 $(function () { 4 jQuery(function ($) { 5 // use jQuery code inside this to avoid "$ is not defined" error 6 var deviceAgent = navigator.userAgent.toLowerCase(); 7 8 var isTouchDevice = 9 deviceAgent.match(/(iphone|ipod|ipad)/) || 10 deviceAgent.match(/(android)/) || 11 deviceAgent.match(/(iemobile)/) || 12 deviceAgent.match(/iphone/i) || 13 deviceAgent.match(/ipad/i) || 14 deviceAgent.match(/ipod/i) || 15 deviceAgent.match(/blackberry/i) || 16 deviceAgent.match(/bada/i); 17 18 if (isTouchDevice) { 19 var clickEvent = "touchstart", 20 mouseDownEvent = "touchstart", 21 mouseUpEvent = "touchend", 22 mouseMoveEvent = "touchmove"; 23 } else { 24 var clickEvent = "click", 25 mouseDownEvent = "mousedown", 26 mouseUpEvent = "mouseup", 27 mouseMoveEvent = "mousemove"; 28 } 29 30 $(document).ready(function (e) { 31 /*----------------------------desactive le repositionnement absolute------------------------------------------------------------ */ 32 Isotope.Item.prototype._create = function () { 33 // assign id, used for original-order sorting 34 this.id = this.layout.itemGUID++; 35 // transition objects 36 this._transn = { 37 ingProperties: {}, 38 clean: {}, 39 onEnd: {}, 40 }; 41 this.sortData = {}; 42 }; 43 44 Isotope.Item.prototype.layoutPosition = function () { 45 this.emitEvent("layout", [this]); 46 }; 47 48 Isotope.prototype.arrange = function (opts) { 49 // set any options pass 50 this.option(opts); 51 this._getIsInstant(); 52 // just filter 53 this.filteredItems = this._filter(this.items); 54 // flag for initalized 55 this._isLayoutInited = true; 56 }; 57 58 // layout mode that does not position items 59 Isotope.LayoutMode.create("none"); 60 /*----------------------------desactive le repositionnement absolute------------------------------------------------------------ */ 61 62 var bodyPage = $("body"); 63 var button = $(".actualite_loadmore"); 64 var reset_filters = $(".reset-filters"); 65 //get parameter url 66 function GetURLParameter(sParam) { 67 var sPageURL = window.location.search.substring(1); 68 var sURLVariables = sPageURL.split("&"); 69 for (var i = 0; i < sURLVariables.length; i++) { 70 var sParameterName = sURLVariables[i].split("="); 71 if (sParameterName[0] == sParam) { 72 return sParameterName[1]; 73 } 74 } 75 } 76 var filters = {}; 77 78 function postFilter(gridCible, itemSelectorDyn) { 79 var gridCible = gridCible; 80 var itemSelectorDynamique = itemSelectorDyn; 81 var buttonFilter; 82 $grid = $(gridCible).isotope( 83 { 84 // options 85 itemSelector: itemSelectorDynamique, 86 layoutMode: "none", 87 sortBy: "validEvent", 88 transitionDuration: "0", 89 getSortData: { 90 validEvent: function (element) { 91 return element.classList.contains("validEvent") ? -1 : 1; 92 }, 93 }, 94 filter: function () { 95 var $this = $(this); 96 //var searchResult = qsRegex ? $this.text().match( qsRegex ) : true; 97 var buttonResult = buttonFilter ? $this.is(buttonFilter) : true; 98 //return searchResult && buttonResult; 99 return buttonResult; 100 }, 101 }, 102 function ($changedItems, instance) { 103 //console.log('instance'); 104 instance.$allAtoms 105 .filter(".isotope-hidden") 106 .removeClass("is-filtered"); 107 instance.$filteredAtoms.addClass("is-filtered"); 108 }, 109 ); 110 111 // isotope instance 112 var iso = $grid.data("isotope"); 113 114 $grid.isotope("on", "layoutComplete", function () { 115 // add/remove odd class 116 $.each(iso.filteredItems, function (i, item) { 117 //var method = i % 2 ? "removeClass" : "addClass"; 118 //$(item.element)[method]("odd"); 119 var methodEven; 120 var methodOdd; 121 if (i % 2 == 0) { 122 methodOdd = "addClass"; 123 $(item.element)[methodOdd]("odd"); 124 methodEven = "removeClass"; 125 $(item.element)[methodEven]("even"); 126 } else { 127 methodOdd = "removeClass"; 128 $(item.element)[methodOdd]("odd"); 129 methodEven = "addClass"; 130 $(item.element)[methodEven]("even"); 131 } 132 }); 133 window.laePage.documentSize(); 134 //scrollTo($("#media-filter-bar"));
135 }); 136 137 $shoWFilters = $(".filters").on( 138 clickEvent + " keydown", 139 "button[aria-controls]", 140 function (e) { 141 var that = $(this); 142 // Si clavier â seulement Escape 143 if (e.type === "keydown") { 144 switch (e.key) { 145 /*case "Enter": 146 if (document.activeElement === nav) { 147 e.preventDefault(); 148 toggleMenu(); 149 } 150 break; 151 */ 152 case "Escape": 153 if (that.parent().hasClass("listeFiltreOpen")) { 154 that.parent().removeClass("listeFiltreOpen"); 155 } 156 break; 157 158 default: 159 return; 160 } 161 } else { 162 that.parent().toggleClass("listeFiltreOpen"); 163 } 164 }, 165 ); 166 $filters = $(".filters").on( 167 clickEvent + " keydown", 168 ".btn", 169 function (e) { 170 var that = $(this); 171 // Si clavier â seulement Escape 172 if (e.type === "keydown") { 173 switch (e.key) { 174 /*case "Enter": 175 if (document.activeElement === nav) { 176 e.preventDefault(); 177 toggleMenu(); 178 } 179 break; 180 */ 181 case "Escape": 182 if (that.parent().parent().hasClass("listeFiltreOpen")) { 183 that.parent().parent().removeClass("listeFiltreOpen"); 184 } 185 break; 186 187 default: 188 return; 189 } 190 } else { 191 //filtrage combinatoire 192 manageButton($(this)); 193 194 var comboFilter = getComboFilter(filters); 195 //$grid.isotope({ filter: comboFilter }); 196 //var sortValue = comboFilter ? 'validEvent' : 'original-order'; 197 $grid.isotope({ 198 filter: comboFilter, 199 sortBy: "validEvent", 200 transitionDuration: "0", 201 }); 202 203 //filtrage simple 204 //var filterValue = $( this ).attr('data-filter'); 205 //if($( this ).hasClass('is-checked')) { 206 // console.log('check'); 207 // filterValue = '*'; 208 //} 209 //$grid.isotope({ filter: filterValue }); 210 //manageButtonSimple($(this)); 211 } 212 }, 213 ); 214 $outsideFilterList = $(document).on(clickEvent + " keydown", function (e) { 215 var that = $(this); 216 var $target = $(".listeFiltreOpen"); 217 // Si clavier â seulement Escape 218 if (e.type === "keydown") { 219 switch (e.key) { 220 case "Escape": 221 if (!$target.is(event.target) && $target.has(event.target).length === 0) { 222 $target.removeClass("listeFiltreOpen"); 223 } 224 break; 225 default: 226 return; 227 } 228 } else { 229 if (!$target.is(event.target) && $target.has(event.target).length === 0) { 230 $target.removeClass("listeFiltreOpen"); 231 } 232 } 233 }, 234 ); 235 var dataFilter = GetURLParameter("data-filter"); 236 if (dataFilter) { 237 var that = $("[data-filter='." + dataFilter + "']"); 238 manageButton(that); 239 //var comboFilter = getComboFilter(filters); 240 //$grid.isotope({ filter: comboFilter }); 241 $grid.isotope({ 242 filter: "." + dataFilter, 243 transitionDuration: "0", 244 }); 245 $(".actualite_loadmore").trigger(clickEvent); 246 } 247 248 //scroll to filter content 249 /*function scrollTo(element) { 250 console.log('scroll'); 251 var offset = element.offset(); 252 console.log(offset.top); 253 window.scroll({ 254 //behavior: 'smooth', 255 left: 0, 256 top: offset.top 257 }); 258 }*/ 259 260 function getComboFilter(filters) { 261 var i = 0; 262 var comboFilters = []; 263 var message = []; 264 265 for (var prop in filters) { 266 message.push(filters[prop].join(" ")); 267 var filterGroup = filters[prop]; 268 // skip to next filter group if it doesn't have any values 269 if (!filterGroup.length) { 270 continue; 271 } 272 if (i === 0) { 273 // copy to new array 274 comboFilters = filterGroup.slice(0); 275 } else { 276 var filterSelectors = []; 277 // copy to fresh array 278 var groupCombo = comboFilters.slice(0); // [ A, B ] 279 // merge filter Groups 280 for (var k = 0, len3 = filterGroup.length; k < len3; k++) { 281 for (var j = 0, len2 = groupCombo.length; j < len2; j++) { 282 filterSelectors.push(groupCombo[j] + filterGroup[k]); // [ 1, 2 ] 283 } 284 } 285 // apply filter selectors to combo filters for next group 286 comboFilters = filterSelectors; 287 } 288 i++; 289 } 290 291 var comboFilter = comboFilters.join(", "); 292 return comboFilter; 293 } 294 295 function manageButtonSimple($button) { 296 if (!$button.hasClass("is-checked")) { 297 $(".listFiltre").each(function (i, buttonGroup) { 298 $(this).find(".is-checked").removeClass("is-checked"); 299 }); 300 } 301 $($button).toggleClass("is-checked"); 302 } 303 304 function manageButton($button) { 305 // get group key 306 var $buttonGroup = $button.parents(".button-group"); 307 var group = $buttonGroup.attr("data-filter-group"); 308 309 // create array for filter group, if not there yet 310 var filterGroup = filters[group]; 311 if (!filterGroup) { 312 filterGroup = filters[group] = []; 313 } 314 315 var index = $.inArray($button.attr("data-filter"), filterGroup); 316 if (!$button.is(".is-checked")) { 317 if (index === -1) { 318 // add filter to group 319 filters[group].push($button.attr("data-filter")); 320 } 321 } else { 322 filters[group].splice(index, 1); 323 // if unchecked the last box, check the all 324 if (!$button.siblings(".is-checked").length) { 325 delete filters[group]; 326 } 327 } 328 $button.toggleClass("is-checked"); 329 330 var nbChecked = $('[data-filter-group="' + group + '"]').find( 331 ".is-checked", 332 ).length; 333 if (nbChecked > 0) { 334 $(".filter-" + group) 335 .find(".nbChecked") 336 .text("(" + nbChecked + ")"); 337 reset_filters.removeClass("hidden"); 338 reset_filters.on(clickEvent, function (e) { 339 e.preventDefault(); 340 resetFilters(); 341 }); 342 } else { 343 $(".filter-" + group) 344 .find(".nbChecked") 345 .text(""); 346 reset_filters.addClass("hidden"); 347 } 348 } 349 function resetFilters() { 350 filters = {}; 351 $(".btn").removeClass("is-checked"); 352 353 var comboFilter = getComboFilter(filters); 354 $grid.isotope({ 355 filter: comboFilter, 356 sortBy: "validEvent", 357 transitionDuration: "0", 358 }); 359 $(".listFiltre").find(".nbChecked").text(""); 360 reset_filters.addClass("hidden"); 361 } 362 $(".btnDrpdw").on(clickEvent, function () { 363 $(this).parent().toggleClass("filtreVisible"); 364 }); 365 } 366 if ($(".grid--media").length) { 367 setTimeout(delay, 1000); 368 } 369 function delay() { 370 new postFilter(".grid--media", "article"); 371 } 372 }); 373 });
374 }); 375})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.