// Exclude Geography app // =============================================== // Takes in data obj, an element to append to, and utility functions // // Data set: // - targeting string // - cities []string // - zipCodes []string // - states []string // - dmas []string // // Example data: // { // "targeting" : "Specific Location", // "cities" : [ // "Tigard, OR" // ], // "zipCodes" : [ // "97224" // ], // "states" : [ // "OR - Oregon" // ], // "dmas" : [ // "820 - Portland-Or" // ] // } // var excludeGeography = (function(){ 'use strict' var template = getTemplate(), radArr = defaultRadiusValues(), perArr = [ { 'title' : 'Currently at', 'value': 0 }, { 'title' : '1 day', 'value': 1 }, { 'title' : '7 days', 'value': 7 }, { 'title' : '14 days', 'value': 14 }, { 'title' : '30 days', 'value': 30 }, ], statesArr = [ { "value": "AL", "title": "Alabama" }, { "value": "AK", "title": "Alaska" }, { "value": "AZ", "title": "Arizona" }, { "value": "AR", "title": "Arkansas" }, { "value": "CA", "title": "California" }, { "value": "CO", "title": "Colorado" }, { "value": "CT", "title": "Connecticut" }, { "value": "DE", "title": "Delaware" }, { "value": "DC", "title": "District of Columbia" }, { "value": "FL", "title": "Florida" }, { "value": "GA", "title": "Georgia" }, { "value": "HI", "title": "Hawaii" }, { "value": "ID", "title": "Idaho" }, { "value": "IL", "title": "Illinois" }, { "value": "IN", "title": "Indiana" }, { "value": "IA", "title": "Iowa" }, { "value": "KS", "title": "Kansas" }, { "value": "KY", "title": "Kentucky" }, { "value": "LA", "title": "Louisiana" }, { "value": "ME", "title": "Maine" }, { "value": "MD", "title": "Maryland" }, { "value": "MA", "title": "Massachusetts" }, { "value": "MI", "title": "Michigan" }, { "value": "MN", "title": "Minnesota" }, { "value": "MS", "title": "Mississippi" }, { "value": "MO", "title": "Missouri" }, { "value": "MT", "title": "Montana" }, { "value": "NE", "title": "Nebraska" }, { "value": "NV", "title": "Nevada" }, { "value": "NH", "title": "New Hampshire" }, { "value": "NJ", "title": "New Jersey" }, { "value": "NM", "title": "New Mexico" }, { "value": "NY", "title": "New York" }, { "value": "NC", "title": "North Carolina" }, { "value": "ND", "title": "North Dakota" }, { "value": "OH", "title": "Ohio" }, { "value": "OK", "title": "Oklahoma" }, //Fuck yea, Oregon { "value": "OR", "title": "Oregon" }, { "value": "PA", "title": "Pennsylvania" }, { "value": "RI", "title": "Rhode Island" }, { "value": "SC", "title": "South Carolina" }, { "value": "SD", "title": "South Dakota" }, { "value": "TN", "title": "Tennessee" }, { "value": "TX", "title": "Texas" }, { "value": "UT", "title": "Utah" }, { "value": "VT", "title": "Vermont" }, { "value": "VA", "title": "Virginia" }, { "value": "WA", "title": "Washington" }, { "value": "WV", "title": "West Virginia" }, { "value": "WI", "title": "Wisconsin" }, { "value": "WY", "title": "Wyoming" }, { "value": "NL", "title": "Newfoundland and Labrador" }, { "value": "PE", "title": "Prince Edward Island" }, { "value": "NS", "title": "Nova Scotia" }, { "value": "NB", "title": "New Brunswick" }, { "value": "QC", "title": "Quebec" }, { "value": "ON", "title": "Ontario" }, { "value": "MB", "title": "Manitoba" }, { "value": "SK", "title": "Saskatchewan" }, { "value": "AB", "title": "Alberta" }, { "value": "BC", "title": "British Columbia" }, { "value": "YT", "title": "Yukon" }, { "value": "NT", "title": "Northwest Territories" }, { "value": "NU", "title": "Nunavut" } ], dmaArr = [ {"neilsen":"500","google":" 2","name":" Portland/Auburn"},{"neilsen":"501","google":" 3","name":" New York"},{"neilsen":"502","google":" 4","name":" Binghamton"},{"neilsen":"503","google":" 5","name":" Macon"},{"neilsen":"504","google":" 6","name":" Philadelphia"},{"neilsen":"505","google":" 7","name":" Detroit"},{"neilsen":"506","google":" 8","name":" Boston"},{"neilsen":"507","google":" 9","name":" Savannah"},{"neilsen":"508","google":" 10","name":" Pittsburgh"},{"neilsen":"509","google":" 11","name":" Fort Wayne"},{"neilsen":"510","google":" 12","name":" Cleveland"},{"neilsen":"511","google":" 13","name":" Washington Dc"},{"neilsen":"512","google":" 14","name":" Baltimore"},{"neilsen":"513","google":" 15","name":" Flint/Saginaw/Bay City"},{"neilsen":"514","google":" 16","name":" Buffalo"},{"neilsen":"515","google":" 17","name":" Cincinnati"},{"neilsen":"516","google":" 18","name":" Erie"},{"neilsen":"517","google":" 19","name":" Charlotte"},{"neilsen":"518","google":" 20","name":" Greensboro/High Point/Winston-Salem"},{"neilsen":"519","google":" 21","name":" Charleston-Sc"},{"neilsen":"520","google":" 22","name":" Augusta"},{"neilsen":"521","google":" 23","name":" Providence/New Bedford"},{"neilsen":"522","google":" 24","name":" Columbus-Ga"},{"neilsen":"523","google":" 25","name":" Burlington/Plattsburgh"},{"neilsen":"524","google":" 26","name":" Atlanta"},{"neilsen":"525","google":" 27","name":" Albany-Ga"},{"neilsen":"526","google":" 28","name":" Utica"},{"neilsen":"527","google":" 29","name":" Indianapolis"},{"neilsen":"528","google":" 30","name":" Miami/Fort Lauderdale"},{"neilsen":"529","google":" 31","name":" Louisville"},{"neilsen":"530","google":" 32","name":" Tallahassee/Thomasville"},{"neilsen":"531","google":" 33","name":" Tri-Cities-Tn-Va"},{"neilsen":"532","google":" 34","name":" Albany/Schenectady/Troy"},{"neilsen":"533","google":" 35","name":" Hartford/New Haven"},{"neilsen":"534","google":" 36","name":" Orlando/Daytona Beach/Melbourne"},{"neilsen":"535","google":" 37","name":" Columbus-Oh"},{"neilsen":"536","google":" 38","name":" Youngstown"},{"neilsen":"537","google":" 39","name":" Bangor"},{"neilsen":"538","google":" 40","name":" Rochester-Ny"},{"neilsen":"539","google":" 41","name":" Tampa/Saint Petersburg"},{"neilsen":"540","google":" 42","name":" Traverse City/Cadillac"},{"neilsen":"541","google":" 43","name":" Lexington"},{"neilsen":"542","google":" 44","name":" Dayton"},{"neilsen":"543","google":" 45","name":" Springfield/Holyoke"},{"neilsen":"544","google":" 46","name":" Norfolk/Portsmouth/Newport News"},{"neilsen":"545","google":" 47","name":" Greenville/New Bern/Washington"},{"neilsen":"546","google":" 48","name":" Columbia-Sc"},{"neilsen":"547","google":" 49","name":" Toledo"},{"neilsen":"548","google":" 50","name":" West Palm Beach/Fort Pierce"},{"neilsen":"549","google":" 51","name":" Watertown"},{"neilsen":"550","google":" 52","name":" Wilmington"},{"neilsen":"551","google":" 53","name":" Lansing"},{"neilsen":"552","google":" 54","name":" Presque Isle"},{"neilsen":"553","google":" 55","name":" Marquette"},{"neilsen":"554","google":" 56","name":" Wheeling/Steubenville"},{"neilsen":"555","google":" 57","name":" Syracuse"},{"neilsen":"556","google":" 58","name":" Richmond/Petersburg"},{"neilsen":"557","google":" 59","name":" Knoxville"},{"neilsen":"558","google":" 60","name":" Lima"},{"neilsen":"559","google":" 61","name":" Bluefield/Beckley/Oak Hill"},{"neilsen":"560","google":" 62","name":" Raleigh/Durham"},{"neilsen":"561","google":" 63","name":" Jacksonville-Brunswick"},{"neilsen":"563","google":" 64","name":" Grand Rapids/Kalamazoo/Battle Creek"},{"neilsen":"564","google":" 65","name":" Charleston/Huntington"},{"neilsen":"565","google":" 66","name":" Elmira"},{"neilsen":"566","google":" 67","name":" Harrisburg/Lancaster/Lebanon/York"},{"neilsen":"567","google":" 68","name":" Greenville/Spartanburg/Asheville/Anderson"},{"neilsen":"569","google":" 69","name":" Harrisonburg"},{"neilsen":"570","google":" 70","name":" Florence/Myrtle Beach"},{"neilsen":"571","google":" 71","name":" Fort Myers/Naples"},{"neilsen":"573","google":" 72","name":" Roanoke/Lynchburg"},{"neilsen":"574","google":" 73","name":" Johnstown/Altoona"},{"neilsen":"575","google":" 74","name":" Chattanooga"},{"neilsen":"576","google":" 75","name":" Salisbury"},{"neilsen":"577","google":" 76","name":" Wilkes Barre/Scranton"},{"neilsen":"581","google":" 77","name":" Terre Haute"},{"neilsen":"582","google":" 78","name":" Lafayette-In"},{"neilsen":"583","google":" 79","name":" Alpena"},{"neilsen":"584","google":" 80","name":" Charlottesville"},{"neilsen":"588","google":" 81","name":" South Bend/Elkhart"},{"neilsen":"592","google":" 82","name":" Gainesville"},{"neilsen":"596","google":" 83","name":" Zanesville"},{"neilsen":"597","google":" 84","name":" Parkersburg"},{"neilsen":"598","google":" 85","name":" Clarksburg/Weston"},{"neilsen":"600","google":" 86","name":" Corpus Christi"},{"neilsen":"602","google":" 87","name":" Chicago"},{"neilsen":"603","google":" 88","name":" Joplin/Pittsburg"},{"neilsen":"604","google":" 89","name":" Columbia/Jefferson City"},{"neilsen":"605","google":" 90","name":" Topeka"},{"neilsen":"606","google":" 91","name":" Dothan"},{"neilsen":"609","google":" 92","name":" Saint Louis"},{"neilsen":"610","google":" 93","name":" Rockford"},{"neilsen":"611","google":" 94","name":" Rochester/Mason City/Austin"},{"neilsen":"612","google":" 95","name":" Shreveport"},{"neilsen":"613","google":" 96","name":" Minneapolis/Saint Paul"},{"neilsen":"616","google":" 97","name":" Kansas City"},{"neilsen":"617","google":" 98","name":" Milwaukee"},{"neilsen":"618","google":" 99","name":" Houston"},{"neilsen":"619","google":" 100","name":" Springfield-Mo"},{"neilsen":"622","google":" 101","name":" New Orleans"},{"neilsen":"623","google":" 102","name":" Dallas/Fort Worth"},{"neilsen":"624","google":" 103","name":" Sioux City"},{"neilsen":"625","google":" 104","name":" Waco/Temple/Bryan"},{"neilsen":"626","google":" 105","name":" Victoria"},{"neilsen":"627","google":" 106","name":" Wichita Falls/Lawton"},{"neilsen":"628","google":" 107","name":" Monroe/El Dorado"},{"neilsen":"630","google":" 108","name":" Birmingham"},{"neilsen":"631","google":" 109","name":" Ottumwa/Kirksville"},{"neilsen":"632","google":" 110","name":" Paducah/Cape Girardeau/Harrisburg/Mt Vernon"},{"neilsen":"633","google":" 111","name":" Odessa/Midland"},{"neilsen":"634","google":" 112","name":" Amarillo"},{"neilsen":"635","google":" 113","name":" Austin-Tx"},{"neilsen":"636","google":" 114","name":" Harlingen/Weslaco/Brownsville/Mcallen"},{"neilsen":"637","google":" 115","name":" Cedar Rapids/Waterloo/Dubuque"},{"neilsen":"638","google":" 116","name":" Saint Joseph"},{"neilsen":"639","google":" 117","name":" Jackson-Tn"},{"neilsen":"640","google":" 118","name":" Memphis"},{"neilsen":"641","google":" 119","name":" San Antonio"},{"neilsen":"642","google":" 120","name":" Lafayette-La"},{"neilsen":"643","google":" 121","name":" Lake Charles"},{"neilsen":"644","google":" 122","name":" Alexandria-La"},{"neilsen":"647","google":" 123","name":" Greenwood/Greenville"},{"neilsen":"648","google":" 124","name":" Champaign/Springfield/Decatur"},{"neilsen":"649","google":" 125","name":" Evansville"},{"neilsen":"650","google":" 126","name":" Oklahoma City"},{"neilsen":"651","google":" 127","name":" Lubbock"},{"neilsen":"652","google":" 128","name":" Omaha"},{"neilsen":"656","google":" 129","name":" Panama City"},{"neilsen":"657","google":" 130","name":" Sherman-Tx/Ada-Ok"},{"neilsen":"658","google":" 131","name":" Green Bay/Appleton"},{"neilsen":"659","google":" 132","name":" Nashville"},{"neilsen":"661","google":" 133","name":" San Angelo"},{"neilsen":"662","google":" 134","name":" Abilene/Sweetwater"},{"neilsen":"669","google":" 135","name":" Madison"},{"neilsen":"670","google":" 136","name":" Fort Smith/Fayetteville/Springdale/Rogers"},{"neilsen":"671","google":" 137","name":" Tulsa"},{"neilsen":"673","google":" 138","name":" Columbus/Tupelo/West Point"},{"neilsen":"675","google":" 139","name":" Peoria/Bloomington"},{"neilsen":"676","google":" 140","name":" Duluth/Superior"},{"neilsen":"678","google":" 141","name":" Wichita/Hutchinson"},{"neilsen":"679","google":" 142","name":" Des Moines/Ames"},{"neilsen":"682","google":" 143","name":" Davenport/Rock Island/Moline"},{"neilsen":"686","google":" 144","name":" Mobile/Pensacola/Fort Walton Beach"},{"neilsen":"687","google":" 145","name":" Minot/Bismarck/Dickinson"},{"neilsen":"691","google":" 146","name":" Huntsville/Decatur/Florence"},{"neilsen":"692","google":" 147","name":" Beaumont/Port Arthur"},{"neilsen":"693","google":" 148","name":" Little Rock/Pine Bluff"},{"neilsen":"698","google":" 149","name":" Montgomery/Selma"},{"neilsen":"702","google":" 150","name":" La Crosse/Eau Claire"},{"neilsen":"705","google":" 151","name":" Wausau/Rhinelander"},{"neilsen":"709","google":" 152","name":" Tyler/Longview/Lufkin/Nacogdoches"},{"neilsen":"710","google":" 153","name":" Hattiesburg/Laurel"},{"neilsen":"711","google":" 154","name":" Meridian"},{"neilsen":"716","google":" 155","name":" Baton Rouge"},{"neilsen":"717","google":" 156","name":" Quincy/Hannibal/Keokuk"},{"neilsen":"718","google":" 157","name":" Jackson-Ms"},{"neilsen":"722","google":" 158","name":" Lincoln/Hastings/Kearney"},{"neilsen":"724","google":" 159","name":" Fargo/Valley City"},{"neilsen":"725","google":" 160","name":" Sioux Falls/Mitchell"},{"neilsen":"734","google":" 161","name":" Jonesboro"},{"neilsen":"736","google":" 162","name":" Bowling Green"},{"neilsen":"737","google":" 163","name":" Mankato"},{"neilsen":"740","google":" 164","name":" North Platte"},{"neilsen":"743","google":" 165","name":" Anchorage"},{"neilsen":"744","google":" 166","name":" Honolulu"},{"neilsen":"745","google":" 167","name":" Fairbanks"},{"neilsen":"746","google":" 168","name":" Biloxi/Gulfport"},{"neilsen":"747","google":" 169","name":" Juneau"},{"neilsen":"749","google":" 170","name":" Laredo"},{"neilsen":"751","google":" 171","name":" Denver"},{"neilsen":"752","google":" 172","name":" Colorado Springs/Pueblo"},{"neilsen":"753","google":" 173","name":" Phoenix"},{"neilsen":"754","google":" 174","name":" Butte/Bozeman"},{"neilsen":"755","google":" 175","name":" Great Falls"},{"neilsen":"756","google":" 176","name":" Billings"},{"neilsen":"757","google":" 177","name":" Boise"},{"neilsen":"758","google":" 178","name":" Idaho Falls/Pocatello"},{"neilsen":"759","google":" 179","name":" Cheyenne/Scottsbluff"},{"neilsen":"760","google":" 180","name":" Twin Falls"},{"neilsen":"762","google":" 181","name":" Missoula"},{"neilsen":"764","google":" 182","name":" Rapid City"},{"neilsen":"765","google":" 183","name":" El Paso"},{"neilsen":"766","google":" 184","name":" Helena"},{"neilsen":"767","google":" 185","name":" Casper/Riverton"},{"neilsen":"770","google":" 186","name":" Salt Lake City"},{"neilsen":"771","google":" 187","name":" Yuma/El Centro"},{"neilsen":"773","google":" 188","name":" Grand Junction/Montrose"},{"neilsen":"789","google":" 189","name":" Tucson/Sierra Vista"},{"neilsen":"790","google":" 190","name":" Albuquerque/Santa Fe"},{"neilsen":"798","google":" 191","name":" Glendive"},{"neilsen":"800","google":" 192","name":" Bakersfield"},{"neilsen":"801","google":" 193","name":" Eugene"},{"neilsen":"802","google":" 194","name":" Eureka"},{"neilsen":"803","google":" 195","name":" Los Angeles"},{"neilsen":"804","google":" 196","name":" Palm Springs"},{"neilsen":"807","google":" 197","name":" San Francisco/Oakland/San Jose"},{"neilsen":"810","google":" 198","name":" Yakima/Pasco/Richland/Kennewick"},{"neilsen":"811","google":" 199","name":" Reno"},{"neilsen":"813","google":" 200","name":" Medford/Klamath Falls"},{"neilsen":"819","google":" 201","name":" Seattle/Tacoma"},{"neilsen":"820","google":" 202","name":" Portland-Or"},{"neilsen":"821","google":" 203","name":" Bend-Or"},{"neilsen":"825","google":" 204","name":" San Diego"},{"neilsen":"828","google":" 205","name":" Monterey/Salinas"},{"neilsen":"839","google":" 206","name":" Las Vegas"},{"neilsen":"855","google":" 207","name":" Santa Barbara/Santa Maria/San Luis Obispo"},{"neilsen":"862","google":" 208","name":" Sacramento/Stockton/Modesto"},{"neilsen":"866","google":" 209","name":" Fresno/Visalia"},{"neilsen":"868","google":" 210","name":" Chico/Redding"},{"neilsen":"881","google":" 211","name":" Spokane"} ], geoTarArr = [{ "value" : "All USA" }, { "value" : "All Canada" }, { "value" : "Specific Location" }], statesList = getStatesList(statesArr), dmaList = getDmaList(dmaArr), citiesApiLoc = '/api/v1/citySearch', zipcodeApiLoc = '/api/v1/zipSearch', multiProcArr = ['cities','zipCodes','states','dmas']; return newExcludeGeography; function newExcludeGeography(d, t, fns){ return new ExcludeGeography(d, t, fns); } function ExcludeGeography(d, t, fns) { var e = getElementFromString(template, fns.getAppName('excludeGeography')), eles = new Elements(e, { 'status' : {}, "remove" : { 'target' : new ConfirmationButton(e.querySelector('.remove'), { 'text' : 'Remove app', 'noClass' : true, 'confirmText' : 'Confirm?' }, removeAction) }, "targetBy" : { 'selector' : '.targetBy' }, "nav" : { 'selector' : '.nav' }, "clc" : {}, "geo" : {} }); eles.geo = new ToggleNavigation(eles.nav, { 'data' : geoTarArr, 'className' : 'toggle', 'initialValue' : d.targeting }, updateGeo); eles.clc = new CheckboxListContainer(eles.targetBy, getChecklistArr(d), updateTargeting); eles.status = new ToggleInput(e.querySelector('.tgl'), updateStatus, { 'initialValue' : d.status === true }); processMulti(eles.clc.getLists()); t.appendChild(e); this.exit = function(){ if(!!e) removeChild(t, e); if(!!eles) eles.exit(); e = eles = null; }; function updateStatus(evt){ d.status = evt; if(evt){ eles.nav.classList.remove("noDisplay"); } else { eles.geo.setByValue('All USA'); eles.nav.classList.add("noDisplay"); } } function refreshSidePanel() { if(!!fns && !!fns.refreshSidePanel) fns.refreshSidePanel(); } function updateGeo(evt){ isSpecific(d.targeting = evt.value); refreshSidePanel(); } function updateTargeting(evt){ d[evt.key] = getArrayOfTitles(evt.value); refreshSidePanel(); } function removeAction(evt){ fns.removeApp('excludeGeography'); refreshSidePanel(); } function isSpecific(v){ eles.targetBy.classList[v === 'Specific Location' ? 'remove' : 'add']('noDisplay'); } function processMulti(m){ loop(multiProcArr, p); function p(k, v){ processCheckboxes(v, m[k].list.getList()); } } function processCheckboxes(k, v){ loop(v, p); function p(i, v){ if(isActiveCheckboxItem(v.getTitle(), k)) v.set(); } } function isActiveCheckboxItem(k, v){ var m = false; if(d[k] !== null) loop(d[k], p); return m; function p(k, val){ if(val === v){ m = true; return true; } } } } function getTemplate(){ var tgl = '
', rem = '
', nav = '', tb = '

