| /* global notify */ |
| /* eslint global-require: 0 */ |
| import $ from 'jquery'; |
| const d3 = window.d3 || require('d3'); |
| |
| export const EARTH_CIRCUMFERENCE_KM = 40075.16; |
| export const LUMINANCE_RED_WEIGHT = 0.2126; |
| export const LUMINANCE_GREEN_WEIGHT = 0.7152; |
| export const LUMINANCE_BLUE_WEIGHT = 0.0722; |
| export const MILES_PER_KM = 1.60934; |
| export const DEFAULT_LONGITUDE = -122.405293; |
| export const DEFAULT_LATITUDE = 37.772123; |
| export const DEFAULT_ZOOM = 11; |
| |
| export function kmToPixels(kilometers, latitude, zoomLevel) { |
| // Algorithm from: http://wiki.openstreetmap.org/wiki/Zoom_levels |
| const latitudeRad = latitude * (Math.PI / 180); |
| // Seems like the zoomLevel is off by one |
| const kmPerPixel = EARTH_CIRCUMFERENCE_KM * Math.cos(latitudeRad) / Math.pow(2, zoomLevel + 9); |
| return d3.round(kilometers / kmPerPixel, 2); |
| } |
| |
| export function isNumeric(num) { |
| return !isNaN(parseFloat(num)) && isFinite(num); |
| } |
| |
| export function rgbLuminance(r, g, b) { |
| // Formula: https://en.wikipedia.org/wiki/Relative_luminance |
| return (LUMINANCE_RED_WEIGHT * r) + (LUMINANCE_GREEN_WEIGHT * g) + (LUMINANCE_BLUE_WEIGHT * b); |
| } |
| |
| export function getParamFromQuery(query, param) { |
| const vars = query.split('&'); |
| for (let i = 0; i < vars.length; i++) { |
| const pair = vars[i].split('='); |
| if (decodeURIComponent(pair[0]) === param) { |
| return decodeURIComponent(pair[1]); |
| } |
| } |
| return null; |
| } |
| |
| export function storeQuery(query, callback) { |
| $.ajax({ |
| type: 'POST', |
| url: '/kv/store/', |
| async: false, |
| data: { |
| data: JSON.stringify(query), |
| }, |
| success: (data) => { |
| const baseUrl = window.location.origin + window.location.pathname; |
| const url = `${baseUrl}?id=${JSON.parse(data).id}`; |
| callback(url); |
| }, |
| }); |
| } |
| |
| export function getParamsFromUrl() { |
| const hash = window.location.search; |
| const params = hash.split('?')[1].split('&'); |
| const newParams = {}; |
| params.forEach((p) => { |
| const value = p.split('=')[1].replace(/\+/g, ' '); |
| const key = p.split('=')[0]; |
| newParams[key] = value; |
| }); |
| return newParams; |
| } |
| |
| export function getShortUrl(longUrl, callback) { |
| $.ajax({ |
| type: 'POST', |
| url: '/r/shortner/', |
| async: false, |
| data: { |
| data: '/' + longUrl, |
| }, |
| success: (data) => { |
| callback(data); |
| }, |
| error: () => { |
| notify.error('Error getting the short URL'); |
| callback(longUrl); |
| }, |
| }); |
| } |