Munzee Map Filters

New way of catagorized filters

当前为 2022-07-05 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name Munzee Map Filters
  3. // @namespace http://tampermonkey.net/
  4. // @version 22.07.05.002
  5. // @description New way of catagorized filters
  6. // @author CzPeet
  7. // @license MIT
  8. // @match https://www.munzee.com/specials*
  9. // @match https://www.munzee.com/map*
  10. // @icon https://www.google.com/s2/favicons?domain=munzee.com
  11. // @update https://greasyfork.org/en/scripts/433078-munzee-map-filters
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. $('head').append($("<style> .filterimg{height: 32px; margin-left: 3px; margin-right: 3px;} .filterdisabled{filter: grayscale(100%); opacity: 0.7;} </style>"));
  16.  
  17. var isSpecialMapSite = document.location.href.includes('specials');
  18. var isMapLoading = false;
  19. var imgPrefix = "https://munzee.global.ssl.fastly.net/images/pins/";
  20. var filterImgsContainer = null;
  21. var filterIMGS = [];
  22. var rawFilterIMGS = [];
  23.  
  24. var categoryMainImages = ["aceofhearts","sandstonepetrock","pizzabase","tophat","gardenflamingo","festivefeathers","megamouthful","otterpup", "theunicorn", "retiredunicorn", "icedragon", "poseidon", "flatrob", "beachflatrob", "phantomflatrob", "tuli", "zombietuli", "nomad", "sirprizewheel", "vikerkaar", "diamond", "spyderbot", "gardengnome", "gnomearcheryhood", "skyland10", "boxjellyfish", "bones", "fire", "poivirtualgarden", "zodiac-sun", "chinese_zodiac", "egyptianzodiacsun", "virtual_rainbow", "longsword", "mystery", "walkietalkiewatch", "qrewzee", "quizvirtual"];
  25. var categorizedFilterOrder = ["Cards","StonePets","PizzaParts","Hats","Flamingos","Feathers","TongueTwisterDay","BabyAnimals", "Mythologicals", "RetiredMyths", "AlternaMyths", "ModernMyths", "FlatFriends", "FancyFlats", "PhantomFlats", "PouchCreations", "ZombiePouchs", "Nomads", "Gaming", "FunfinityStones", "Jewels", "MechZBouncers", "GardenGnomes", "GardenGnomeHats", "Destinations", "EvoBouncers", "Evoluations", "Scatters", "Places", "WesternZodiacs", "ChineseZodiacs", "EgyptianZodiacs", "ColouredVirtuals", "ClanWeapons", "Mysteries", "Zeecrets", "Misc", "UnCategorized"];
  26. var categorizedFilterObject = {};
  27.  
  28. categorizedFilterObject.Cards=["aceofclubs","aceofdiamonds","aceofhearts","aceofspades","fiveofclubs","fiveofdiamonds","fiveofhearts","fiveofspades","fourofclubs","fourofdiamonds","fourofhearts","fourofspades","jackofclubs","jackofdiamonds","jackofhearts","jackofspades","kingofclubs","kingofdiamonds","kingofhearts","kingofspades","knaveofclubs","knaveofdiamonds","knaveofhearts","knaveofspades","nineofclubs","nineofdiamonds","nineofhearts","nineofspades","queenofclubs","queenofdiamonds","queenofhearts","queenofspades","sevenofclubs","sevenofdiamonds","sevenofhearts","sevenofspades","sixofclubs","sixofdiamonds","sixofhearts","sixofspades","tenofclubs","tenofdiamonds","tenofhearts","tenofspades","threeofclubs","threeofdiamonds","threeofhearts","threeofspades","twoofclubs","twoofdiamonds","twoofhearts","twoofspades"];
  29. categorizedFilterObject.StonePets=["sandstonepetrock","lightwoodpaintbrush","darkwoodpaintbrush","limestonepetrock","aquamarinepaintbucket","purplepaintbucket","orangepaintbucket","greenpaintbucket"];
  30. categorizedFilterObject.PizzaParts=["pizzabase","tomatopaste","cutpeppers","pepperoni","spicybeef","gratedcheese","olives","jalapenos","ham","redonions","chickentopping","pineapplechunks","mushrooms"];
  31. categorizedFilterObject.Hats=["tophat","chefhat","snowtrapperhat","cowboyhat","safarihat","beret","deerstalkerhat","pinwheelhat","raccoonskincap","beeantennae","truckercap","captainhat"];
  32. categorizedFilterObject.Flamingos=["gardenflamingo","newyeargardenflamingo","astronautgardenflamingo","queen'sguardsmangardenflamingo","aussieexplorergardenflamingo","goldminergardenflamingo","valentinesgardenflamingo","luckygardenflamingo","foolishgardenflamingo","graduategardenflamingo"];
  33. categorizedFilterObject.Feathers=["festivefeathers","spaceflightfeathers","bearskinfeathers","crikeyfeathers","flannelfeathers","lovelyfeathers","fortunefeathers","funnyfeathers","goldsealfeathers"];
  34. categorizedFilterObject.TongueTwisterDay=["megamouthful","tonguetwister","sheshells","babybubbles","woodchuckwood","freshfish","irishwristwatch","botterbutter"];
  35. categorizedFilterObject.BabyAnimals=["otterpup","giraffecalf","foal","babyraccoon","candycornpiglet"];
  36. categorizedFilterObject.Mythologicals=["theunicorn","hippocampunicorn","battleunicorn","candycornunicorn","leprechaun","dwarfleprechaun","goblinleprechaun","leprecorn","ladyleprechaun","dragon","chinesedragon","wyverndragon","midnightdragon","yeti","reptoidyeti","lycanthropeyeti","monsteryeti","faun","centaurfaun","krampusfaun","fardarrigfaun","hydra","cerberushydra","cthulhuhydra","oillipheisthydra","pegasus","alicornpegasus","griffinpegasus","nightmarepegasus","cyclops","balorcyclops","minotaurcyclops","recyclops","mermaid","hotspringmermaid","melusinemermaid","merrymermaid","fairy","dryadfairy","wildfirefairy","sugarplumfairy","banshee","harpybanshee","witchbanshee","ghostofchristmasfuture","nymph","elfnymph","vampirenymph","snowqueen"];
  37. categorizedFilterObject.RetiredMyths=["retiredunicorn","retiredleprechaun","retireddragon","retiredyeti","retiredfaun","retiredhydra","retiredpegasus","retiredcyclops","retiredmermaid","retiredfairy","retiredbanshee","retirednymph"];
  38. categorizedFilterObject.AlternaMyths=["cherub","chimera","fairygodmother","firepegasus","gnomeleprechaun","gorgon","icedragon","motherearth","ogre","rainbowunicorn","sasquatchyeti","siren"];
  39. categorizedFilterObject.ModernMyths=["aphrodite","glasses","shell-phone","poseidon","trident","lifebuoy","hades","bident","firestarter","zeus","multimeter","lightningbolt"];
  40. categorizedFilterObject.FlatFriends=["flatrob","flatmatt","flatlou","flathammock","flatdhs","flatdiscgolfbasket","flatflashlight","flattypewriter","flatmurray","flatrum","flatcats","backtozeefuturetape","flatfindertape","qretaceouscamptape","specterdirectortape"];
  41. categorizedFilterObject.FancyFlats=["beachflatrob","coldflatrob","tuxflatrob","face-offflatmatt","footyflatmatt","matt'erupflatmatt","internationellesflatlou","polkadotflatlou","teamgbflatlou"];
  42. categorizedFilterObject.PhantomFlats=["phantomflatrob","phantomflatmatt","phantomflatlou"];
  43. 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"];
  44. categorizedFilterObject.ZombiePouchs=["zombietuli","zombievesi","zombiemuru","zombiepimedus","zombiepuffle","zombiemagnetus","zombieelekter"];
  45. categorizedFilterObject.Nomads=["nomad","nomadvirtual","nomadmystery","jewelthiefnomad","bellhopnomad","piratenomad","warriornomad","travelernomad","seasonalnomad","virtualflatnomad","coupechampionnomad","virtualzeecretagentnomad","zeecretagentnomad","virtualgamingnomad","gamingnomad","virtualjewelthiefnomad","virtualwarriornomad","virtualbellhopnomad","jason4zeesnomad","killermask"];
  46. categorizedFilterObject.Gaming=["surprise","prizewheel","scatter","rockpaperscissors","bowlingball","urbanfit","joystickphysical","joystickvirtual","sirprizewheel","maplechessset","walnutchessset"];
  47. categorizedFilterObject.FunfinityStones=["akvamariin","ametust","oniks","roosa","rubiin","safiir","smaragd","teemant","topaas","tsitriin","vikerkaar"];
  48. categorizedFilterObject.Jewels=["diamond","ruby","virtualemerald","aquamarinemunzee","topaz","virtual_amethyst","pinkdiamond","virtualsapphire","virtualcitrine","virtualonyx"];
  49. categorizedFilterObject.MechZBouncers=["spyderbot","tr33t0pp3r","abominablesn0wmachine","sn0wbomb","arcticlasershark","botwurst","carafeborg","cybersaurusrex","cyborgsanta","dronut","fr057y","geologgersrumbot","gingermechman","goldenlasershark","goldncoinsrumbot","gwrench","h3adl3ssh0rs3man","kingc0g","lasershark","loc04lmotive","mechanic4k3","monk3y","mumm33","negsrumbot","prim8","rud01ph","s4rc0ph4gus","sc4rab","scgsrumbot","steinbot","krampbot","31f","reindroid","breadbot","toast33","rougebot","heartthrobots","obot","xbot","eros404","l0v3bug","shamrocknrolla","blarneybeats","m0th3rb04rd","c00k13s","fathertim3","hourglass","bananaborg","p33l","p3n9u1n","m4ck3rel","emperorp3n9u1n","kingm4ck3rel","r3x-0-skeleton","f0ssil"];
  50. categorizedFilterObject.GardenGnomes=["gardengnome","archerygardengnome","astronautgardengnome","aussieexplorergardengnome","awardshowgardengnome","baseballgardengnome","basketballgardengnome","cricketgardengnome","footballgardengnome","goldminergardengnome","icehockeygardengnome","queen'sguardsmangardengnome","runninggardengnome","skateboardinggardengnome","soccergardengnome","cyclinggardengnome","esportsgardengnome","skiinggardengnome","stonegardengnome","newyearsevegardengnome"];
  51. categorizedFilterObject.GardenGnomeHats=["gnomearcheryhood","gnomeastronauthelmet","gnomeexplorerhat","10thmunzeebirthdayhat","gnomecatcherscap","gnomenogginnet","gnomeclubcap","gnometouchdowntopper","gnomeminerhat","gnomehockeyhelmet","gnomebearskinhat","gnomeheadphones","gnomeheelfliphat","gnomeheaderhat","cyclingcasquette","gnomegamingheadset","gnometoquetopper","gnomecountdowncap"];
  52. categorizedFilterObject.Destinations=["vacationcondo","timesharemunzee","skyland","skyland1","skyland2","skyland3","skyland4","skyland5","skyland6","skyland7","skyland8","skyland9","skyland10","skyland11","skyland12","skyland13","skyland14","treehouse","treehouse1","treehouse2","treehouse3","treehouse4","treehouse5","treehouse6","treehouse7","treehouse8","treehouse9","treehouse10","treehouse11","treehouse12","treehouse13","treehouse14","scrapstar","scrapstar1","scrapstar2","scrapstar3","scrapstar4","scrapstar5","scrapstar6","scrapstar7","scrapstar8","scrapstar9","scrapstar10","scrapstar11","scrapstar12","scrapstar13","scrapstar14","3starresort","4starresort","5starresort","motel","1starmotel","2starmotel","3starmotel","hotel","2starhotel","3starhotel","4starhotel","tpobpub","tpobpub1","tpobpub2","tpobpub3","tpobpub4","tpobpub5","tpobpub6","tpobpub7","tpobpub8","tpobpub9","tpobpub10","tpobpub11","tpobpub12","teapob","teapob1","teapob2","teapob3","teapob4","teapob5","teapob6","teapob7"];
  53. categorizedFilterObject.EvoBouncers=["boxjellyfish","goldenjellyfish","pb&jellyfish","limebutterfly","monarchbutterfly","morphobutterfly","poisondartfrog","tomatofrog","treefrog","seaturtle","snappingturtle","taekwondotortoise","honeybee","queenbee","wallabee"];
  54. 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","lean-toshed","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","ducknest","duckegg","mallard","swan","quack"];
  55. 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","lasertrail1","lasertrail2","lasertrail3","pixelpresent","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","n1nj4st4r"];
  56. 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"];
  57. categorizedFilterObject.WesternZodiacs=["aries","taurus","gemini","cancer","leo","virgo","libra","scorpio","sagittarius","capricorn","aquarius","pisces"];
  58. categorizedFilterObject.ChineseZodiacs=["ratchinesezodiac","oxchinesezodiac","tigerchinesezodiac","rabbitchinesezodiac","dragonchinesezodiac","snakechinesezodiac","horsechinesezodiac","goatchinesezodiac","monkeychinesezodiac","roosterchinesezodiac","dogchinesezodiac","pigchinesezodiac"];
  59. categorizedFilterObject.EgyptianZodiacs=["nile","amon-ra","osiris","thoth","horus","seth","anubis","sekhmet","bastet","mut","geb","isis"];
  60. 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"];
  61. categorizedFilterObject.ClanWeapons=["mace","longsword","battleaxe","thehammer","crossbow","catapult","shield","trojanunicorn"];
  62. categorizedFilterObject.Mysteries=["mystery","firemystery","icemystery","earthmystery","watermystery","airmystery","electricmystery","voidmystery"];
  63. categorizedFilterObject.Zeecrets=["briefcase","nightvisiongoggles","walkietalkiewatch","laserpen","infraredvirtual","undercoveragent","liaisonagent","physicalmasterofdisguise","virtualmasterofdisguise"];
  64. 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"];
  65. categorizedFilterObject.UnCategorized=[];
  66. var disabledFilterImgs = [];
  67.  
  68. function sleep(ms) {
  69. return new Promise(resolve => setTimeout(resolve, ms));
  70. }
  71.  
  72. async function restructureImages() {
  73.  
  74. //Wait until the progressbar is hidden
  75. if (isSpecialMapSite && ($("#map-box-special-loading").is(':visible')) ||
  76. !isSpecialMapSite && ($("#map-box-loading").is(':visible')))
  77. {
  78. return;
  79. }
  80.  
  81. //remove original filter_all button
  82. $('#filter_all').remove();
  83.  
  84. if (!isSpecialMapSite)
  85. {
  86. var inputbar = $('#inputbar');
  87. var filterimgsDiv = $('<div id="filterimgs"></div>');
  88. inputbar.append(filterimgsDiv);
  89. }
  90.  
  91. filterImgsContainer = $('#filterimgs');
  92. filterImgsContainer[0].addEventListener('mouseleave', deactivateFilterImages);
  93.  
  94. //Filters label removed
  95. if (isSpecialMapSite){
  96. filterImgsContainer.prev().remove();
  97. }
  98.  
  99. //Collect original filter images or create filter images from map
  100. filterIMGS = (isSpecialMapSite) ? filterImgsContainer[0].getElementsByClassName('filterimg') : createFilterImages(mapMarkers);
  101.  
  102. //Sort into Categories
  103. var filterHelper = CreateCategories();
  104.  
  105. //Reload the new layout
  106. filterImgsContainer.empty();
  107. filterImgsContainer.html(filterHelper);
  108. filterHelper = null;
  109.  
  110. //mainImages update needed after map action
  111. Array.from(document.getElementsByClassName('categoryDIV')).forEach(function(categDIV){
  112. updateMainImage(categDIV);
  113. });
  114.  
  115. //Add to all img the click eventListener
  116. Array.from(filterImgsContainer[0].getElementsByClassName('filterimg')).forEach(function(img) {
  117. img.addEventListener('click', FilterImgClick);
  118. img.setAttribute("style", "cursor:pointer");
  119. img.setAttribute("title", img.currentSrc.substring(img.currentSrc.lastIndexOf("/")+1,img.currentSrc.lastIndexOf(".")));
  120. });
  121.  
  122. //all mainImages stuffs
  123. Array.from(filterImgsContainer[0].getElementsByClassName('mainImage')).forEach(function(mainIMG){
  124. if (isSpecialMapSite)
  125. {
  126. mainIMG.setAttribute("style", "border: solid grey 1px; width:63px; padding-right:3px; padding-top:3px; cursor:pointer");
  127. }
  128. else
  129. {
  130. mainIMG.setAttribute("style", "border: solid grey 1px; width:53px; padding-right:3px; padding-top:3px; cursor:pointer");
  131. }
  132. mainIMG.addEventListener('mouseover', activateFilterImages);
  133. mainIMG.addEventListener('click', mainImageClick);
  134. });
  135.  
  136. //all categoryDIVs stuff
  137. Array.from(filterImgsContainer[0].getElementsByClassName('categoryDIV')).forEach(function(cDIV){
  138. cDIV.setAttribute("style", "display: none; border: solid grey 1px; padding-top: 5px; padding-bottom: 5px; width: 100%");
  139. cDIV.addEventListener('mouseleave', deactivateFilterImages);
  140. });
  141.  
  142. //refresh
  143. refreshMap();
  144. }
  145.  
  146. function CreateCategories()
  147. {
  148. //Div
  149. var mainImageDIV = document.createElement('DIV');
  150. mainImageDIV.setAttribute("id", "mainImageDIV");
  151.  
  152. var categName = "" ;
  153. var filterStructure = "";
  154. for (var o = 0; o<categorizedFilterOrder.length; o++)
  155. {
  156. categName = categorizedFilterOrder[o];
  157. var array = categorizedFilterObject[categName];
  158.  
  159. //Div
  160. var categDIV = document.createElement('DIV');
  161. categDIV.setAttribute("id", categName+"_Category");
  162. categDIV.setAttribute("class", "categoryDIV");
  163.  
  164. var addedAtLeatOne = false;
  165.  
  166. if (array.length > 0)
  167. {
  168. for (let a = 0; a < array.length; a++)
  169. {
  170. for (let i = 0; i < filterIMGS.length; i++)
  171. {
  172. if (filterIMGS[i].src == imgPrefix + array[a] + ".png")
  173. {
  174. categDIV.appendChild(filterIMGS[i]);
  175. addedAtLeatOne = true;
  176. }
  177. }
  178. }
  179. }
  180. else
  181. {
  182. for (let i = filterIMGS.length-1; i >= 0; i--)
  183. {
  184. categDIV.appendChild(filterIMGS[i]);
  185. addedAtLeatOne = true;
  186. }
  187. }
  188.  
  189. if (addedAtLeatOne)
  190. {
  191. filterStructure += categDIV.outerHTML;
  192.  
  193. //main image
  194. var categMainIMG = document.createElement('IMG');
  195. categMainIMG.setAttribute("id", categName+'_MainIMG');
  196. categMainIMG.setAttribute("title", categName);
  197. categMainIMG.setAttribute("class", "mainImage");
  198. categMainIMG.src = imgPrefix + categoryMainImages[o] + ".png";
  199.  
  200. mainImageDIV.appendChild(categMainIMG);
  201. }
  202. }
  203.  
  204. //Show/Hide all main image
  205. var allOrnothingIMG = document.createElement('IMG');
  206. allOrnothingIMG.setAttribute("id", 'ALL_MainIMG');
  207. allOrnothingIMG.setAttribute("title", 'Show/Hide All Category');
  208. allOrnothingIMG.setAttribute("class", "mainImage");
  209. allOrnothingIMG.src = imgPrefix + "business.png";
  210. mainImageDIV.appendChild(allOrnothingIMG);
  211.  
  212. filterStructure = mainImageDIV.outerHTML + filterStructure;
  213.  
  214. return filterStructure;
  215. }
  216.  
  217. function createFilterImages(markers)
  218. {
  219. rawFilterIMGS = [];
  220. let imgList = document.createDocumentFragment();
  221. for (var mID in markers)
  222. {
  223. let src = markers[mID]._element.outerHTML.split("&quot;")[1];
  224. if (!rawFilterIMGS.includes(src))
  225. {
  226. rawFilterIMGS.push(src);
  227. var img = document.createElement('IMG');
  228. img.setAttribute('class','filterimg');
  229. img.setAttribute('src',src);
  230. imgList.appendChild(img);
  231. }
  232. }
  233.  
  234. return imgList.children;
  235. }
  236.  
  237. function mainImageClick(sender)
  238. {
  239. //find related filterimgs
  240. var categDIV = document.getElementById(sender.target.getAttribute("title")+"_Category");
  241.  
  242. if (categDIV != null)
  243. {
  244. let imgs = categDIV.getElementsByTagName('img');
  245.  
  246. if (sender.target.classList.contains("filterdisabled"))
  247. {
  248. //Set own state
  249. sender.target.classList.remove("filterdisabled");
  250.  
  251. //Set the related filterimg states
  252. Array.from(imgs).forEach(function(img) {
  253. if (img.classList.contains("filterdisabled"))
  254. {
  255. enableFilter(img);
  256. }
  257. });
  258. }
  259. else
  260. {
  261. //Set own state
  262. sender.target.classList.add("filterdisabled");
  263.  
  264. //Set the related filterimg states
  265. Array.from(imgs).forEach(function(img) {
  266. if (!img.classList.contains("filterdisabled"))
  267. {
  268. disableFilter(img);
  269. }
  270. });
  271. }
  272. }
  273. else
  274. {
  275. let mimgs = document.getElementsByClassName('mainImage');
  276. let imgs = document.getElementsByClassName('filterimg');
  277. //Clicked on ALL button
  278. if (sender.target.classList.contains("filterdisabled"))
  279. {
  280. //Set own state
  281. sender.target.classList.remove("filterdisabled");
  282.  
  283. //Set all category states
  284. Array.from(mimgs).forEach(function(mimg) {
  285. mimg.classList.remove("filterdisabled");
  286. });
  287.  
  288. //Set all filterimg states
  289. Array.from(imgs).forEach(function(img) {
  290. if (img.classList.contains("filterdisabled"))
  291. {
  292. enableFilter(img);
  293. }
  294. });
  295. }
  296. else
  297. {
  298. //Set own state
  299. sender.target.classList.add("filterdisabled");
  300.  
  301. //Set all category states
  302. Array.from(mimgs).forEach(function(mimg) {
  303. mimg.classList.add("filterdisabled");
  304. });
  305.  
  306. //Set all filterimg states
  307. Array.from(imgs).forEach(function(img) {
  308. if (!img.classList.contains("filterdisabled"))
  309. {
  310. disableFilter(img);
  311. }
  312. });
  313. }
  314. }
  315.  
  316. refreshMap();
  317. }
  318.  
  319. function activateFilterImages(sender)
  320. {
  321. //1st - Hide all
  322. Array.from(filterImgsContainer[0].getElementsByClassName('categoryDIV')).forEach(function(cDIV){
  323. $(cDIV).hide();
  324. });
  325.  
  326. //2nd - Show the related
  327. $(document.getElementById(sender.target.getAttribute("title")+"_Category")).show();
  328. }
  329.  
  330. function deactivateFilterImages(sender)
  331. {
  332. Array.from(filterImgsContainer[0].getElementsByClassName('categoryDIV')).forEach(function(cDIV){
  333. $(cDIV).hide();
  334. });
  335. }
  336.  
  337. function FilterImgClick(sender)
  338. {
  339. if (sender.target.classList.contains("filterdisabled"))
  340. {
  341. enableFilter(sender.target);
  342. }
  343. else
  344. {
  345. disableFilter(sender.target);
  346. }
  347.  
  348. updateMainImage(sender.target.parentNode);
  349.  
  350. refreshMap();
  351. }
  352.  
  353. function updateMainImage(containerDIV)
  354. {
  355. var hide = true;
  356. var relatedMainImage = $(document.getElementById(containerDIV.id.replace('Category', 'MainIMG')));
  357. Array.from(containerDIV.getElementsByClassName('filterimg')).forEach(function(img){
  358. hide &= img.classList.contains("filterdisabled");
  359. });
  360.  
  361. if (hide)
  362. {
  363. relatedMainImage.addClass("filterdisabled");
  364. }
  365. else
  366. {
  367. relatedMainImage.removeClass("filterdisabled");
  368. }
  369.  
  370. //ALL image handler
  371. hide = true;
  372. Array.from(containerDIV.parentNode.getElementsByClassName('mainImage')).forEach(function(mimg){
  373. hide &= mimg.classList.contains("filterdisabled");
  374. });
  375.  
  376. if (hide)
  377. {
  378. $('#ALL_MainIMG').addClass("filterdisabled");
  379. }
  380. else
  381. {
  382. $('#ALL_MainIMG').removeClass("filterdisabled");
  383. }
  384. }
  385.  
  386. //Enable 1 filterimg
  387. function enableFilter(target)
  388. {
  389. target.classList.remove("filterdisabled");
  390.  
  391. var pos = disabledFilterImgs.indexOf(target.src);
  392. if (pos >= 0)
  393. {
  394. disabledFilterImgs.splice(pos, 1);
  395. }
  396. }
  397.  
  398. //Disable 1 filterimg
  399. function disableFilter(target)
  400. {
  401. target.classList.add("filterdisabled");
  402.  
  403. if (disabledFilterImgs.indexOf(target.src) < 0)
  404. {
  405. disabledFilterImgs.push(target.src);
  406. }
  407. }
  408.  
  409. function refreshMap()
  410. {
  411. if (isSpecialMapSite)
  412. {
  413. for (let mID in mapMarkers)
  414. {
  415. if (disabledFilterImgs.includes(mapMarkers[mID].munzee_logo))
  416. {
  417. $( "[data-index='" + mID + "']" ).hide();
  418. }
  419. else
  420. {
  421. $( "[data-index='" + mID + "']" ).show();
  422. }
  423. }
  424. }
  425. else
  426. {
  427. for (let mID in mapMarkers)
  428. {
  429. if (disabledFilterImgs.includes(mapMarkers[mID]._element.outerHTML.split("&quot;")[1]))
  430. {
  431. $( "[data-index='" + mID + "']" ).hide();
  432. }
  433. else
  434. {
  435. $( "[data-index='" + mID + "']" ).show();
  436. }
  437. }
  438. }
  439. }
  440.  
  441. $(document).ajaxSuccess(restructureImages);