Munzee Map Filters

New way of catagorized filters

当前为 2021-11-01 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Munzee Map Filters
  3. // @namespace http://tampermonkey.net/
  4. // @version 21.11.01.001
  5. // @description New way of catagorized filters
  6. // @author CzPeet
  7. // @match https://www.munzee.com/specials*
  8. // @match https://www.munzee.com/map*
  9. // @icon https://www.google.com/s2/favicons?domain=munzee.com
  10. // @update https://greasyfork.org/en/scripts/433078-munzee-map-filters
  11. // @grant none
  12. // ==/UserScript==
  13.  
  14. $('head').append($("<style> .filterimg{height: 32px; margin-left: 3px; margin-right: 3px;} .filterdisabled{filter: grayscale(100%); opacity: 0.7;} </style>"));
  15.  
  16. var isSpecialMapSite = document.location.href.includes('specials');
  17. var isMapLoading = false;
  18. var imgPrefix = "https://munzee.global.ssl.fastly.net/images/pins/";
  19. var filterImgsContainer = null;
  20. var filterIMGS = [];
  21. var rawFilterIMGS = [];
  22.  
  23. var categoryMainImages = ["otterpup", "theunicorn", "retiredunicorn", "icedragon", "poseidon", "flatrob", "beachflatrob", "phantomflatrob", "tuli", "zombietuli", "nomad", "sirprizewheel", "vikerkaar", "diamond", "spyderbot", "gardengnome", "skyland10", "boxjellyfish", "bones", "fire", "poivirtualgarden", "zodiac-sun", "chinese_zodiac", "egyptianzodiacsun", "virtual_rainbow", "longsword", "mystery", "walkietalkiewatch", "qrewzee", "quizvirtual"];
  24. var categorizedFilterOrder = ["Seasonals", "Mythologicals", "RetiredMyths", "AlternaMyths", "ModernMyths", "FlatFriends", "FancyFlats", "PhantomFlats", "PouchCreations", "ZombiePouchs", "Nomads", "Gaming", "FunfinityStones", "Jewels", "MechZBouncers", "GardenGnomes", "Destinations", "EvoBouncers", "Evoluations", "Scatters", "Places", "WesternZodiacs", "ChineseZodiacs", "EgyptianZodiacs", "ColouredVirtuals", "ClanWeapons", "Mysteries", "ZeecretWeapons", "Misc", "UnCategorized"];
  25. var categorizedFilterObject = {};
  26.  
  27. categorizedFilterObject.Seasonals=["otterpup","giraffecalf","foal","babyraccoon","candycornpiglet"];
  28. categorizedFilterObject.Mythologicals=["theunicorn","hippocampunicorn","battleunicorn","candycornunicorn","leprechaun","dwarfleprechaun","goblinleprechaun","leprecorn","dragon","chinesedragon","wyverndragon","midnightdragon","yeti","reptoidyeti","lycanthropeyeti","monsteryeti","faun","centaurfaun","krampusfaun","hydra","cerberushydra","cthulhuhydra","pegasus","alicornpegasus","griffinpegasus","nightmarepegasus","cyclops","balorcyclops","minotaurcyclops","mermaid","hotspringmermaid","melusinemermaid","fairy","dryadfairy","wildfirefairy","banshee","harpybanshee","witchbanshee","nymph","elfnymph","vampirenymph"];
  29. categorizedFilterObject.RetiredMyths=["retiredunicorn","retiredleprechaun","retireddragon","retiredyeti","retiredfaun","retiredhydra","retiredpegasus","retiredcyclops","retiredmermaid","retiredfairy","retiredbanshee","retirednymph"];
  30. categorizedFilterObject.AlternaMyths=["cherub","chimera","fairygodmother","firepegasus","gnomeleprechaun","gorgon","icedragon","motherearth","ogre","rainbowunicorn","sasquatchyeti","siren"];
  31. categorizedFilterObject.ModernMyths=["aphrodite","glasses","shell-phone","poseidon","trident","lifebuoy","hades","bident","firestarter"];
  32. categorizedFilterObject.FlatFriends=["flatrob","flatmatt","flatlou","flathammock","flatdhs","flatdiscgolfbasket","flatflashlight"];
  33. categorizedFilterObject.FancyFlats=["beachflatrob","coldflatrob","tuxflatrob","face-offflatmatt","footyflatmatt","matt'erupflatmatt","internationellesflatlou","polkadotflatlou","teamgbflatlou"];
  34. categorizedFilterObject.PhantomFlats=["phantomflatrob","phantomflatmatt","phantomflatlou"];
  35. categorizedFilterObject.PouchCreations=["tuli","tuliferno","tulimber","gleamingtuli","gleamingtuliferno","gleamingtulimber","vesi","vesial","vesisaur","gleamingvesi","gleamingvesial","gleamingvesisaur","muru","muruchi","murutain","gleamingmuru","gleamingmuruchi","gleamingmurutain","mitmegu","jootmegu","lokemegu","rohimegu","murinmegu","ohkmegu","urgasmegu","koobas","kartus","kabuhirm","pimedus","puffle","puflawn","pufrain","magnetus","elekjoud","elekter","elektrivool","hadavale"];
  36. categorizedFilterObject.ZombiePouchs=["zombietuli","zombievesi","zombiemuru","zombiepimedus","zombiepuffle","zombiemagnetus","zombieelekter"];
  37. categorizedFilterObject.Nomads=["nomad","nomadvirtual","nomadmystery","jewelthiefnomad","bellhopnomad","piratenomad","warriornomad","travelernomad","seasonalnomad","virtualflatnomad","coupechampionnomad","virtualzeecretagentnomad","zeecretagentnomad","virtualgamingnomad","gamingnomad","virtualjewelthiefnomad","virtualwarriornomad","virtualbellhopnomad","jason4zeesnomad","killermask"];
  38. categorizedFilterObject.Gaming=["surprise","prizewheel","scatter","rockpaperscissors","bowlingball","urbanfit","joystickphysical","joystickvirtual","sirprizewheel","maplechessset","walnutchessset"];
  39. categorizedFilterObject.FunfinityStones=["akvamariin","ametust","oniks","roosa","rubiin","safiir","smaragd","teemant","topaas","tsitriin","vikerkaar"];
  40. categorizedFilterObject.Jewels=["diamond","ruby","virtualemerald","aquamarinemunzee","topaz","virtual_amethyst","pinkdiamond","virtualsapphire","virtualcitrine","virtualonyx"];
  41. categorizedFilterObject.MechZBouncers=["spyderbot","arcticlasershark","botwurst","carafeborg","cybersaurusrex","cyborgsanta","dronut","fr057y","geologgersrumbot","gingermechman","goldenlasershark","goldncoinsrumbot","kingc0g","lasershark","mechanic4k3","monk3y","mumm33","negsrumbot","prim8","rud01ph","s4rc0ph4gus","sc4rab","scgsrumbot","steinbot","krampbot","31f","reindroid"];
  42. categorizedFilterObject.GardenGnomes=["gardengnome","archerygardengnome","gnomearcheryhood","astronautgardengnome","gnomeastronauthelmet","aussieexplorergardengnome","gnomeexplorerhat","awardshowgardengnome","10thmunzeebirthdayhat","baseballgardengnome","gnomecatcherscap","basketballgardengnome","gnomenogginnet","cricketgardengnome","gnomeclubcap","footballgardengnome","gnometouchdowntopper","goldminergardengnome","gnomeminerhat","icehockeygardengnome","gnomehockeyhelmet","queen'sguardsmangardengnome","gnomebearskinhat","runninggardengnome","gnomeheadphones","skateboardinggardengnome","gnomeheelfliphat","soccergardengnome","gnomeheaderhat","cyclinggardengnome","cyclingcasquette"];
  43. categorizedFilterObject.Destinations=["vacationcondo","timesharemunzee","skyland","skyland1","skyland2","skyland3","skyland4","skyland5","skyland6","skyland7","skyland8","skyland9","skyland10","treehouse","treehouse1","treehouse2","treehouse3","treehouse4","treehouse5","treehouse6","treehouse7","treehouse8","treehouse9","treehouse10","3starresort","4starresort","5starresort","motel","1starmotel","2starmotel","3starmotel","hotel","2starhotel","3starhotel","4starhotel"];
  44. categorizedFilterObject.EvoBouncers=["boxjellyfish","goldenjellyfish","pb&jellyfish","limebutterfly","monarchbutterfly","morphobutterfly","poisondartfrog","tomatofrog","treefrog","seaturtle","snappingturtle","taekwondotortoise","honeybee","queenbee","wallabee"];
  45. categorizedFilterObject.Evoluations=["tomatoseed","tomatoplant","tomato","cornseed","cornstalk","earofcorn","carrotseed","carrotplant","carrot","peasseed","peasplant","peas","goldencarrotseed","goldencarrotplant","goldencarrot","calf","cow","milk","piglet","pig","bacon","colt","racehorse","championshiphorse","chick","chicken","eggs","leantoshed","gardenshed","barn","hoe","plow","tractor","farmer","farmerandwife","family","pottedplant","garden","field","seaweed","fish","shark","canoe","motorboat","submarine","egg","dinosaur","bones","firstwheel","penny-farthingbike","musclecar","lioncub","lion","kingofthejungle","safaritruck","safarivan","safaribus","coin","bagofcoins","treasurechest","planulalarva","polyp","polypwithbulbs","ephyralarva","butterflyegg","caterpillar","chrysalis","hatchedchrysalis","frogegg","tadpole","pollywog","froglet","turtleegg","turtlehatchling","juvenileturtle","adultturtle","beeeggs","beelarvae","beepupae","emptyhoneycomb","carnationseed","carnationgermination","carnationgrowth","carnationbud","pinkcarnationblossom","redcarnationblossom","violetcarnationblossom","whitecarnationblossom","yellowcarnationblossom","lilyseed","lilygermination","lilygrowth","lilybud","pinklilyblossom","violetlilyblossom","whitelilyblossom","tulipseed","tulipgermination","tulipgrowth","tulipbud","bluetulipblossom","pinktulipblossom","whitetulipblossom","roseseed","rosegermination","rosegrowth","rosebud","redroseblossom","violetroseblossom","whiteroseblossom","yellowroseblossom"];
  46. categorizedFilterObject.Scatters=["fire","frozengreenie","waterdroplet","feather","goldenfeather","charge","tree","redapple","cherryblossom","peach","pear","pecan","acorn","deadbranch","cardinalfeather","blackhole","planet","spaceship","lostkey","lostsock","meteor","satellite","scattered","boulder","flamingarrow","sc4rab","ankhartifact","ouroborosartifact","djedartifact","scarabartifact","eyeofraartifact","shenartifact","canopicjarartifact","sesenartifact","wasscepterartifact","sistrumartifact","sistrumartifact","tyetartifact","eyeofhorusartifact","sweettreats","scgsresellerpackage","geologgersresellerpackage","gold'ncoinsresellerpackage","negsresellerpackage","cloverleaf","goldenclover","snowball","dossier","infraredvirtual","lasertrail1","lasertrail2","lasertrail3","pixelpresent","undercoveragent","liaisonagent","maplepawn","mapleknight","maplebishop","maplerook","maplequeen","mapleking","walnutpawn","walnutknight","walnutbishop","walnutrook","walnutqueen","walnutking","leapfrog","munch-man","runzeerob","goldcoin","fly","ghostzee","1stroll","bowling-1stroll","2ndroll","bowling-2ndroll","trickortreat","flamingpumpkin"];
  47. categorizedFilterObject.Places=["poiairport","poisports","poiuniversity","poimuseum","poiwildlife","poihistoricalplace","poilibrary","poifirstresponders","poifaithplace","poihospital","poipostoffice","poicemetery","poiuniqueattraction","poivirtualgarden","poicinema","poitransportation","poiplaypark","poibank","poibeach","poicampground","poigolf","poidrinkdepot","poipet","poientertainment"];
  48. categorizedFilterObject.WesternZodiacs=["aries","taurus","gemini","cancer","leo","virgo","libra","scorpio","sagittarius","capricorn","aquarius","pisces"];
  49. categorizedFilterObject.ChineseZodiacs=["ratchinesezodiac","oxchinesezodiac","tigerchinesezodiac","rabbitchinesezodiac","dragonchinesezodiac","snakechinesezodiac","horsechinesezodiac","goatchinesezodiac","monkeychinesezodiac","roosterchinesezodiac","dogchinesezodiac","pigchinesezodiac"];
  50. categorizedFilterObject.EgyptianZodiacs=["nile","amon-ra","osiris","thoth","horus","seth","anubis","sekhmet","bastet","mut"];
  51. categorizedFilterObject.ColouredVirtuals=["virtual_rainbow","virtual","virtual_timberwolf","virtual_silver","virtual_gray","virtual_black","virtual_orchid","virtual_wisteria","virtual_purple_mountains_majesty","virtual_violet","virtual_plum","virtual_blue_violet","virtual_blue","virtual_cadet_blue","virtual_periwinkle","virtual_cornflower","virtual_blue_green","virtual_pacific_blue","virtual_cerulean","virtual_robin_egg_blue","virtual_indigo","virtual_turquoise_blue","virtual_sea_green","virtual_granny_smith_apple","virtual_green","virtual_forest_green","virtual_asparagus","virtual_olive_green","virtual_yellow_green","virtual_green_yellow","virtual_spring_green","virtual_gold","virtual_yellow","virtual_goldenrod","virtual_dandelion","virtual_orange","virtual_burnt_orange","virtual_melon","virtual_pink","virtual_carnation_pink","virtual_mauvelous","virtual_salmon","virtual_tickle_me_pink","virtual_magenta","virtual_wild_strawberry","virtual_violet_red","virtual_red_violet","virtual_apricot","virtual_peach","virtual_macaroni_and_cheese","virtual_tan","virtual_burnt_sienna","virtual_bittersweet","virtual_red_orange","virtual_scarlet","virtual_red","virtual_brick_red","virtual_mahogany","virtual_chestnut","virtual_tumbleweed","virtual_raw_sienna","virtual_brown"];
  52. categorizedFilterObject.ClanWeapons=["mace","longsword","battleaxe","thehammer","crossbow","catapult","shield"];
  53. categorizedFilterObject.Mysteries=["mystery","firemystery","icemystery","earthmystery","watermystery","airmystery","electricmystery","voidmystery"];
  54. categorizedFilterObject.ZeecretWeapons=["briefcase","nightvisiongoggles","walkietalkiewatch","laserpen"];
  55. categorizedFilterObject.Misc=["munzee","owned","owned_virtual","captured","captured_virtual","maintenance","premium","trail","personal","eventindicator","virtual_trail","shamrock","event_trail","springseasonalmunzee","summerseasonalmunzee","fallseasonalmunzee","winterseasonalmunzee","temporaryvirtual","qrewzee","sleepzee","virtualshamrock","goldenticket","reseller","virtualreseller"];
  56. categorizedFilterObject.UnCategorized=[];
  57. var disabledFilterImgs = [];
  58.  
  59. function sleep(ms) {
  60. return new Promise(resolve => setTimeout(resolve, ms));
  61. }
  62.  
  63. async function restructureImages() {
  64.  
  65. //Wait until the progressbar is hidden
  66. if (isSpecialMapSite && ($("#map-box-special-loading").is(':visible')) ||
  67. !isSpecialMapSite && ($("#map-box-loading").is(':visible')))
  68. {
  69. return;
  70. }
  71.  
  72. //remove original filter_all button
  73. $('#filter_all').remove();
  74.  
  75. if (!isSpecialMapSite)
  76. {
  77. var inputbar = $('#inputbar');
  78. var filterimgsDiv = $('<div id="filterimgs"></div>');
  79. inputbar.append(filterimgsDiv);
  80. }
  81.  
  82. filterImgsContainer = $('#filterimgs');
  83. filterImgsContainer[0].addEventListener('mouseleave', deactivateFilterImages);
  84.  
  85. //Filters label removed
  86. if (isSpecialMapSite){
  87. filterImgsContainer.prev().remove();
  88. }
  89.  
  90. //Collect original filter images or create filter images from map
  91. filterIMGS = (isSpecialMapSite) ? filterImgsContainer[0].getElementsByClassName('filterimg') : createFilterImages(mapMarkers);
  92.  
  93. //Sort into Categories
  94. var filterHelper = CreateCategories();
  95.  
  96. //Reload the new layout
  97. filterImgsContainer.empty();
  98. filterImgsContainer.html(filterHelper);
  99. filterHelper = null;
  100.  
  101. //mainImages update needed after map action
  102. Array.from(document.getElementsByClassName('categoryDIV')).forEach(function(categDIV){
  103. updateMainImage(categDIV);
  104. });
  105.  
  106. //Add to all img the click eventListener
  107. Array.from(filterImgsContainer[0].getElementsByClassName('filterimg')).forEach(function(img) {
  108. img.addEventListener('click', FilterImgClick);
  109. img.setAttribute("style", "cursor:pointer");
  110. img.setAttribute("title", img.currentSrc.substring(img.currentSrc.lastIndexOf("/")+1,img.currentSrc.lastIndexOf(".")));
  111. });
  112.  
  113. //all mainImages stuffs
  114. Array.from(filterImgsContainer[0].getElementsByClassName('mainImage')).forEach(function(mainIMG){
  115. if (isSpecialMapSite)
  116. {
  117. mainIMG.setAttribute("style", "border: solid grey 1px; width:63px; padding-right:3px; padding-top:3px; cursor:pointer");
  118. }
  119. else
  120. {
  121. mainIMG.setAttribute("style", "border: solid grey 1px; width:53px; padding-right:3px; padding-top:3px; cursor:pointer");
  122. }
  123. mainIMG.addEventListener('mouseover', activateFilterImages);
  124. mainIMG.addEventListener('click', mainImageClick);
  125. });
  126.  
  127. //all categoryDIVs stuff
  128. Array.from(filterImgsContainer[0].getElementsByClassName('categoryDIV')).forEach(function(cDIV){
  129. cDIV.setAttribute("style", "display: none; border: solid grey 1px; padding-top: 5px; padding-bottom: 5px; width: 100%");
  130. cDIV.addEventListener('mouseleave', deactivateFilterImages);
  131. });
  132.  
  133. //refresh
  134. refreshMap();
  135. }
  136.  
  137. function CreateCategories()
  138. {
  139. //Div
  140. var mainImageDIV = document.createElement('DIV');
  141. mainImageDIV.setAttribute("id", "mainImageDIV");
  142.  
  143. var categName = "" ;
  144. var filterStructure = "";
  145. for (var o = 0; o<categorizedFilterOrder.length; o++)
  146. {
  147. categName = categorizedFilterOrder[o];
  148. var array = categorizedFilterObject[categName];
  149.  
  150. //Div
  151. var categDIV = document.createElement('DIV');
  152. categDIV.setAttribute("id", categName+"_Category");
  153. categDIV.setAttribute("class", "categoryDIV");
  154.  
  155. var addedAtLeatOne = false;
  156.  
  157. if (array.length > 0)
  158. {
  159. for (let a = 0; a < array.length; a++)
  160. {
  161. for (let i = 0; i < filterIMGS.length; i++)
  162. {
  163. if (filterIMGS[i].src == imgPrefix + array[a] + ".png")
  164. {
  165. categDIV.appendChild(filterIMGS[i]);
  166. addedAtLeatOne = true;
  167. }
  168. }
  169. }
  170. }
  171. else
  172. {
  173. for (let i = filterIMGS.length-1; i >= 0; i--)
  174. {
  175. categDIV.appendChild(filterIMGS[i]);
  176. addedAtLeatOne = true;
  177. }
  178. }
  179.  
  180. if (addedAtLeatOne)
  181. {
  182. filterStructure += categDIV.outerHTML;
  183.  
  184. //main image
  185. var categMainIMG = document.createElement('IMG');
  186. categMainIMG.setAttribute("id", categName+'_MainIMG');
  187. categMainIMG.setAttribute("title", categName);
  188. categMainIMG.setAttribute("class", "mainImage");
  189. categMainIMG.src = imgPrefix + categoryMainImages[o] + ".png";
  190.  
  191. mainImageDIV.appendChild(categMainIMG);
  192. }
  193. }
  194.  
  195. //Show/Hide all main image
  196. var allOrnothingIMG = document.createElement('IMG');
  197. allOrnothingIMG.setAttribute("id", 'ALL_MainIMG');
  198. allOrnothingIMG.setAttribute("title", 'Show/Hide All Category');
  199. allOrnothingIMG.setAttribute("class", "mainImage");
  200. allOrnothingIMG.src = imgPrefix + "business.png";
  201. mainImageDIV.appendChild(allOrnothingIMG);
  202.  
  203. filterStructure = mainImageDIV.outerHTML + filterStructure;
  204.  
  205. return filterStructure;
  206. }
  207.  
  208. function createFilterImages(markers)
  209. {
  210. rawFilterIMGS = [];
  211. let imgList = document.createDocumentFragment();
  212. for (var mID in markers)
  213. {
  214. let src = markers[mID]._element.outerHTML.split("&quot;")[1];
  215. if (!rawFilterIMGS.includes(src))
  216. {
  217. rawFilterIMGS.push(src);
  218. var img = document.createElement('IMG');
  219. img.setAttribute('class','filterimg');
  220. img.setAttribute('src',src);
  221. imgList.appendChild(img);
  222. }
  223. }
  224.  
  225. return imgList.children;
  226. }
  227.  
  228. function mainImageClick(sender)
  229. {
  230. //find related filterimgs
  231. var categDIV = document.getElementById(sender.target.getAttribute("title")+"_Category");
  232.  
  233. if (categDIV != null)
  234. {
  235. let imgs = categDIV.getElementsByTagName('img');
  236.  
  237. if (sender.target.classList.contains("filterdisabled"))
  238. {
  239. //Set own state
  240. sender.target.classList.remove("filterdisabled");
  241.  
  242. //Set the related filterimg states
  243. Array.from(imgs).forEach(function(img) {
  244. if (img.classList.contains("filterdisabled"))
  245. {
  246. enableFilter(img);
  247. }
  248. });
  249. }
  250. else
  251. {
  252. //Set own state
  253. sender.target.classList.add("filterdisabled");
  254.  
  255. //Set the related filterimg states
  256. Array.from(imgs).forEach(function(img) {
  257. if (!img.classList.contains("filterdisabled"))
  258. {
  259. disableFilter(img);
  260. }
  261. });
  262. }
  263. }
  264. else
  265. {
  266. let mimgs = document.getElementsByClassName('mainImage');
  267. let imgs = document.getElementsByClassName('filterimg');
  268. //Clicked on ALL button
  269. if (sender.target.classList.contains("filterdisabled"))
  270. {
  271. //Set own state
  272. sender.target.classList.remove("filterdisabled");
  273.  
  274. //Set all category states
  275. Array.from(mimgs).forEach(function(mimg) {
  276. mimg.classList.remove("filterdisabled");
  277. });
  278.  
  279. //Set all filterimg states
  280. Array.from(imgs).forEach(function(img) {
  281. if (img.classList.contains("filterdisabled"))
  282. {
  283. enableFilter(img);
  284. }
  285. });
  286. }
  287. else
  288. {
  289. //Set own state
  290. sender.target.classList.add("filterdisabled");
  291.  
  292. //Set all category states
  293. Array.from(mimgs).forEach(function(mimg) {
  294. mimg.classList.add("filterdisabled");
  295. });
  296.  
  297. //Set all filterimg states
  298. Array.from(imgs).forEach(function(img) {
  299. if (!img.classList.contains("filterdisabled"))
  300. {
  301. disableFilter(img);
  302. }
  303. });
  304. }
  305. }
  306.  
  307. refreshMap();
  308. }
  309.  
  310. function activateFilterImages(sender)
  311. {
  312. //1st - Hide all
  313. Array.from(filterImgsContainer[0].getElementsByClassName('categoryDIV')).forEach(function(cDIV){
  314. $(cDIV).hide();
  315. });
  316.  
  317. //2nd - Show the related
  318. $(document.getElementById(sender.target.getAttribute("title")+"_Category")).show();
  319. }
  320.  
  321. function deactivateFilterImages(sender)
  322. {
  323. Array.from(filterImgsContainer[0].getElementsByClassName('categoryDIV')).forEach(function(cDIV){
  324. $(cDIV).hide();
  325. });
  326. }
  327.  
  328. function FilterImgClick(sender)
  329. {
  330. if (sender.target.classList.contains("filterdisabled"))
  331. {
  332. enableFilter(sender.target);
  333. }
  334. else
  335. {
  336. disableFilter(sender.target);
  337. }
  338.  
  339. updateMainImage(sender.target.parentNode);
  340.  
  341. refreshMap();
  342. }
  343.  
  344. function updateMainImage(containerDIV)
  345. {
  346. var hide = true;
  347. var relatedMainImage = $(document.getElementById(containerDIV.id.replace('Category', 'MainIMG')));
  348. Array.from(containerDIV.getElementsByClassName('filterimg')).forEach(function(img){
  349. hide &= img.classList.contains("filterdisabled");
  350. });
  351.  
  352. if (hide)
  353. {
  354. relatedMainImage.addClass("filterdisabled");
  355. }
  356. else
  357. {
  358. relatedMainImage.removeClass("filterdisabled");
  359. }
  360.  
  361. //ALL image handler
  362. hide = true;
  363. Array.from(containerDIV.parentNode.getElementsByClassName('mainImage')).forEach(function(mimg){
  364. hide &= mimg.classList.contains("filterdisabled");
  365. });
  366.  
  367. if (hide)
  368. {
  369. $('#ALL_MainIMG').addClass("filterdisabled");
  370. }
  371. else
  372. {
  373. $('#ALL_MainIMG').removeClass("filterdisabled");
  374. }
  375. }
  376.  
  377. //Enable 1 filterimg
  378. function enableFilter(target)
  379. {
  380. target.classList.remove("filterdisabled");
  381.  
  382. var pos = disabledFilterImgs.indexOf(target.src);
  383. if (pos >= 0)
  384. {
  385. disabledFilterImgs.splice(pos, 1);
  386. }
  387. }
  388.  
  389. //Disable 1 filterimg
  390. function disableFilter(target)
  391. {
  392. target.classList.add("filterdisabled");
  393.  
  394. if (disabledFilterImgs.indexOf(target.src) < 0)
  395. {
  396. disabledFilterImgs.push(target.src);
  397. }
  398. }
  399.  
  400. function refreshMap()
  401. {
  402. if (isSpecialMapSite)
  403. {
  404. for (let mID in mapMarkers)
  405. {
  406. if (disabledFilterImgs.includes(mapMarkers[mID].munzee_logo))
  407. {
  408. $( "[data-index='" + mID + "']" ).hide();
  409. }
  410. else
  411. {
  412. $( "[data-index='" + mID + "']" ).show();
  413. }
  414. }
  415. }
  416. else
  417. {
  418. for (let mID in mapMarkers)
  419. {
  420. if (disabledFilterImgs.includes(mapMarkers[mID]._element.outerHTML.split("&quot;")[1]))
  421. {
  422. $( "[data-index='" + mID + "']" ).hide();
  423. }
  424. else
  425. {
  426. $( "[data-index='" + mID + "']" ).show();
  427. }
  428. }
  429. }
  430. }
  431.  
  432. $(document).ajaxSuccess(restructureImages);