{"version":3,"file":"news.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,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,aAAa;AACb,SAAS;AACT;AACA;AACA;AACA,SAAS;AACT;AACA;AACA;AACA;AACA;AACA;AACA,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,0DAA0D,MAAM;AAChE;AACA;AACA;AACA;AACA;AACA;AACA,cAAc;AACd;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAAS;AACT;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;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,SAAS;AACT,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,sEAAsE,gCAAgC;AACtG,qEAAqE,kCAAkC;AACvG;AACA;AACA;AACA;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,SAAS;AACT;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA,CAAC;AACD","sources":["webpack://nv-base-template/./src/js/features/news.js"],"sourcesContent":["\r\nnew Vue({\r\n el:\"#news-app\",\r\n data: {\r\n topicDropdown:false,\r\n typeDropdown:false,\r\n monthDropdown: false,\r\n yearDropdown: false,\r\n topics: [],\r\n types: [],\r\n months: [],\r\n years: [],\r\n topicFilters: [],\r\n keywords: '',\r\n typeFilters: [],\r\n monthFilters: [],\r\n yearFilters: [],\r\n allTopics: true,\r\n allTypes: true,\r\n allMonths: true,\r\n allYears: true,\r\n numberOfItemsShown: 9,\r\n filteredNewsItemsCount: 0,\r\n newsItems: [],\r\n stickyFilters: Number,\r\n bottomOfList: Number\r\n },\r\n methods: {\r\n hoverOutTimeout: function(field) {\r\n var self = this;\r\n \r\n setTimeout(() => {\r\n switch (field) {\r\n case \"month\":\r\n self.monthDropdown = false;\r\n break;\r\n case \"year\":\r\n self.yearDropdown = false;\r\n break;\r\n case \"topic\":\r\n self.topicDropdown = false;\r\n break;\r\n case \"type\":\r\n self.typeDropdown = false;\r\n break;\r\n default:\r\n break;\r\n }\r\n }, 1000);\r\n },\r\n showMore(){\r\n this.numberOfItemsShown += 9;\r\n this.filteredNewsItemsCount -= 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 }\r\n else{\r\n var B= document.body; //IE 'quirks'\r\n var D= document.documentElement; //IE with doctype\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.scrolledHeader);\r\n } else {\r\n self.scrolledHeader();\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.topicDropdown = false;\r\n self.typeDropdown = false;\r\n self.monthDropdown = false;\r\n self.yearDropdown = false;\r\n }\r\n },\r\n scrolledHeader(){\r\n var self = this;\r\n \r\n if (self.getScrollTop() > self.stickyFilters) {\r\n const width = self.$refs.filterList.parentElement.offsetWidth;\r\n self.$refs.filterList.classList.add('o-filter-list--scrolled');\r\n self.$refs.filterList.style = `--width: ${width}px`;\r\n self.$refs.filterList.style.willChange = \"\";\r\n self.$refs.filterList.isScrolled = true;\r\n\r\n if (self.getScrollTop() > self.bottomOfList) {\r\n self.$refs.filterList.classList.add('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.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 clearFilters: function () {\r\n // Reset filters\r\n this.allTopics = true;\r\n this.allTypes = true;\r\n this.allYears = true;\r\n this.allMonths = true;\r\n this.keywords = \"\";\r\n }\r\n },\r\n computed :{\r\n filteredNewsItems(){\r\n var self = this;\r\n var filteredNewsItems = self.newsItems;\r\n if (self.topicFilters.length > 0){\r\n filteredNewsItems = filteredNewsItems.filter(newsItem => self.topicFilters.indexOf(newsItem.topic) !== -1);\r\n }\r\n if (self.typeFilters.length > 0){\r\n filteredNewsItems = filteredNewsItems.filter(newsItem => self.typeFilters.indexOf(newsItem.newsType) !== -1);\r\n }\r\n if (self.monthFilters.length > 0){\r\n filteredNewsItems = filteredNewsItems.filter(newsItem => self.monthFilters.indexOf(newsItem.month) !== -1);\r\n }\r\n if (self.yearFilters.length > 0) {\r\n filteredNewsItems = filteredNewsItems.filter(newsItem => self.yearFilters.indexOf(newsItem.year) !== -1);\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 = filteredNewsItems.map(newsItem => {\r\n let score = 0;\r\n keywords.forEach((keyword, i) => {\r\n let text = newsItem.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 { newsItem: newsItem, score: score };\r\n });\r\n\r\n filteredNewsItems = keywordMatches\r\n .filter(m => m.score)\r\n .sort((a, b) => b.score - a.score)\r\n .map(m => m.newsItem);\r\n\r\n }\r\n self.filteredNewsItemsCount = filteredNewsItems.length;\r\n\r\n if (filteredNewsItems.length > self.numberOfItemsShown) {\r\n filteredNewsItems = filteredNewsItems.slice(0, self.numberOfItemsShown);\r\n }\r\n return filteredNewsItems;\r\n }\r\n },\r\n watch: {\r\n filteredNewsItems(val){\r\n var self = this;\r\n self.$nextTick(() => {\r\n self.bottomOfList = self.$refs.filterList.offsetHeight + self.$refs.newsList.offsetHeight - 200;\r\n })\r\n },\r\n allTopics(val){\r\n if (val){\r\n this.topicFilters = [];\r\n }\r\n },\r\n allTypes(val){\r\n if (val){\r\n this.typeFilters = [];\r\n }\r\n },\r\n allMonths(val){\r\n if (val){\r\n this.monthFilters = [];\r\n }\r\n },\r\n allYears(val) {\r\n if (val) {\r\n this.yearsFilters = [];\r\n }\r\n },\r\n topicFilters(){\r\n if (this.topicFilters.length > 0){\r\n this.allTopics = false;\r\n } else {\r\n this.allTopics = true;\r\n }\r\n },\r\n typeFilters(){\r\n if (this.typeFilters.length > 0){\r\n this.allTypes = false;\r\n } else {\r\n this.allTypes = true;\r\n }\r\n },\r\n monthFilters(){\r\n if (this.monthFilters.length > 0){\r\n this.allMonths = false;\r\n } else {\r\n this.allMonths = true;\r\n }\r\n },\r\n yearFilters() {\r\n if (this.yearFilters.length > 0) {\r\n this.allYears = false;\r\n } else {\r\n this.allYears = true;\r\n }\r\n },\r\n },\r\n mounted: function()\r\n {\r\n var self = this;\r\n self.$http.get('/api/News/GetAllNews')\r\n .then(response => {\r\n self.newsItems = response.data;\r\n\r\n self.months = [\r\n 'January', 'February', 'March', 'April', 'May', 'June',\r\n 'July', 'August', 'September', 'October', 'November', 'December'\r\n ];\r\n\r\n self.newsItems.forEach(newsItem => {\r\n if (self.types.indexOf(newsItem.newsType) === -1 && newsItem.newsType !== \"\") {\r\n self.types.push(newsItem.newsType)\r\n }\r\n if (self.topics.indexOf(newsItem.topic) === -1 && newsItem.topic !== \"\") {\r\n self.topics.push(newsItem.topic)\r\n }\r\n if (newsItem.mainImage === null) {\r\n newsItem.mainImage = \"/Image/icons/icon-news.svg?width=500&height=250&mode=crop\";\r\n }\r\n\r\n var publishedDate = new Date(newsItem.publishedDate);\r\n const month = publishedDate.toLocaleString('en-NZ', { month: 'long', timeZone: 'UTC' });\r\n const year = publishedDate.toLocaleString('en-NZ', { year: 'numeric', timeZone: 'UTC' });\r\n\r\n if (self.years.indexOf(year) === -1) {\r\n self.years.push(year);\r\n }\r\n\r\n newsItem.month = month;\r\n newsItem.year = year;\r\n\r\n newsItem.keywords = [\r\n newsItem.heading,\r\n newsItem.subheading,\r\n newsItem.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.newsList.offsetHeight;\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\r\n self.years = self.years.sort().reverse();\r\n\r\n })\r\n //self.$refs.typeDropdownArea.addEventListener(\"mouseleave\", self.hoverOutTimeout(\"type\"));\r\n self.$refs.monthDropdownArea.addEventListener(\"mouseleave\", () => self.hoverOutTimeout(\"month\"));\r\n self.$refs.yearDropdownArea.addEventListener(\"mouseleave\", () => self.hoverOutTimeout(\"year\"));\r\n self.$refs.topicDropdownArea.addEventListener(\"mouseleave\", () => self.hoverOutTimeout(\"topic\"));\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":""}