Exclude By:

'; return '

{{.}}:

' + tgl + rem + nav + tb + '
'; } function ChecklistItem(ttl, k, d, api, apiData, apiFn, cfg){ this.title = get(ttl); this.key = get(k); this.data = get(d); this.api = get(api); this.apiData = get(apiData); this.apiFn = get(apiFn); this.config = get(cfg); function get(v){ return !!v ? v : null; } } function ListItem(i, v){ this.title = v; this.value = isString(v) ? v.toLowerCase() : v.toString(); this.index = i; } function getChecklistArr(d){ return [ new ChecklistItem("Cities", "cities", null, citiesApiLoc, d.cities, getCityData, { 'placeholder' : 'Search cities' }), new ChecklistItem("Zip", "zipCodes", null, zipcodeApiLoc, d.cities, getZipcodeData, { 'placeholder' : 'Search Zip codes' }), new ChecklistItem("States", "states", statesList), new ChecklistItem("DMAs", "dmas", dmaList) ]; } function getDmaList(e){ var a = []; loop(e, p); return a; function p(k, v){ a[k] = v.neilsen + ' - ' + v.name; } } function getStatesList(e){ var a = []; loop(e, p); return a; function p(k, v){ a[k] = v.value + ' - ' + v.title; } } function getCityData(e){ var a = []; loop(e, p); return a; function p(k, v){ a[k] = new ListItem(k, v.Name + ', ' + v.State); } } function getZipcodeData(e){ var a = []; loop(e, p); return a; function p(k, v){ a[k] = new ListItem(k, v); } } function getArrayOfTitles(d){ var a = []; forEach(d, p); return a; function p(t, d, i){ a[i] = t.title; } } })();