((window) -> class CookiePolicy checkClosedBefore: -> /cookie_policy_agreed=/.test document.cookie get = (url, success, fail = ->) -> req = new XMLHttpRequest() req.onreadystatechange = -> if req.readyState is 4 and req.status is 200 success.call(this, JSON.parse(req.responseText)) else fail.call(this, req.responseText) req.open('GET', url, true) req.send(null) checkIfIpRequiresAgreementBefore: -> return +1 if /user_located_in_eu=true/.test document.cookie return -1 if /user_located_in_eu=false/.test document.cookie 0 storeLocatedInEu: (in_eu) -> append = [ "user_located_in_eu=#{in_eu}" 'max-age=14400', 'path=/' ].join('; ') document.cookie = append callIfIpRequiresAgreement: (callBack) -> switch @checkIfIpRequiresAgreementBefore() when -1 # TODO # console.log 'TODO' 1 when 1 callBack.call(this, {}, {}) else get '/user-lookup.json', (data) => if data?.in_eu? # new local geocode API if "#{data.in_eu}" is 'true' @storeLocatedInEu true return callBack.call(this, data, data) else @storeLocatedInEu false else # fallback to open resources get 'https://ipapi.co/json', (data) => get 'https://restcountries.eu/rest/v2/regionalbloc/eu', (countries) => for country in countries if country.alpha2Code is data.country @storeLocatedInEu true return callBack.call(this, data, country) @storeLocatedInEu false return closePopup: -> append = [ "cookie_policy_agreed=#{(new Date()).toGMTString()}" 'expires=Fri, 31 Dec 9999 23:59:59 GMT', 'path=/' ].join('; ') document.cookie = append @init: (params = {}) -> new CookiePolicy(params) constructor: (@params = {}) -> @callIfIpRequiresAgreement => @root = document.querySelector(@params.root) return unless @root @button = @root.querySelector(@params.button) return unless @button unless @checkClosedBefore() @root.style.display = 'block' @button.addEventListener 'click', (evt) => @root.style.display = 'none' @closePopup() window.CookiePolicy = CookiePolicy; )(window)