{"version":3,"file":"venues.js","mappings":";;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,cAAc;AACd,sCAAsC;AACtC,iDAAiD;AACjD;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,kBAAkB;AAClB;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,yBAAyB;AACzB,qBAAqB;AACrB;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,oCAAoC,iCAAiC;AACrE;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB,6BAA6B;AAC7B,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,cAAc;AACd;AACA;AACA,SAAS;AACT;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA,qBAAqB;AACrB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iBAAiB;AACjB,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;AACD","sources":["webpack://nv-base-template/./src/js/features/venues.js"],"sourcesContent":["\r\nnew Vue({\r\n el:\"#venues-app\",\r\n data: {\r\n locationDropdown: false,\r\n categoryDropdown:false,\r\n capacityDropdown: false,\r\n facilityDropdown: false,\r\n locations: [],\r\n categories: [],\r\n capacities: [],\r\n facilities: [],\r\n keywords: '',\r\n locationFilters: [],\r\n categoryFilters: [],\r\n capacityFilters: [],\r\n facilityFilters: [],\r\n allLocations: true,\r\n allCategories: true,\r\n allCapacities: true,\r\n allFacilities: true,\r\n numberOfItemsShown: 9,\r\n venueItems: [],\r\n stickyFilters: Number,\r\n bottomOfList: Number,\r\n headerEl: null,\r\n filterBarTopPosition: 0\r\n },\r\n methods: {\r\n\r\n convertCapacityToNumber(y) {\r\n var pattern = \"(.*)-\";\r\n \r\n var result = y.match(pattern);\r\n if (result == null) {\r\n result = y.replace(\"+\", \"\");\r\n }\r\n if (result != null){\r\n result.replace(\"-\", \"\");\r\n\r\n \r\n }\r\n\r\n //console.log(\"****\",parseInt(result));\r\n return parseInt(result);\r\n },\r\n hoverOutTimeout: function() {\r\n var self = this;\r\n \r\n setTimeout(() => {\r\n self.locationDropdown = false;\r\n self.categoryDropdown = false;\r\n self.capacityDropdown = false;\r\n self.facilityDropdown = false;\r\n }, 1000);\r\n },\r\n showMore(){\r\n this.numberOfItemsShown += 9;\r\n },\r\n getScrollTop() {\r\n if (typeof pageYOffset !== 'undefined') {\r\n //most browsers except IE before #9\r\n return pageYOffset;\r\n } else {\r\n var B= document.body; //IE 'quirks'\r\n var D= document.documentElement; //IE with doccategory\r\n D= (D.clientHeight)? D: B;\r\n return D.scrollTop;\r\n }\r\n },\r\n handleScroll() {\r\n var self = this;\r\n if (window.requestAnimationFrame) {\r\n window.requestAnimationFrame(self.updateFilterBarStickiness);\r\n } else {\r\n self.updateFilterBarStickiness();\r\n }\r\n },\r\n handleClick(e) {\r\n var self = this;\r\n if (!e.target.classList.contains(\"js-dropdown-area\")){\r\n self.locationDropdown = false;\r\n self.categoryDropdown = false;\r\n self.capacityDropdown = false;\r\n self.facilityDropdown = false;\r\n }\r\n },\r\n getElementTop(elem) {\r\n var box = elem.getBoundingClientRect();\r\n\r\n var body = document.body;\r\n var docEl = document.documentElement;\r\n\r\n var scrollTop = window.pageYOffset || docEl.scrollTop || body.scrollTop;\r\n var clientTop = docEl.clientTop || body.clientTop || 0;\r\n var top = box.top + scrollTop - clientTop;\r\n\r\n return Math.round(top);\r\n },\r\n updateFilterBarStickiness() {\r\n var self = this;\r\n\r\n if (!self.$refs.filterList.isScrolled) {\r\n self.filterBarTopPosition = self.getElementTop(self.$refs.filterList);\r\n }\r\n\r\n var headerHeight = self.headerEl.offsetHeight;\r\n var bottomPositionOfList = (self.getElementTop(self.$refs.venuesList) - headerHeight) + self.$refs.venuesList.offsetHeight - self.$refs.filterList.offsetHeight;\r\n\r\n if (self.getScrollTop() > (self.filterBarTopPosition - headerHeight)) {\r\n self.$refs.filterList.classList.add('o-filter-list--scrolled');\r\n self.$refs.filterList.style.willChange = \"\";\r\n self.$refs.filterList.isScrolled = true;\r\n\r\n if (self.getScrollTop() > bottomPositionOfList) {\r\n self.$refs.filterList.classList.add('o-filter-list--hidden');\r\n } else {\r\n self.$refs.filterList.classList.remove('o-filter-list--hidden');\r\n }\r\n } else {\r\n self.$refs.filterList.classList.remove('o-filter-list--scrolled');\r\n self.$refs.filterList.classList.remove('o-filter-list--hidden');\r\n self.$refs.filterList.style.willChange = \"background\";\r\n self.$refs.filterList.isScrolled = false;\r\n }\r\n\r\n if (self.getScrollTop() < self.bottomOfList) {\r\n self.$refs.filterList.classList.remove('o-filter-list--hidden');\r\n }\r\n\r\n }\r\n },\r\n computed :{\r\n filteredVenueItems(){\r\n var self = this;\r\n var filteredVenueItems = self.venueItems;\r\n\r\n if (self.locationFilters.length > 0) {\r\n filteredVenueItems = filteredVenueItems.filter(venueItem => self.locationFilters.indexOf(venueItem.location) !== -1);\r\n }\r\n\r\n if (self.categoryFilters.length > 0) {\r\n filteredVenueItems = filteredVenueItems.filter(venueItem => {\r\n for (var i = 0; i < venueItem.categories.length; i++) {\r\n var category = venueItem.categories[i];\r\n if (self.categoryFilters.indexOf(category) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n if (self.capacityFilters.length > 0){\r\n filteredVenueItems = filteredVenueItems.filter(venueItem => self.capacityFilters.indexOf(venueItem.capacity) !== -1);\r\n var multipleItems = [];\r\n self.capacityFilters.forEach(x => {\r\n self.venueItems.forEach(venueItem => {\r\n venueItem.capacity.forEach(y => {\r\n if (x == y) {\r\n multipleItems.push(venueItem);\r\n }\r\n })\r\n })\r\n \r\n })\r\n\r\n filteredVenueItems = multipleItems;\r\n }\r\n\r\n if (self.facilityFilters.length > 0) {\r\n filteredVenueItems = filteredVenueItems.filter(venueItem => {\r\n for (var i = 0; i < venueItem.facilities.length; i++) {\r\n var facility = venueItem.facilities[i];\r\n if (self.facilityFilters.indexOf(facility) !== -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n });\r\n }\r\n\r\n if (self.keywords.trim()) {\r\n\r\n const ignoredWords = ['the', 'be', 'to', 'of', 'and', 'a', 'in', 'i', 'it', 'for', 'on', 'with', 'as', 'at', 'by', 'from', 'an'];\r\n const keywords = self.keywords.toLowerCase().trim().split(/\\s+/).filter(keyword => !ignoredWords.includes(keyword));\r\n\r\n const keywordMatches = filteredVenueItems.map(venueItem => {\r\n let score = 0;\r\n keywords.forEach((keyword, i) => {\r\n let text = venueItem.keywords;\r\n let index = 0;\r\n while ((index = text.indexOf(keyword)) !== -1) {\r\n score += Math.max((10000 - index) * (keywords.length - i), 10);\r\n text = text.substr(index + 1);\r\n }\r\n });\r\n return { venueItem: venueItem, score: score };\r\n });\r\n\r\n filteredVenueItems = keywordMatches\r\n .filter(m => m.score)\r\n .sort((a, b) => b.score - a.score)\r\n .map(m => m.venueItem);\r\n\r\n }\r\n\r\n if (filteredVenueItems.length > self.numberOfItemsShown) {\r\n filteredVenueItems = filteredVenueItems.slice(0, self.numberOfItemsShown);\r\n } \r\n\r\n return filteredVenueItems;\r\n }\r\n },\r\n watch: {\r\n filteredVenueItems(val){\r\n var self = this;\r\n self.$nextTick(() => {\r\n self.bottomOfList = self.$refs.filterList.offsetHeight + self.$refs.venuesList.offsetHeight - 200;\r\n })\r\n },\r\n allLocations(val){\r\n if (val) {\r\n this.locationFilters = [];\r\n }\r\n },\r\n allCategories(val) {\r\n if (val) {\r\n this.categoryFilters = [];\r\n }\r\n },\r\n allCapacities(val){\r\n if (val) {\r\n this.capacityFilters = [];\r\n }\r\n },\r\n allFacilities(val) {\r\n if (val) {\r\n this.facilityFilters = [];\r\n }\r\n },\r\n locationFilters(){\r\n if (this.locationFilters.length > 0){\r\n this.allLocations = false;\r\n } else {\r\n this.allLocations = true;\r\n }\r\n },\r\n categoryFilters(){\r\n if (this.categoryFilters.length > 0) {\r\n this.allCategories = false;\r\n } else {\r\n this.allCategories = true;\r\n }\r\n },\r\n capacityFilters() {\r\n if (this.capacityFilters.length > 0) {\r\n this.allCapacities = false;\r\n } else {\r\n this.allCapacities = true;\r\n }\r\n },\r\n facilityFilters() {\r\n if (this.facilityFilters.length > 0) {\r\n this.allFacilities = false;\r\n } else {\r\n this.allFacilities = true;\r\n }\r\n }\r\n },\r\n mounted: function()\r\n {\r\n var self = this;\r\n\r\n var preselectedCategory = self.$el.getAttribute('data-preselected-category');\r\n if (preselectedCategory) {\r\n self.categoryFilters.push(preselectedCategory);\r\n }\r\n\r\n self.$http.get('/api/Venues/GetAllVenues')\r\n .then(response => {\r\n self.venueItems = response.data;\r\n //console.log(self.venueItems);\r\n var allCapacities = [];\r\n var filteredCapacities = [];\r\n self.venueItems.forEach(venueItem => {\r\n if (venueItem.location && self.locations.indexOf(venueItem.location) === -1) {\r\n self.locations.push(venueItem.location);\r\n }\r\n\r\n venueItem.categories.forEach(function (category) {\r\n if (category && self.categories.indexOf(category) === -1) {\r\n self.categories.push(category);\r\n }\r\n });\r\n\r\n if (venueItem.capacity && self.capacities.indexOf(venueItem.capacity) === -1) {\r\n\r\n \r\n venueItem.capacity.forEach(x => {\r\n allCapacities.push(x);\r\n });\r\n\r\n\r\n self.capacities.forEach(item => {\r\n if (!filteredCapacities.has(item)) {\r\n filteredCapacities.push(item);\r\n }\r\n })\r\n\r\n \r\n }\r\n\r\n venueItem.facilities.forEach(function (facility) {\r\n if (facility && self.facilities.indexOf(facility) === -1) {\r\n self.facilities.push(facility);\r\n }\r\n });\r\n\r\n if (venueItem.mainImage === null) {\r\n venueItem.mainImage = \"/Image/icons/icon-news.svg?width=694&height=316&mode=crop\";\r\n }\r\n\r\n venueItem.keywords = [\r\n venueItem.heading,\r\n venueItem.textContent\r\n ].join().toLowerCase();\r\n\r\n self.$nextTick(() => {\r\n self.stickyFilters = self.$refs.filterList.offsetTop + self.$refs.filterList.offsetHeight;\r\n self.bottomOfList = self.stickyFilters + self.$refs.venuesList.offsetHeight;\r\n\r\n self.$refs.filterList.isScrolled = false;\r\n self.$refs.filterList.style.willChange = \"background\";\r\n window.addEventListener('scroll', self.handleScroll);\r\n window.addEventListener('click', self.handleClick);\r\n })\r\n });\r\n var unique = allCapacities.filter((value, index, array) => array.indexOf(value) === index);\r\n\r\n self.capacities = unique.sort((a, b) => {\r\n a = self.convertCapacityToNumber(a);\r\n b = self.convertCapacityToNumber(b)\r\n return a - b\r\n });\r\n\r\n\r\n \r\n\r\n self.categories = self.categories.sort().reverse();\r\n\r\n })\r\n if (self.$refs.categoryDropdownArea) {\r\n self.$refs.categoryDropdownArea.addEventListener(\"mouseleave\", self.hoverOutTimeout);\r\n }\r\n self.$refs.locationDropdownArea.addEventListener(\"mouseleave\", self.hoverOutTimeout);\r\n self.$refs.capacityDropdownArea.addEventListener(\"mouseleave\", self.hoverOutTimeout);\r\n\r\n self.headerEl = document.querySelector('#header');\r\n },\r\n destroyed () {\r\n window.removeEventListener('scroll', this.handleScroll);\r\n window.removeEventListener('click', this.handleClick);\r\n }\r\n});\r\n\r\n"],"names":[],"sourceRoot":""}