Last active
February 4, 2017 08:36
-
-
Save johan/d7309c8c5e7dcd7ce160e88803aa29ab to your computer and use it in GitHub Desktop.
HAI 2017 events, as of 2016-12-22
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 'use strict';var _slicedToArray=function(){function sliceIterator(arr,i){var _arr=[];var _n=true;var _d=false;var _e=undefined;try{for(var _i=arr[Symbol.iterator](),_s;!(_n=(_s=_i.next()).done);_n=true){_arr.push(_s.value);if(i&&_arr.length===i)break;}}catch(err){_d=true;_e=err;}finally{try{if(!_n&&_i["return"])_i["return"]();}finally{if(_d)throw _e;}}return _arr;}return function(arr,i){if(Array.isArray(arr)){return arr;}else if(Symbol.iterator in Object(arr)){return sliceIterator(arr,i);}else{throw new TypeError("Invalid attempt to destructure non-iterable instance");}};}();var _typeof=typeof Symbol==="function"&&typeof Symbol.iterator==="symbol"?function(obj){return typeof obj;}:function(obj){return obj&&typeof Symbol==="function"&&obj.constructor===Symbol&&obj!==Symbol.prototype?"symbol":typeof obj;};function _toConsumableArray(arr){if(Array.isArray(arr)){for(var i=0,arr2=Array(arr.length);i<arr.length;i++){arr2[i]=arr[i];}return arr2;}else{return Array.from(arr);}}var deQuery=function deQuery(){var q=arguments.length>0&&arguments[0]!==undefined?arguments[0]:location.search;var o=arguments.length>1&&arguments[1]!==undefined?arguments[1]:{};var d=arguments.length>2&&arguments[2]!==undefined?arguments[2]:decodeURIComponent;return q.replace(/[?&]([^&=]*)(?:=([^&]*))?/g,function(a,k,v){return o[d(k)]=d(v||'');}),o;};var query=deQuery();var eventUrl=query.e||'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/5f0411c2f93d4cbd894833b9c9629a7c2f49a2aa/events.json';var leaderUrl=query.l||'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/bd8ef78c433e1253a7b4978bb69551663bd62636/leaders.json';var regions=null;var center={aus:[-32.7278575,151.2604738,'Australia','Hunter Valley'],ca:[43.9888232,-80.0262646,'Canada','Ecology Retreat Centre'],de:[52.0668495,7.2107544,'Germany','Seminarhof'],east:[42.4965698,-72.9462321,'US East Coast','Earthdance'],midwest:[40.1591988,-85.2805088,'US Midwest','Oakwood Retreat Center'],norcal:[38.5369205,-123.0701147,'US Northern California','Wildwood'],socal:[34.1349793,-116.3599965,'US Southern California','Joshua Tree Retreat Center'],uk:[51.2727283,-2.4157968,'United Kingdom','Ammerdown']};var places=Object.keys(center);var prereqs={"Any":"*","None":0,"HAI 1":1,"HAI 2":2,"HAI 3":3,"HAI 4":4,"HAI 5":5,"On Team":"t"};var levels={"HAI Mini":0,"-":null,"HAI 1":1,"HAI 2":2,"HAI 3":3,"HAI 4":4,"HAI 5":5,"HAI 6":6,"HAI 7":7,"HAI 8":8,"HAI 9":9,"--":null,"Couples 1":"c1","Couples 2":"c2","---":"Team Related","Assistant Training":"at","Active Listening Training":"alt","Team Workshop":"tw","Intern Workshop":"iw","----":null,"Others":""};var defaultPrereqs={"(team|intern).*(workshop|meeting)":"t","mystery upper level":5,"loving sex":5,"assistant training":2,"active listening":1,"community (night|weekend)":1,"(monthly|hai).*connect":1,"support group":1};var defaultLevels={"mini":0,"assistant training":"at","active listening":"alt","lc1":"c1","igniting your love":"c1","lc2":"c2","heart to heart":"c2","team.*workshop":"tw","intern.*workshop":"iw"};var events=document.querySelector('#events');var byRegion=document.querySelector('#byregion');var byPrereq=document.querySelector('#byprereq');var byLevels=document.querySelector('#bylevels');var byLeader=document.querySelector('#byleader');var now=Date.now();var eventInFuture=function eventInFuture(_ref){var end=_ref.end;return end>now;};var decodeEvent=function decodeEvent(_ref2){var title=_ref2.title,start=_ref2.start,end=_ref2.end,url=_ref2.url,className=_ref2.className,geo=_ref2.geo,uid=_ref2.uid,level=_ref2.level,prereq=_ref2.prereq,region=_ref2.region,facilitators=_ref2.facilitators;title=title.replace(/\s+/g,' ').trim().replace(/[,.]+$/,'');title=title.replace(/(.*), Level (\d+)$/,function(all,name,num){if(level===undefined)level=num;return num?'HAI '+num+': '+name:name;});if(level===undefined){for(var re in defaultLevels){if(level!=null)break;if(title.match(new RegExp(re,'i'))){level=defaultLevels[re];}}}if(prereq===undefined){prereq=level&&(level>5?5:level-1)||null;for(var _re in defaultPrereqs){if(prereq)break;if(title.match(new RegExp(_re,'i'))){prereq=defaultPrereqs[_re];}}}if(/^\//.test(url||'')){url='http://www.hai.org'+url.replace('EventDetail?','EventDetail_pub?');}if(region===undefined){region=className.split('-')[1].toLowerCase();}if(geo===undefined)geo=region;if(uid===undefined)uid=(url.match(/id=([^&]+)/)||[])[1];if(!title.match(/ [-@] /))title+=' @ '+center[region][2];return{title:title,url:url,className:className,facilitators:facilitators,region:region,level:level,prereq:prereq,geo:geo,start:parseDate(start),end:parseDate(end)};};var initEventList=function initEventList(allevents,pos){var _iteratorNormalCompletion=true;var _didIteratorError=false;var _iteratorError=undefined;try{for(var _iterator=allevents[Symbol.iterator](),_step;!(_iteratorNormalCompletion=(_step=_iterator.next()).done);_iteratorNormalCompletion=true){var event=_step.value;var className=event.className,region=event.region,prereq=event.prereq,title=event.title,start=event.start,end=event.end,url=event.url;var t=iso(start);var e=document.createElement('li');e.className=className;var a=document.createElement('a');a.href=url;a.textContent=t+': '+title;e.appendChild(gcalLink(event));e.appendChild(a);a.style.marginLeft='8px';events.appendChild(e);}}catch(err){_didIteratorError=true;_iteratorError=err;}finally{try{if(!_iteratorNormalCompletion&&_iterator.return){_iterator.return();}}finally{if(_didIteratorError){throw _iteratorError;}}}};var initFilterList=function initFilterList(regions,facilitators){function input(_ref3){var text=_ref3.text,title=_ref3.title,id=_ref3.id,type=_ref3.type,name=_ref3.name,value=_ref3.value,checked=_ref3.checked,onclick=_ref3.onclick;var li=document.createElement('li');var label=document.createElement('label');var input=document.createElement('input');if(id)input.id=id;if(name)input.name=name;if(value!=null)input.value=value;input.checked=!!checked;input.type=type||'checkbox';input.onclick=onclick||filterEvents;if(title)label.title=title;li.appendChild(label);label.appendChild(input);label.appendChild(document.createTextNode(' '+text));return li;}if(initFilterList.done)return;initFilterList.done=true;var unit={de:'km',ca:'km'}[regions[0].region]||'mi';byRegion.appendChild(input({text:'All',onclick:function onclick(e){var checked=e.target.checked;regions.forEach(function(_ref4){var region=_ref4.region;return document.getElementById(region).checked=checked;});filterEvents();}}));regions.forEach(function(_ref5,nth){var className=_ref5.className,region=_ref5.region,name=_ref5.name,site=_ref5.site,km=_ref5.km,mi=_ref5.mi;var dist={km:km,mi:mi}[unit]+{km:'km',mi:'mi'}[unit],info=void 0;if(location.hash==='#debug')console.log(info=km+'km / '+mi+'mi to '+region+' ('+site+')');else console.log(info=dist+' to '+region+' ('+site+')');var li=input({text:name,id:region,checked:!nth,title:'~'+info});byRegion.appendChild(li);});for(var text in prereqs){var prereq=prereqs[text];byPrereq.appendChild(input({text:text,type:'radio',name:'prereq',value:prereq||'',id:'p'+prereq,checked:!prereq}));}byLevels.appendChild(input({text:'All',checked:true,onclick:function onclick(e){var checked=e.target.checked;for(var _text in levels){if(/^-+$/.test(_text))continue;var level=levels[_text];document.getElementById('l'+level).checked=checked;}filterEvents();}}));var $menu=$(byLevels);for(var _text2 in levels){var level=levels[_text2];if(/^-+$/.test(_text2)){$menu.append('<li class="divider" role="separator"></li>');if(level){$menu.append('<li class="dropdown-header">'+level+'</li>');}}else{byLevels.appendChild(input({text:_text2,value:level,id:'l'+level,checked:true}));}}byLeader.appendChild(input({text:'All',checked:true,onclick:function onclick(e){var checked=e.target.checked;var checks=Object.assign({"":"Other"},facilitators);for(var id in checks){var f=facilitators[id];if(f?f.facilitator:!id){document.querySelector('#byleader input[value="'+id+'"]').checked=checked;}}filterEvents();}}));$menu=$(byLeader);for(var id in facilitators){var leader=facilitators[id];if(!leader.facilitator){continue;$menu.append('<li class="divider" role="separator"></li>');}else{byLeader.appendChild(input({text:leader.name,value:id,checked:true}));}}byLeader.appendChild(input({text:"Other",value:'',checked:true}));};var filterEvents=function filterEvents(){var visibleRegions=regions.map(function(_ref6){var region=_ref6.region;return region;}).filter(function(region){return(document.getElementById(region)||{}).checked;});var prereq=Array.from(document.querySelectorAll('input[name=prereq]')).find(function(_ref7){var checked=_ref7.checked;return checked;}).value||null;var level={},leader={};Array.from(document.querySelectorAll('#bylevels input')).forEach(function(_ref8){var value=_ref8.value,checked=_ref8.checked;return level[value]=checked;});Array.from(document.querySelectorAll('#byleader input')).forEach(function(_ref9){var value=_ref9.value,checked=_ref9.checked;return leader[value]=checked;});var otherFacs=byLeader.querySelector('input[value=""]').checked;var shownEvents=[];Array.from(events.children).forEach(function(e,n){var event=allevents[n];var showRegion=visibleRegions.indexOf(event.region)!==-1;var showPrereq=event.prereq==prereq||prereq=='*';var showLevels=level[event.level===0?0:event.level||''];var facs=event.facilitators;var picks=facs.filter(function(id){return leader[id];});var mainfacs=facs.filter(function(id){return id&&id in leader;});var showLeader=!!picks.length||otherFacs&&(!event.facilitators.length||picks.length!==mainfacs.length);var show=showRegion&&showPrereq&&showLevels&&showLeader;e.style.display=show?'block':'none';if(show)shownEvents.push(event);});var showDLC=!!shownEvents.length;document.querySelector('#fetch').style.display=showDLC?'block':'none';if(showDLC){var dlc=document.getElementById('dlc');var text=dlc.textContent,className=dlc.className;var name='2017 HAI events in '+visibleRegions.join('/');var filename='2017-hai-events-'+visibleRegions.join('+');if(prereq!=='*'){filename+='-'+(prereq?prereq.replace(/\s+/g,''):'public');var desc=document.querySelector('#p'+prereq);if(desc)desc=desc.nextSibling.nodeValue.trim();name+=prereq?' requiring '+desc:' open to the public';}filename+='.ics';var a=icalLink({text:text,name:name,filename:filename,events:shownEvents});a.id='dlc';a.className=className;dlc.parentNode.replaceChild(a,dlc);}};var fetchJSON=function fetchJSON(url){return new Promise(function(resolve,reject){fetch(url).catch(reject).then(function(res){return res.text().catch(reject).then(function(j){return resolve(JSON.parse(j));});});});};var cached=function cached(as,promiseFunc){var ms=arguments.length>2&&arguments[2]!==undefined?arguments[2]:3600e3;return new Promise(function(resolve,reject){var _JSON$parse=JSON.parse(localStorage[as]||'{}'),from=_JSON$parse.from,data=_JSON$parse.data;if(data&&Date.now()-(from||0)<ms){console.log('Cached '+as+' from last '+ms/3600e3+'h');resolve(data);}else{console.log('Fetching '+as+' from source');promiseFunc().catch(function(){return data?resolve(data):reject();}).then(function(data){localStorage[as]=JSON.stringify({from:Date.now(),data:data});resolve(data);});}});};var cacheJSON=function cacheJSON(url){return cached(url,function(){return fetchJSON(url);});};var geoLocate=function geoLocate(){return new Promise(function(resolve,reject){var _navigator=navigator,geolocation=_navigator.geolocation;if(geolocation){geolocation.getCurrentPosition(resolve,reject);}else{reject();}});};var geoLocateOrNorcal=function geoLocateOrNorcal(){return new Promise(function(resolve,reject){var resolveFallback=function resolveFallback(){return resolve({fallback:true,coords:{latitude:37.4,longitude:-122.1}});};var resolveJSONable=function resolveJSONable(_ref10){var coords=_ref10.coords;var latitude=coords.latitude,longitude=coords.longitude;resolve({coords:{latitude:latitude,longitude:longitude}});};geoLocate().then(resolveJSONable).catch(resolveFallback);});};var cachedGeo=function cachedGeo(){return cached('geo',geoLocateOrNorcal);};var ical=function ical(_ref11){var name=_ref11.name,desc=_ref11.desc,domain=_ref11.domain,events=_ref11.events;function vevent(_ref12){var summary=_ref12.summary,title=_ref12.title,start=_ref12.start,end=_ref12.end,uid=_ref12.uid,geo=_ref12.geo,url=_ref12.url,description=_ref12.description;start=date(start);end=date(end);var now=date(new Date());var name=summary||title||'';var slug=name.replace(/\W+/g,'-');if(!uid)uid=start+'-'+slug;var props=['UID:'+uid+'@'+domain,'DTSTAMP:'+now,'DTSTART:'+start,'DTEND:'+end];if(name)props.push('SUMMARY:'+name);if(geo)props.push('GEO:'+geo);if(url)props.push('URL:'+url);if(description)props.push('DESCRIPTION:'+description);return['BEGIN:VEVENT'].concat(props,['END:VEVENT']).join('\r\n');}domain=domain||location.hostname;var optionals=[];if(name){optionals.push('X-WR-CALNAME:'+name);}if(desc){optionals.push('X-WR-CALDESC:'+desc);}return['BEGIN:VCALENDAR','VERSION:2.0','METHOD:PUBLISH','PRODID:-//'+domain+'//iCal Events'].concat(optionals,_toConsumableArray(events.map(vevent)),['END:VCALENDAR','']).join('\r\n');};var icalLink=function icalLink(_ref13){var text=_ref13.text,name=_ref13.name,filename=_ref13.filename,domain=_ref13.domain,events=_ref13.events;var ics=ical({name:name,domain:domain,events:events});var a=document.createElement('a');a.href='data:text/calendar,'+encodeURIComponent(ics);a.download=filename||'calendar.ics';a.textContent=text||name;return a;};var gcalUrl=function gcalUrl(event){var summary=event.summary,title=event.title,start=event.start,end=event.end,url=event.url,description=event.description;var calurl='https://www.google.com/calendar/render';var query={action:'TEMPLATE',text:summary||title,dates:date(start)+'/'+date(end),details:description,location:url,sf:'true',output:'xml'};var sep='?';for(var key in query){var val=query[key];if(val)calurl+=''+sep+key+'='+encodeURIComponent(val);sep='&';}return calurl;};var gcalLink=function gcalLink(event){var a=document.createElement('a');var i=document.createElement('img');i.src='https://i.imgur.com/QlbTNwa.png';i.width=i.height=32;i.border=0;a.appendChild(i);a.href=gcalUrl(event);a.target='_blank';var n=event.summary||event.title;if(n)a.title=i.alt='Add "'+n+'" to Google Calendar';return a;};var parseDate=function parseDate(t){if((typeof t==='undefined'?'undefined':_typeof(t))!=='object'||!(t instanceof Date)){if(typeof t!=='number'){t=Date.parse(t);}t=new Date(t);}return t;};var date=function date(t){return parseDate(t).toISOString().replace(/[-:]|\.\d*/g,'');};var iso=function iso(t){function p(n,c){return('0000'+n).slice(-(c||2));}return[t.getFullYear(),'-',p(t.getMonth()+1),'-',p(t.getDate()),' ',p(t.getHours()),':',p(t.getMinutes())].join('');};var toRadians=function toRadians(n){return n*Math.PI/180;};var toDegrees=function toDegrees(n){return n/Math.PI*180;};var haversineAngularDistance=function haversineAngularDistance(_ref14,_ref15){var _ref17=_slicedToArray(_ref14,2),lat1=_ref17[0],lng1=_ref17[1];var _ref16=_slicedToArray(_ref15,2),lat2=_ref16[0],lng2=_ref16[1];var φ1=toRadians(lat1);var φ2=toRadians(lat2);var Δφ=toRadians(lat2-lat1);var Δλ=toRadians(lng2-lng1);var a=Math.sin(Δφ/2)*Math.sin(Δφ/2)+Math.cos(φ1)*Math.cos(φ2)*Math.sin(Δλ/2)*Math.sin(Δλ/2);return toDegrees(2*Math.atan2(Math.sqrt(a),Math.sqrt(1-a)));};var getClosestSite=function getClosestSite(_ref18,center){var latitude=_ref18.latitude,longitude=_ref18.longitude;var me=[latitude,longitude];var site=null;var closest=Infinity;window.regions=regions=[];for(var region in center){var distance=haversineAngularDistance(me,center[region]);var kilometers=6371*toRadians(distance);var km=Math.round(kilometers);var mi=Math.round(kilometers/1.60934);var name=center[region][2];var _site=center[region][3];regions.push({region:region,name:name,site:_site,km:km,mi:mi,className:'event-'+region});if(distance<closest){closest=distance;_site=region;}}return{regions:regions,region:site};};var narrowToClosestSite=function narrowToClosestSite(_ref19,events){var coords=_ref19.coords;var _getClosestSite=getClosestSite(coords,center),regions=_getClosestSite.regions,region=_getClosestSite.region;window.region=region;window.regions=regions=regions.sort(function(a,b){return a.km-b.km;});return{region:region,regions:regions,events:events.filter(function(event){return event.region===region;})};};Promise.all([cachedGeo(),cacheJSON(eventUrl),cacheJSON(leaderUrl)]).then(function(_ref20){var _ref21=_slicedToArray(_ref20,3),pos=_ref21[0],allevents=_ref21[1],facilitators=_ref21[2];window.allevents=allevents=allevents.map(decodeEvent).filter(eventInFuture);var _narrowToClosestSite=narrowToClosestSite(pos,allevents),region=_narrowToClosestSite.region,regions=_narrowToClosestSite.regions,events=_narrowToClosestSite.events;window.haievents=events;initEventList(allevents);initFilterList(regions,window.facilitators=facilitators);filterEvents();}); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| const deQuery = (q = location.search, o = {}, d = decodeURIComponent) => | |
| (q.replace(/[?&]([^&=]*)(?:=([^&]*))?/g, | |
| (a, k, v) => o[d(k)] = d(v||'') | |
| ), o); | |
| const query = deQuery(); | |
| // calendar of events; an array of events, at minimum: | |
| // {title, start, end, url, className: "event-norcal"} | |
| // but also supported and preferred (will be inferred) | |
| // {region, level, prereq, geo, uid} | |
| const eventUrl = query.e || 'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/5f0411c2f93d4cbd894833b9c9629a7c2f49a2aa/events.json'; | |
| const leaderUrl = query.l || 'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/bd8ef78c433e1253a7b4978bb69551663bd62636/leaders.json'; | |
| let regions = null; | |
| const center = | |
| { aus: [-32.7278575, 151.2604738, 'Australia', 'Hunter Valley'] | |
| , ca: [43.9888232, -80.0262646, 'Canada', 'Ecology Retreat Centre'] | |
| , de: [52.0668495, 7.2107544, 'Germany', 'Seminarhof'] | |
| , east: [42.4965698, -72.9462321, 'US East Coast', 'Earthdance'] | |
| , midwest: [40.1591988, -85.2805088, 'US Midwest', 'Oakwood Retreat Center'] | |
| , norcal: [38.5369205, -123.0701147, 'US Northern California', 'Wildwood'] | |
| , socal: [34.1349793, -116.3599965, 'US Southern California', 'Joshua Tree Retreat Center'] | |
| , uk: [51.2727283, -2.4157968, 'United Kingdom', 'Ammerdown'] | |
| }; | |
| const places = Object.keys(center); | |
| const prereqs = | |
| { "Any": "*" | |
| , "None": 0 | |
| , "HAI 1": 1 | |
| , "HAI 2": 2 | |
| , "HAI 3": 3 | |
| , "HAI 4": 4 | |
| , "HAI 5": 5 | |
| , "On Team": "t" | |
| }; | |
| const levels = | |
| { "HAI Mini": 0 | |
| , "-": null | |
| , "HAI 1": 1 | |
| , "HAI 2": 2 | |
| , "HAI 3": 3 | |
| , "HAI 4": 4 | |
| , "HAI 5": 5 | |
| , "HAI 6": 6 | |
| , "HAI 7": 7 | |
| , "HAI 8": 8 | |
| , "HAI 9": 9 | |
| , "--": null | |
| , "Couples 1": "c1" | |
| , "Couples 2": "c2" | |
| , "---": "Team Related" | |
| , "Assistant Training": "at" | |
| , "Active Listening Training": "alt" | |
| , "Team Workshop": "tw" | |
| , "Intern Workshop": "iw" | |
| , "----": null | |
| , "Others": "" | |
| }; | |
| const defaultPrereqs = | |
| { "(team|intern).*(workshop|meeting)": "t" | |
| , "mystery upper level": 5 | |
| , "loving sex": 5 | |
| , "assistant training": 2 | |
| , "active listening": 1 | |
| , "community (night|weekend)": 1 | |
| , "(monthly|hai).*connect": 1 | |
| , "support group": 1 | |
| }; | |
| const defaultLevels = | |
| { "mini": 0 | |
| , "assistant training": "at" | |
| , "active listening": "alt" | |
| , "lc1": "c1" | |
| , "igniting your love": "c1" | |
| , "lc2": "c2" | |
| , "heart to heart": "c2" | |
| , "team.*workshop": "tw" | |
| , "intern.*workshop": "iw" | |
| }; | |
| const events = document.querySelector('#events'); | |
| const byRegion = document.querySelector('#byregion'); | |
| const byPrereq = document.querySelector('#byprereq'); | |
| const byLevels = document.querySelector('#bylevels'); | |
| const byLeader = document.querySelector('#byleader'); | |
| const now = Date.now(); | |
| const eventInFuture = ({end}) => end > now; | |
| const decodeEvent = ({title, start, end, url, className, geo, uid, level, prereq, region, facilitators}) => { | |
| title = title.replace(/\s+/g, ' ').trim().replace(/[,.]+$/, ''); | |
| title = title.replace(/(.*), Level (\d+)$/, (all, name, num) => { | |
| if (level === undefined) level = num; | |
| return num ? `HAI ${num}: ${name}` : name | |
| }); | |
| if (level === undefined) { | |
| for (let re in defaultLevels) { | |
| if (level != null) break; | |
| if (title.match(new RegExp(re, 'i'))) { | |
| level = defaultLevels[re]; | |
| } | |
| } | |
| } | |
| if (prereq === undefined) { | |
| prereq = level && (level > 5 ? 5 : level - 1) || null; | |
| for (let re in defaultPrereqs) { | |
| if (prereq) break; | |
| if (title.match(new RegExp(re, 'i'))) { | |
| prereq = defaultPrereqs[re]; | |
| } | |
| } | |
| } | |
| if (/^\//.test(url || '')) { | |
| url = 'http://www.hai.org' + url.replace('EventDetail?', 'EventDetail_pub?'); | |
| } | |
| if (region === undefined) { | |
| region = className.split('-')[1].toLowerCase(); | |
| } | |
| if (geo === undefined) geo = region; | |
| if (uid === undefined) uid = (url.match(/id=([^&]+)/) || [])[1]; | |
| if (!title.match(/ [-@] /)) title += ' @ ' + center[region][2]; | |
| return ( | |
| { title, url, className | |
| , facilitators | |
| , region | |
| , level | |
| , prereq | |
| , geo | |
| , start: parseDate(start) | |
| , end: parseDate(end) | |
| } | |
| ); | |
| }; | |
| const initEventList = (allevents, pos) => { | |
| for (const event of allevents) { | |
| const {className, region, prereq, title, start, end, url} = event; | |
| const t = iso(start); | |
| const e = document.createElement('li'); | |
| e.className = className; | |
| let a = document.createElement('a'); | |
| a.href = url; | |
| a.textContent = `${t}: ${title}`; | |
| e.appendChild(gcalLink(event)); | |
| e.appendChild(a); | |
| a.style.marginLeft = '8px'; | |
| events.appendChild(e); | |
| } | |
| }; | |
| const initFilterList = (regions, facilitators) => { | |
| function input({ text, title, id, type, name, value, checked, onclick }) { | |
| const li = document.createElement('li'); | |
| let label = document.createElement('label'); | |
| let input = document.createElement('input'); | |
| if (id) input.id = id; | |
| if (name) input.name = name; | |
| if (value != null) input.value = value; | |
| input.checked = !!checked; | |
| input.type = type || 'checkbox'; | |
| input.onclick = onclick || filterEvents; | |
| if (title) label.title = title; | |
| li.appendChild(label); | |
| label.appendChild(input); | |
| label.appendChild(document.createTextNode(' ' + text)); | |
| return li; | |
| } | |
| if (initFilterList.done) return; | |
| initFilterList.done = true; | |
| // in Germany and Canada, show units as km instead of miles | |
| let unit = ({de: 'km', ca: 'km'})[regions[0].region] || 'mi'; | |
| byRegion.appendChild(input({ text: 'All', onclick: (e) => { | |
| const {checked} = e.target; | |
| regions.forEach(({region}) => document.getElementById(region).checked = checked); | |
| filterEvents(); | |
| } })); | |
| regions.forEach(({ className, region, name, site, km, mi }, nth) => { | |
| let dist = ({km, mi})[unit] + ({km:'km', mi:'mi'})[unit], info; | |
| if (location.hash === '#debug') | |
| console.log(info = `${km}km / ${mi}mi to ${region} (${site})`); | |
| else | |
| console.log(info = `${dist} to ${region} (${site})`); | |
| let li = input({text: name, id: region, checked: !nth, title: `~${info}`}); | |
| byRegion.appendChild(li); | |
| }); | |
| for (const text in prereqs) { | |
| const prereq = prereqs[text]; | |
| byPrereq.appendChild(input( | |
| { text | |
| , type: 'radio' | |
| , name: 'prereq' | |
| , value: prereq || '' | |
| , id: `p${prereq}` | |
| , checked: !prereq | |
| } | |
| )); | |
| } | |
| // "All levels" toggle | |
| byLevels.appendChild(input({ text: 'All', checked: true, onclick: (e) => { | |
| const {checked} = e.target; | |
| for (const text in levels) { | |
| if (/^-+$/.test(text)) continue; | |
| const level = levels[text]; | |
| document.getElementById(`l${level}`).checked = checked; | |
| } | |
| filterEvents(); | |
| } })); | |
| let $menu = $(byLevels); | |
| for (const text in levels) { | |
| const level = levels[text]; | |
| if (/^-+$/.test(text)) { | |
| $menu.append('<li class="divider" role="separator"></li>'); | |
| if (level) { | |
| $menu.append(`<li class="dropdown-header">${level}</li>`); | |
| } | |
| } else { | |
| byLevels.appendChild(input( | |
| { text | |
| , value: level | |
| , id: `l${level}` | |
| , checked: true | |
| } | |
| )); | |
| } | |
| } | |
| // "All facilitators" toggle | |
| byLeader.appendChild(input({ text: 'All', checked: true, onclick: (e) => { | |
| const {checked} = e.target; | |
| const checks = Object.assign({"": "Other"}, facilitators); | |
| for (const id in checks) { | |
| const f = facilitators[id]; | |
| if (f ? f.facilitator : !id) { | |
| document.querySelector(`#byleader input[value="${id}"]`).checked = checked; | |
| } | |
| } | |
| filterEvents(); | |
| } })); | |
| $menu = $(byLeader); | |
| for (const id in facilitators) { | |
| const leader = facilitators[id]; | |
| if (!leader.facilitator) { | |
| continue; | |
| $menu.append('<li class="divider" role="separator"></li>'); | |
| } else { | |
| byLeader.appendChild(input( | |
| { text: leader.name | |
| , value: id | |
| , checked: true | |
| } | |
| )); | |
| } | |
| } | |
| byLeader.appendChild(input( | |
| { text: "Other" | |
| , value: '' | |
| , checked: true | |
| } | |
| )); | |
| }; | |
| const filterEvents = () => { | |
| const visibleRegions = regions.map(({region}) => region).filter(region => | |
| (document.getElementById(region) || {}).checked | |
| ); | |
| const prereq = Array.from(document.querySelectorAll('input[name=prereq]')).find( | |
| ({ checked }) => checked | |
| ).value || null; | |
| const level = {}, leader = {}; | |
| Array.from(document.querySelectorAll('#bylevels input')).forEach( | |
| ({ value, checked }) => level[value] = checked | |
| ); | |
| Array.from(document.querySelectorAll('#byleader input')).forEach( | |
| ({ value, checked }) => leader[value] = checked | |
| ); | |
| const otherFacs = byLeader.querySelector('input[value=""]').checked; | |
| const shownEvents = []; | |
| Array.from(events.children).forEach((e, n) => { | |
| const event = allevents[n]; | |
| const showRegion = visibleRegions.indexOf(event.region) !== -1; | |
| const showPrereq = event.prereq == prereq || prereq == '*'; | |
| const showLevels = level[event.level === 0 ? 0 : event.level || '']; | |
| const facs = event.facilitators; | |
| const picks = facs.filter(id => leader[id]); | |
| const mainfacs = facs.filter(id => id && (id in leader)); | |
| const showLeader = !!picks.length || otherFacs && | |
| (!event.facilitators.length || picks.length !== mainfacs.length); | |
| const show = showRegion && showPrereq && showLevels && showLeader; | |
| e.style.display = show ? 'block' : 'none'; | |
| if (show) shownEvents.push(event); | |
| }); | |
| // update ical link | |
| const showDLC = !!shownEvents.length; | |
| document.querySelector('#fetch').style.display = showDLC ? 'block' : 'none'; | |
| if (showDLC) { | |
| const dlc = document.getElementById('dlc'); | |
| const text = dlc.textContent, {className} = dlc; | |
| let name = `2017 HAI events in ${visibleRegions.join('/')}`; | |
| let filename = `2017-hai-events-${visibleRegions.join('+')}`; | |
| if (prereq !== '*') { | |
| filename += '-' + (prereq ? prereq.replace(/\s+/g, '') : 'public'); | |
| let desc = document.querySelector(`#p${prereq}`); | |
| if (desc) desc = desc.nextSibling.nodeValue.trim(); | |
| name += prereq ? ` requiring ${desc}` : ' open to the public'; | |
| } | |
| filename += '.ics'; | |
| const a = icalLink({text, name, filename, events: shownEvents}); | |
| a.id = 'dlc'; | |
| a.className = className; | |
| dlc.parentNode.replaceChild(a, dlc); | |
| } | |
| }; | |
| const fetchJSON = (url) => new Promise((resolve, reject) => { | |
| fetch(url).catch(reject).then( | |
| (res) => res.text().catch(reject).then( | |
| (j) => resolve(JSON.parse(j)) | |
| ) | |
| ); | |
| }); | |
| const cached = (as, promiseFunc, ms = 3600e3) => new Promise((resolve, reject) => { | |
| let {from, data} = JSON.parse(localStorage[as] || '{}'); | |
| if (data && Date.now() - (from || 0) < ms) { | |
| console.log(`Cached ${as} from last ${ms/3600e3}h`); | |
| resolve(data); | |
| } else { | |
| console.log(`Fetching ${as} from source`); | |
| promiseFunc().catch( | |
| () => data ? resolve(data) : reject() | |
| ).then( | |
| (data) => { | |
| localStorage[as] = JSON.stringify({from: Date.now(), data}); | |
| resolve(data); | |
| } | |
| ); | |
| } | |
| }); | |
| const cacheJSON = (url) => cached(url, () => fetchJSON(url)); | |
| const geoLocate = () => new Promise((resolve, reject) => { | |
| const {geolocation} = navigator; | |
| if (geolocation) { | |
| geolocation.getCurrentPosition(resolve, reject); | |
| } else { | |
| reject(); | |
| } | |
| }); | |
| const geoLocateOrNorcal = () => new Promise((resolve, reject) => { | |
| const resolveFallback = () => resolve( | |
| { fallback: true | |
| , coords: | |
| { latitude: 37.4 | |
| , longitude: -122.1 | |
| } | |
| } | |
| ); | |
| const resolveJSONable = ({coords}) => { | |
| const {latitude, longitude} = coords; | |
| resolve({coords: {latitude, longitude}}); | |
| }; | |
| geoLocate().then(resolveJSONable).catch(resolveFallback); | |
| }); | |
| const cachedGeo = () => cached('geo', geoLocateOrNorcal); | |
| const ical = ({name, desc, domain, events}) => { | |
| function vevent({summary, title, start, end, uid, geo, url, description}) { | |
| start = date(start); | |
| end = date(end); | |
| const now = date(new Date); | |
| const name = summary || title || ''; | |
| const slug = name.replace(/\W+/g, '-'); | |
| if (!uid) uid = `${start}-${slug}`; | |
| const props = | |
| [ `UID:${uid}@${domain}` | |
| , `DTSTAMP:${now}` | |
| , `DTSTART:${start}` | |
| , `DTEND:${end}` | |
| ]; | |
| if (name) props.push(`SUMMARY:${name}`); | |
| if (geo) props.push(`GEO:${geo}`); | |
| if (url) props.push(`URL:${url}`); | |
| if (description) props.push(`DESCRIPTION:${description}`); | |
| return ['BEGIN:VEVENT', ...props, 'END:VEVENT'].join('\r\n'); | |
| } | |
| domain = domain || location.hostname; | |
| const optionals = []; | |
| if (name) { optionals.push(`X-WR-CALNAME:${name}`); } | |
| if (desc) { optionals.push(`X-WR-CALDESC:${desc}`); } | |
| return [ 'BEGIN:VCALENDAR' | |
| , 'VERSION:2.0' | |
| , 'METHOD:PUBLISH' | |
| , `PRODID:-//${domain}//iCal Events` | |
| , ...optionals | |
| , ...events.map(vevent) | |
| , 'END:VCALENDAR', '' | |
| ].join('\r\n'); | |
| }; | |
| // caniuse.com/#search=download - covered mostly everywhere | |
| const icalLink = ({text, name, filename, domain, events}) => { | |
| var ics = ical({name, domain, events}); | |
| var a = document.createElement('a'); | |
| //a.href = `data:text/calendar;base64,${btoa(ics)}`; | |
| a.href = `data:text/calendar,${encodeURIComponent(ics)}`; | |
| a.download = filename || 'calendar.ics'; | |
| a.textContent = text || name; | |
| return a; | |
| } | |
| const gcalUrl = (event) => { | |
| let {summary, title, start, end, url, description} = event; | |
| let calurl = 'https://www.google.com/calendar/render'; | |
| let query = | |
| { action: 'TEMPLATE' | |
| , text: summary || title | |
| , dates: date(start) + '/' + date(end) | |
| , details: description | |
| , location: url | |
| , sf: 'true' | |
| , output: 'xml' | |
| }; | |
| let sep = '?'; | |
| for (let key in query) { | |
| let val = query[key]; | |
| if (val) calurl += `${sep}${key}=${encodeURIComponent(val)}`; | |
| sep = '&'; | |
| } | |
| return calurl; | |
| } | |
| const gcalLink = (event) => { | |
| var a = document.createElement('a'); | |
| var i = document.createElement('img'); | |
| i.src = 'https://i.imgur.com/QlbTNwa.png'; | |
| i.width = i.height = 32; | |
| i.border = 0; | |
| a.appendChild(i); | |
| a.href = gcalUrl(event); | |
| a.target = '_blank'; | |
| var n = event.summary || event.title; | |
| if (n) a.title = i.alt = `Add "${n}" to Google Calendar`; | |
| return a; | |
| } | |
| const parseDate = (t) => { | |
| if (typeof t !== 'object' || !(t instanceof Date)) { | |
| if (typeof t !== 'number') { t = Date.parse(t); } | |
| t = new Date(t); | |
| } | |
| return t; | |
| } | |
| const date = (t) => parseDate(t).toISOString().replace(/[-:]|\.\d*/g, ''); | |
| const iso = (t) => { | |
| function p(n, c) { | |
| return ('0000' + n).slice(-(c || 2)); | |
| } | |
| return [ t.getFullYear(), '-' | |
| , p(t.getMonth() + 1), '-' | |
| , p(t.getDate()), ' ' | |
| , p(t.getHours()), ':' | |
| , p(t.getMinutes()) | |
| ].join(''); | |
| } | |
| const toRadians = (n) => n * Math.PI / 180; | |
| const toDegrees = (n) => n / Math.PI * 180; | |
| const haversineAngularDistance = ([lat1, lng1], [lat2, lng2]) => { | |
| const φ1 = toRadians(lat1); | |
| const φ2 = toRadians(lat2); | |
| const Δφ = toRadians(lat2 - lat1); | |
| const Δλ = toRadians(lng2 - lng1); | |
| const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + | |
| Math.cos(φ1) * Math.cos(φ2) * | |
| Math.sin(Δλ / 2) * Math.sin(Δλ / 2); | |
| return toDegrees(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))); | |
| }; | |
| const getClosestSite = ({latitude, longitude}, center) => { | |
| const me = [latitude, longitude]; | |
| let site = null; | |
| let closest = Infinity; | |
| window.regions = regions = []; | |
| for (let region in center) { | |
| let distance = haversineAngularDistance(me, center[region]); | |
| let kilometers = 6371 * toRadians(distance); | |
| let km = Math.round(kilometers); | |
| let mi = Math.round(kilometers / 1.60934); | |
| let name = center[region][2]; | |
| let site = center[region][3]; | |
| regions.push({region, name, site, km, mi, className: `event-${region}` }); | |
| if (distance < closest) { | |
| closest = distance; | |
| site = region; | |
| } | |
| } | |
| return {regions, region: site}; | |
| }; | |
| const narrowToClosestSite = ({coords}, events) => { | |
| let {regions, region} = getClosestSite(coords, center); | |
| window.region = region; | |
| window.regions = regions = regions.sort((a, b) => a.km - b.km); | |
| return {region, regions, events: events.filter( | |
| (event) => event.region === region | |
| )}; | |
| } | |
| Promise.all( | |
| [ cachedGeo() | |
| , cacheJSON(eventUrl) | |
| , cacheJSON(leaderUrl) | |
| ]) | |
| .then(([pos, allevents, facilitators]) => { | |
| window.allevents = allevents = allevents.map(decodeEvent).filter(eventInFuture); | |
| const {region, regions, events} = narrowToClosestSite(pos, allevents); | |
| window.haievents = events; | |
| initEventList(allevents); | |
| initFilterList(regions, window.facilitators = facilitators); | |
| filterEvents(); | |
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| [ {"title":"Free Mini Workshop-Theme: Creating Authentic Connections","start":"2016-11-02T23:45:00.000Z","end":"2016-11-03T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6mdZEAR","className":"event-midwest","facilitators":["005i0000002EAGMAA4"]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2016-11-03T02:30:00.000Z","end":"2016-11-03T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0xYEAT","className":"event-norcal","facilitators":[]} | |
| , {"title":"Loving Sex","start":"2016-11-04T22:00:00.000Z","end":"2016-11-06T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRuQEEA1","className":"event-east","facilitators":["005i0000001nIiIAAU","005i0000002EGXGAA4"]} | |
| , {"title":"Sacred Energy Exchange, Level 8","start":"2016-11-05T02:00:00.000Z","end":"2016-11-07T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPXNEA5","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002E85yAAC"]} | |
| , {"title":"Midwest HAI Connect in Livonia","start":"2016-11-10T00:00:00.000Z","end":"2016-11-10T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3iHfEAJ","className":"event-midwest","facilitators":["005i0000002d8AWAAY","005i0000002d91XAAQ"]} | |
| , {"title":"MONTHLY CONNECT - SoCal","start":"2016-11-10T03:30:00.000Z","end":"2016-11-10T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UycIvEAJ","className":"event-socal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Awakening to Love -- A Beginning @ Santa Cruz","start":"2016-11-10T03:30:00.000Z","end":"2016-11-10T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRzCHEA1","className":"event-norcal","facilitators":["005i0000002bBetAAE"]} | |
| , {"title":"Free Workshop: Opening to Love","start":"2016-11-10T23:45:00.000Z","end":"2016-11-11T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6mdPEAR","className":"event-midwest","facilitators":["005i0000002EAGMAA4"]} | |
| , {"title":"Free Mini Workshop - Theme: Finding Love – An Evening Exploration @ Cotati","start":"2016-11-11T03:30:00.000Z","end":"2016-11-11T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz97EAD","className":"event-norcal","facilitators":["005i0000002Drc7AAC"]} | |
| , {"title":"Sacred Energy Exchange, Level 8","start":"2016-11-11T06:30:00.000Z","end":"2016-11-13T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRfBsEAL","className":"event-aus","facilitators":[]} | |
| , {"title":"Free Mini Workshop","start":"2016-11-11T13:00:00.000Z","end":"2016-11-13T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSfpoEAD","className":"event-east","facilitators":[]} | |
| , {"title":"Living at Choice, Level 3","start":"2016-11-12T00:00:00.000Z","end":"2016-11-13T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QO21JEAT","className":"event-midwest","facilitators":["005i0000002EGXGAA4","005i0000002E85yAAC"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2016-11-12T03:00:00.000Z","end":"2016-11-14T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPVlEAP","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| , {"title":"Know your No, Vitalize Your Yes!","start":"2016-11-12T18:00:00.000Z","end":"2016-11-13T00:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6lO8EAJ","className":"event-norcal","facilitators":["005i0000002EChFAAW"]} | |
| , {"title":"Ontario Mini,","start":"2016-11-12T19:00:00.000Z","end":"2016-11-12T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U75haEAB","className":"event-ca","facilitators":[]} | |
| , {"title":"Boston Area Completion Party for the Loving Sex Workshop","start":"2016-11-12T23:00:00.000Z","end":"2016-11-13T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6ys8EAB","className":"event-east","facilitators":[]} | |
| , {"title":"MONTHLY CONNECT - Vista","start":"2016-11-13T01:00:00.000Z","end":"2016-11-13T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6qa2EAB","className":"event-socal","facilitators":[]} | |
| , {"title":"Community Night in San Jose","start":"2016-11-13T03:00:00.000Z","end":"2016-11-13T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U78SnEAJ","className":"event-norcal","facilitators":["005i0000002bbv0AAA","005i0000002bBetAAE"]} | |
| , {"title":"First Sunday Marin County HAI Connect (Support Group)","start":"2016-11-13T22:00:00.000Z","end":"2016-11-14T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3jOnEAJ","className":"event-norcal","facilitators":[]} | |
| , {"title":"Starlight in the East Bay Community Events Team Meeting","start":"2016-11-16T02:15:00.000Z","end":"2016-11-16T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U30dtEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Third Tuesday Monthly HAI Connect (Support Group) – San Jose","start":"2016-11-16T03:30:00.000Z","end":"2016-11-16T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRq6DEAT","className":"event-norcal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Opening Your Heart to Intimacy","start":"2016-11-18T03:30:00.000Z","end":"2016-11-18T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz5yEAD","className":"event-norcal","facilitators":["005i0000002D4iTAAS"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2016-11-18T06:30:00.000Z","end":"2016-11-20T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRfBJEA1","className":"event-aus","facilitators":[]} | |
| , {"title":"Living at Choice, Level 3","start":"2016-11-19T03:00:00.000Z","end":"2016-11-21T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Q17wlEAB","className":"event-socal","facilitators":["005i0000002EChFAAW","005i0000001nIiIAAU"]} | |
| , {"title":"Living at Choice, Level 3","start":"2016-11-19T03:00:00.000Z","end":"2016-11-21T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPW5EAP","className":"event-norcal","facilitators":["005i0000002E85yAAC","005i0000002EGDBAA4"]} | |
| , {"title":"Ontario Mini,","start":"2016-11-19T19:00:00.000Z","end":"2016-11-19T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U71XKEAZ","className":"event-ca","facilitators":[]} | |
| , {"title":"Free Mini Workshop-Theme: Creating Love and Connection","start":"2016-11-19T22:30:00.000Z","end":"2016-11-20T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3FJ9EAN","className":"event-midwest","facilitators":["005i0000002d8UfAAI"]} | |
| , {"title":"East Bay Weekend HAI Connect (Support Group)","start":"2016-11-20T22:00:00.000Z","end":"2016-11-21T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U739bEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Midwest HAI Connect - Online on Zoom","start":"2016-11-22T02:00:00.000Z","end":"2016-11-22T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U73gXEAR","className":"event-midwest","facilitators":[]} | |
| , {"title":"Midwest HAI Connect in Berkley","start":"2016-11-23T00:00:00.000Z","end":"2016-11-23T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3iIEEAZ","className":"event-midwest","facilitators":["005i0000002cJZ9AAM","005i0000002d8AWAAY"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2016-11-25T23:00:00.000Z","end":"2016-11-27T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QOCuzEAH","className":"event-ca","facilitators":["005i0000001nIiIAAU","005i0000002EGXGAA4"]} | |
| , {"title":"The Dance Between Surrender & Control, Level 5","start":"2016-11-26T03:00:00.000Z","end":"2016-11-28T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPWyEAP","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"Saturday Night HAI","start":"2016-11-26T23:30:00.000Z","end":"2016-11-27T04:15:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U71xMEAR","className":"event-midwest","facilitators":[]} | |
| , {"title":"Saturday Night HAI - Dance Party","start":"2016-11-27T02:15:00.000Z","end":"2016-11-27T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U723hEAB","className":"event-midwest","facilitators":[]} | |
| , {"title":"Loving Yourself, Level 2","start":"2016-12-02T23:00:00.000Z","end":"2016-12-04T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRQAIEA5","className":"event-east","facilitators":["005i0000002EChFAAW","005i0000002E85yAAC"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2016-12-03T00:00:00.000Z","end":"2016-12-04T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QOAxzEAH","className":"event-midwest","facilitators":["005i0000002EGXGAA4","005i0000002EcbeAAC"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2016-12-03T03:00:00.000Z","end":"2016-12-05T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000OKPTpEAP","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| , {"title":"South Bay Saturday Monthly HAI Connect - Portola Valley","start":"2016-12-03T22:00:00.000Z","end":"2016-12-04T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0yWEAT","className":"event-norcal","facilitators":[]} | |
| , {"title":"Monthly Connect and Holiday Gathering-SoCal","start":"2016-12-03T22:30:00.000Z","end":"2016-12-04T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UycJ0EAJ","className":"event-socal","facilitators":[]} | |
| , {"title":"Community Night in Petaluma","start":"2016-12-04T03:00:00.000Z","end":"2016-12-04T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U75LEEAZ","className":"event-norcal","facilitators":["005i0000002EbiSAAS","005i0000002bWLFAA2"]} | |
| , {"title":"Free Mini Workshop - Theme: Finding Love – An Exploration @ Topanga","start":"2016-12-04T21:00:00.000Z","end":"2016-12-05T00:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPZEA1","className":"event-socal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Communicating With Loved Ones @ San Jose","start":"2016-12-06T03:30:00.000Z","end":"2016-12-06T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz9bEAD","className":"event-norcal","facilitators":["005i0000002bBetAAE"]} | |
| , {"title":"NYC Area Level 2 Completion Party and Support Group","start":"2016-12-08T00:00:00.000Z","end":"2016-12-08T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6ysIEAR","className":"event-east","facilitators":[]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2016-12-08T03:30:00.000Z","end":"2016-12-08T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0xdEAD","className":"event-norcal","facilitators":[]} | |
| , {"title":"Livingston NJ Support Group","start":"2016-12-09T00:00:00.000Z","end":"2016-12-09T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSpHKEA1","className":"event-east","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Relational Intimacy – An Evening Exploration","start":"2016-12-09T03:30:00.000Z","end":"2016-12-09T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRz89EAD","className":"event-norcal","facilitators":["005i0000002Drc7AAC"]} | |
| , {"title":"Free Mini Workshop-Theme: Be Love, Find Joy!","start":"2016-12-10T00:00:00.000Z","end":"2016-12-10T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRydWEAT","className":"event-midwest","facilitators":["005i0000002d8UfAAI"]} | |
| , {"title":"Boston Area Level 2 Completion Party","start":"2016-12-10T23:00:00.000Z","end":"2016-12-11T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6ysNEAR","className":"event-east","facilitators":[]} | |
| , {"title":"MONTHLY CONNECT - Encinitas","start":"2016-12-11T01:00:00.000Z","end":"2016-12-11T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6qZxEAJ","className":"event-socal","facilitators":[]} | |
| , {"title":"Holiday Party 2016","start":"2016-12-11T03:00:00.000Z","end":"2016-12-11T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRnTXEA1","className":"event-norcal","facilitators":[]} | |
| , {"title":"First Sunday Marin County HAI Connect (Support Group)","start":"2016-12-11T22:00:00.000Z","end":"2016-12-12T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3jOsEAJ","className":"event-norcal","facilitators":[]} | |
| , {"title":"Starlight in the East Bay Community Events Team Meeting","start":"2016-12-14T02:15:00.000Z","end":"2016-12-14T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U30dyEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Midwest HAI Connect in Livonia","start":"2016-12-15T00:00:00.000Z","end":"2016-12-15T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U3iHkEAJ","className":"event-midwest","facilitators":["005i0000003TBx7AAG"]} | |
| , {"title":"Free Mini Workshop - Theme: Exploring Relational Intimacy @ Culver City","start":"2016-12-15T03:00:00.000Z","end":"2016-12-15T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPeEAL","className":"event-socal","facilitators":[]} | |
| , {"title":"East Bay Weekend HAI Connect (Support Group)","start":"2016-12-18T22:00:00.000Z","end":"2016-12-19T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U74j1EAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Midwest HAI Connect - Online on Zoom","start":"2016-12-20T01:00:00.000Z","end":"2016-12-20T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSm0bEAD","className":"event-midwest","facilitators":[]} | |
| , {"title":"Third Tuesday Monthly HAI Connect (Support Group) – San Jose","start":"2016-12-21T03:30:00.000Z","end":"2016-12-21T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QRq6IEAT","className":"event-norcal","facilitators":[]} | |
| , {"title":"Concert: Heather Katz & Friends","start":"2016-12-31T00:00:00.000Z","end":"2016-12-31T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSfSUEA1","className":"event-midwest","facilitators":[]} | |
| , {"title":"South Bay Saturday Monthly HAI Connect - Portola Valley","start":"2016-12-31T22:00:00.000Z","end":"2017-01-01T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000QS0ybEAD","className":"event-norcal","facilitators":[]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-01-05T03:30:00.000Z","end":"2017-01-05T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790gEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"YES! Ignite your Heart's Desires","start":"2017-01-07T03:00:00.000Z","end":"2017-01-08T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U75N0EAJ","className":"event-norcal","facilitators":[]} | |
| , {"title":"Spirituality and Sexuality, Level 4","start":"2017-01-07T03:00:00.000Z","end":"2017-01-09T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6wFVEAZ","className":"event-socal","facilitators":[]} | |
| , {"title":"MONTHLY CONNECT - Encinitas","start":"2017-01-15T01:00:00.000Z","end":"2017-01-15T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPUEA1","className":"event-socal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Deepening Intimacy – Introduction to the Tools @ Santa Barbara","start":"2017-01-15T03:00:00.000Z","end":"2017-01-15T06:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPjEAL","className":"event-socal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Finding Love – An Exploration @ Encinitas","start":"2017-01-15T23:00:00.000Z","end":"2017-01-16T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPyEAL","className":"event-socal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City","start":"2017-01-15T23:00:00.000Z","end":"2017-01-16T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPoEAL","className":"event-socal","facilitators":[]} | |
| , {"title":"Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City","start":"2017-01-15T23:00:00.000Z","end":"2017-01-16T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkPtEAL","className":"event-socal","facilitators":[]} | |
| , {"title":"Team Workshop","start":"2017-01-21T03:00:00.000Z","end":"2017-01-23T04:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0lpEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002baZGAAY","005i0000002EChFAAW","005i0000001nIiIAAU","005i0000002EGXGAA4","005i0000002EcbeAAC","005i0000002E85yAAC","005i0000002EGDBAA4"]} | |
| , {"title":"Team Workshop","start":"2017-01-27T18:00:00.000Z","end":"2017-01-29T16:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j5tEAB","className":"event-de","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-01-28T03:00:00.000Z","end":"2017-01-30T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11JEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EcbeAAC"]} | |
| , {"title":"Free Mini Workshop - Theme: Exploring Relational Intimacy @ Vista","start":"2017-01-29T23:00:00.000Z","end":"2017-01-30T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSkQ3EAL","className":"event-socal","facilitators":[]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-02-02T03:30:00.000Z","end":"2017-02-02T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790lEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Team Workshop","start":"2017-02-10T18:00:00.000Z","end":"2016-02-12T18:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhKEAT","className":"event-uk","facilitators":[]} | |
| , {"title":"Team Workshop","start":"2017-02-10T23:00:00.000Z","end":"2017-02-12T05:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U72ArEAJ","className":"event-aus","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-02-11T03:00:00.000Z","end":"2017-02-13T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6wGiEAJ","className":"event-socal","facilitators":[]} | |
| , {"title":"Igniting Your Love: A Couples Weekend Retreat for Deepening Intimacy and Communication","start":"2017-02-11T03:00:00.000Z","end":"2017-02-13T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0kWEAR","className":"event-norcal","facilitators":["005i0000002E85yAAC","005i0000002EGDBAA4"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-02-18T03:00:00.000Z","end":"2017-02-20T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13YEAR","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"Creating Community, Level 6","start":"2017-02-25T03:00:00.000Z","end":"2017-02-27T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0jJEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000001nIiIAAU"]} | |
| , {"title":"Assistant Training Feb 2017 @ San Rafael","start":"2017-02-25T18:00:00.000Z","end":"2017-02-26T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZBEA1","className":"event-norcal","facilitators":["005i0000002baZGAAY"]} | |
| , {"title":"Active Listening Feb 2017 @ San Rafael","start":"2017-02-26T18:00:00.000Z","end":"2017-02-27T02:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZQEA1","className":"event-norcal","facilitators":["005i0000002baZGAAY"]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-03-02T03:30:00.000Z","end":"2017-03-02T05:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790qEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Team Workshop","start":"2017-03-03T22:00:00.000Z","end":"2017-03-05T21:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0TEAV","className":"event-east","facilitators":["005i0000002EChFAAW","005i0000002EDDGAA4"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-03-04T03:00:00.000Z","end":"2017-03-06T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6wHMEAZ","className":"event-socal","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-03-10T06:30:00.000Z","end":"2017-03-12T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U72ADEAZ","className":"event-aus","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-03-17T18:00:00.000Z","end":"2017-03-19T17:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j5yEAB","className":"event-de","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-03-18T02:00:00.000Z","end":"2017-03-20T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11YEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EDDGAA4"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-03-31T16:00:00.000Z","end":"2017-04-02T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhFEAT","className":"event-uk","facilitators":[]} | |
| , {"title":"Living at Choice, Level 3","start":"2017-04-01T02:00:00.000Z","end":"2017-04-03T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl147EAB","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000002EcbeAAC"]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-04-06T02:30:00.000Z","end":"2017-04-06T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U790vEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-04-07T22:00:00.000Z","end":"2017-04-09T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0OEAV","className":"event-east","facilitators":["005i0000002EcbeAAC","005i0000002EGDBAA4"]} | |
| , {"title":"Being the Source of Love, Level 7","start":"2017-04-08T02:00:00.000Z","end":"2017-04-10T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0jYEAR","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000001nIiIAAU"]} | |
| , {"title":"EC Assistant Training Day","start":"2017-04-15T14:00:00.000Z","end":"2017-04-15T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSmmDEAT","className":"event-east","facilitators":["005i0000002bqxPAAQ","005i0000002d1OnAAI","005i0000002cORnAAM"]} | |
| , {"title":"Creating Community, Level 6","start":"2017-04-21T17:00:00.000Z","end":"2017-04-23T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j68EAB","className":"event-de","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-04-21T22:30:00.000Z","end":"2017-04-23T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzEEAR","className":"event-ca","facilitators":["005i0000001nIiIAAU","005i0000002EGDBAA4"]} | |
| , {"title":"Spirituality and Sexuality, Level 4","start":"2017-04-29T02:00:00.000Z","end":"2017-05-01T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14gEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-05-04T02:30:00.000Z","end":"2017-05-04T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U7910EAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-05-05T22:00:00.000Z","end":"2017-05-07T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0EEAV","className":"event-east","facilitators":["005i0000002baZGAAY","005i0000002EDDGAA4"]} | |
| , {"title":"Team Workshop Ontario","start":"2017-05-05T22:30:00.000Z","end":"2017-05-07T20:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzOEAR","className":"event-ca","facilitators":["005i0000002EChFAAW"]} | |
| , {"title":"Loving Sex","start":"2017-05-06T02:00:00.000Z","end":"2017-05-08T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6npcEAB","className":"event-norcal","facilitators":["005i0000001nIiIAAU","005i0000002EGXGAA4"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-05-06T02:00:00.000Z","end":"2017-05-08T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11dEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-05-12T17:00:00.000Z","end":"2017-05-14T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhPEAT","className":"event-uk","facilitators":[]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-05-19T17:00:00.000Z","end":"2017-05-21T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6DEAR","className":"event-de","facilitators":[]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-05-20T02:00:00.000Z","end":"2017-05-22T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13dEAB","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EDDGAA4"]} | |
| , {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-05-27T02:00:00.000Z","end":"2017-05-29T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0ipEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"Community Weekend @ Seminarhof, Germany","start":"2017-06-02T17:00:00.000Z","end":"2017-06-05T11:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6cEAB","className":"event-de","facilitators":[]} | |
| , {"title":"Assistant Training Jun 2017 @ Scotts Valley","start":"2017-06-03T17:00:00.000Z","end":"2017-06-04T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZGEA1","className":"event-norcal","facilitators":["005i0000002E85yAAC"]} | |
| , {"title":"Active Listening Jun 2017 @ Scotts Valley","start":"2017-06-04T17:00:00.000Z","end":"2017-06-05T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZVEA1","className":"event-norcal","facilitators":["005i0000002E85yAAC"]} | |
| , {"title":"Reclaiming Your Authentic Self","start":"2017-06-05T03:30:00.000Z","end":"2017-06-09T18:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSiGUEA1","className":"event-norcal","facilitators":["005i0000002bTz2AAE"]} | |
| , {"title":"South Bay First Wednesday Monthly HAI Connect - Santa Clara","start":"2017-06-08T02:30:00.000Z","end":"2017-06-08T04:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U7915EAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-06-10T02:00:00.000Z","end":"2017-06-12T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11nEAB","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002EcbeAAC"]} | |
| , {"title":"Living at Choice, Level 3","start":"2017-06-17T02:00:00.000Z","end":"2017-06-19T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14MEAR","className":"event-norcal","facilitators":["005i0000002EGXGAA4","005i0000002EcbeAAC"]} | |
| , {"title":"Spirituality & Sexuality, Level 4","start":"2017-06-23T17:00:00.000Z","end":"2017-06-25T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6IEAR","className":"event-de","facilitators":[]} | |
| , {"title":"Creating Community, Level 6","start":"2017-06-23T22:30:00.000Z","end":"2017-06-25T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yrjEAB","className":"event-ca","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| , {"title":"Team Workshop","start":"2017-07-08T02:00:00.000Z","end":"2017-07-10T03:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0lfEAB","className":"event-norcal","facilitators":[]} | |
| , {"title":"Spirituality and Sexuality, Level 4","start":"2017-07-15T02:00:00.000Z","end":"2017-07-17T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14REAR","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000001nIiIAAU"]} | |
| , {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-07-22T02:00:00.000Z","end":"2017-07-24T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSldfEAD","className":"event-socal","facilitators":[]} | |
| , {"title":"Living at Choice, Level 3","start":"2017-07-28T17:00:00.000Z","end":"2017-07-30T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhUEAT","className":"event-uk","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-07-29T02:00:00.000Z","end":"2017-07-31T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl11sEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| , {"title":"Mystery Upper Level Workshop","start":"2017-08-05T02:00:00.000Z","end":"2017-08-07T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSezFEAT","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000001nIiIAAU"]} | |
| , {"title":"Creating Community, Level 6","start":"2017-08-11T07:30:00.000Z","end":"2017-08-13T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U7392EAB","className":"event-aus","facilitators":[]} | |
| , {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-08-12T02:00:00.000Z","end":"2017-08-14T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0j4EAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-08-19T02:00:00.000Z","end":"2017-08-21T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSldVEAT","className":"event-socal","facilitators":[]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-08-19T02:00:00.000Z","end":"2017-08-21T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13iEAB","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000002EcbeAAC"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-08-25T22:00:00.000Z","end":"2017-08-27T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6nVhEAJ","className":"event-midwest","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-08-25T22:30:00.000Z","end":"2017-08-27T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzdEAB","className":"event-ca","facilitators":["005i0000002baZGAAY","005i0000001nIiIAAU"]} | |
| , {"title":"Spirituality and Sexuality, Level 4","start":"2017-09-08T17:00:00.000Z","end":"2017-09-10T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdhZEAT","className":"event-uk","facilitators":[]} | |
| , {"title":"Being the Source of Love, Level 7","start":"2017-09-08T22:00:00.000Z","end":"2017-09-10T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0dEAF","className":"event-east","facilitators":[]} | |
| , {"title":"Living at Choice, Level 3","start":"2017-09-09T02:00:00.000Z","end":"2017-09-11T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13xEAB","className":"event-norcal","facilitators":["005i0000002baZGAAY","005i0000002E85yAAC"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-09-15T17:00:00.000Z","end":"2017-09-17T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6NEAR","className":"event-de","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-09-16T02:00:00.000Z","end":"2017-09-18T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl139EAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002EcbeAAC"]} | |
| , {"title":"Radical Intimacy: Creating Vibrant Connections, Level 9","start":"2017-09-22T22:30:00.000Z","end":"2017-09-24T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yziEAB","className":"event-ca","facilitators":["005i0000002EChFAAW","005i0000002EcbeAAC"]} | |
| , {"title":"Sacred Energy Exchange, Level 8","start":"2017-09-23T02:00:00.000Z","end":"2017-09-25T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0jnEAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| , {"title":"Living at Choice, Level 3","start":"2017-10-06T17:00:00.000Z","end":"2017-10-08T16:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6SEAR","className":"event-de","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-10-06T22:00:00.000Z","end":"2017-10-08T22:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK09EAF","className":"event-east","facilitators":[]} | |
| , {"title":"Spirituality and Sexuality, Level 4","start":"2017-10-07T02:00:00.000Z","end":"2017-10-09T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl14lEAB","className":"event-norcal","facilitators":["005i0000002EGXGAA4","005i0000002EcbeAAC"]} | |
| , {"title":"Assistant Training Oct 2017 @ Northern California","start":"2017-10-21T17:00:00.000Z","end":"2017-10-22T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZLEA1","className":"event-norcal","facilitators":["005i0000001nIiIAAU"]} | |
| , {"title":"Active Listening Oct 2017 @ Northern California","start":"2017-10-22T17:00:00.000Z","end":"2017-10-23T01:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZShZaEAL","className":"event-norcal","facilitators":["005i0000001nIiIAAU"]} | |
| , {"title":"Being the Source of Love, Level 7","start":"2017-10-27T17:00:00.000Z","end":"2017-10-29T17:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000XRdheEAD","className":"event-uk","facilitators":[]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-10-27T22:30:00.000Z","end":"2017-10-29T22:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yznEAB","className":"event-ca","facilitators":["005i0000002baZGAAY","005i0000002EcbeAAC"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-10-28T02:00:00.000Z","end":"2017-10-30T01:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13EEAR","className":"event-norcal","facilitators":["005i0000002EChFAAW","005i0000002E85yAAC"]} | |
| , {"title":"Sacred Energy eXchange, Level 8","start":"2017-11-03T22:00:00.000Z","end":"2017-11-05T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0iEAF","className":"event-east","facilitators":[]} | |
| , {"title":"Intern Workshop","start":"2017-11-04T02:00:00.000Z","end":"2017-11-06T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0lVEAR","className":"event-norcal","facilitators":[]} | |
| , {"title":"Spirituality & Sexuality, Level 4","start":"2017-11-10T06:30:00.000Z","end":"2017-11-12T07:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U739REAR","className":"event-aus","facilitators":[]} | |
| , {"title":"The Dance Between Surrender & Control, Level 5","start":"2017-11-11T03:00:00.000Z","end":"2017-11-13T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl0j9EAB","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000002E85yAAC"]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-11-17T06:30:00.000Z","end":"2017-11-19T08:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U739WEAR","className":"event-aus","facilitators":[]} | |
| , {"title":"Living at Choice, Level 3","start":"2017-11-17T23:30:00.000Z","end":"2017-11-19T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6yzsEAB","className":"event-ca","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-11-18T03:00:00.000Z","end":"2017-11-20T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13nEAB","className":"event-norcal","facilitators":["005i0000001nIiIAAU","005i0000002EGDBAA4"]} | |
| , {"title":"Community Weekend @ Seminarhof, Germany","start":"2017-11-24T18:00:00.000Z","end":"2017-11-26T12:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000U6j6mEAB","className":"event-de","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-11-25T03:00:00.000Z","end":"2017-11-27T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSldaEAD","className":"event-socal","facilitators":[]} | |
| , {"title":"Spirituality & Sexuality, Level 4","start":"2017-12-01T23:00:00.000Z","end":"2017-12-03T23:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000ZSgTREA1","className":"event-midwest","facilitators":[]} | |
| , {"title":"Loving Yourself, Level 2","start":"2017-12-01T23:00:00.000Z","end":"2017-12-03T23:30:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000UyK0JEAV","className":"event-east","facilitators":[]} | |
| , {"title":"Love is a Miracle, Level 1","start":"2017-12-02T03:00:00.000Z","end":"2017-12-04T02:00:00.000Z","url":"/angels/apex/EventDetail?id=a0Oi000000Wl13OEAR","className":"event-norcal","facilitators":["005i0000002bTz2AAE","005i0000001nIiIAAU"]} | |
| ] |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { | |
| "regions": [ | |
| { | |
| "id": "de", | |
| "name": "Germany", | |
| "site": "Seminarhof", | |
| "lat": 52.0668495, | |
| "lng": 7.2107544 | |
| }, | |
| { | |
| "id": "uk", | |
| "name": "United Kingdom", | |
| "site": "Ammerdown", | |
| "lat": 51.2727283, | |
| "lng": -2.4157968 | |
| }, | |
| { | |
| "id": "east", | |
| "name": "US East Coast", | |
| "site": "Earthdance", | |
| "lat": 42.4965698, | |
| "lng": -72.9462321 | |
| }, | |
| { | |
| "id": "ca", | |
| "name": "Canada", | |
| "site": "Ecology Retreat Centre", | |
| "lat": 43.9888232, | |
| "lng": -80.0262646 | |
| }, | |
| { | |
| "id": "midwest", | |
| "name": "US Midwest", | |
| "site": "Oakwood Retreat Center", | |
| "lat": 40.1591988, | |
| "lng": -85.2805088 | |
| }, | |
| { | |
| "id": "norcal", | |
| "name": "US Northern California", | |
| "site": "Wildwood", | |
| "lat": 38.5369205, | |
| "lng": -123.0701147 | |
| }, | |
| { | |
| "id": "socal", | |
| "name": "US Southern California", | |
| "site": "Joshua Tree Retreat Center", | |
| "lat": 34.1349793, | |
| "lng": -116.3599965 | |
| }, | |
| { | |
| "id": "aus", | |
| "name": "Australia", | |
| "site": "Hunter Valley", | |
| "lat": -32.7278575, | |
| "lng": 151.2604738 | |
| } | |
| ], | |
| "levels": [ | |
| { | |
| "id": 0, | |
| "name": "HAI Mini", | |
| "prereq": null | |
| }, | |
| { | |
| "id": 1, | |
| "name": "HAI 1", | |
| "prereq": null | |
| }, | |
| { | |
| "id": 2, | |
| "name": "HAI 2", | |
| "prereq": 1 | |
| }, | |
| { | |
| "id": 3, | |
| "name": "HAI 3", | |
| "prereq": 2 | |
| }, | |
| { | |
| "id": 4, | |
| "name": "HAI 4", | |
| "prereq": 3 | |
| }, | |
| { | |
| "id": 5, | |
| "name": "HAI 5", | |
| "prereq": 4 | |
| }, | |
| { | |
| "id": 6, | |
| "name": "HAI 6", | |
| "prereq": 5 | |
| }, | |
| { | |
| "id": 7, | |
| "name": "HAI 7", | |
| "prereq": 5 | |
| }, | |
| { | |
| "id": 8, | |
| "name": "HAI 8", | |
| "prereq": 5 | |
| }, | |
| { | |
| "id": 9, | |
| "name": "HAI 9", | |
| "prereq": 5 | |
| }, | |
| { | |
| "id": "hc", | |
| "name": "HAI Connect", | |
| "prereq": 1 | |
| }, | |
| { | |
| "id": "c1", | |
| "name": "Couples 1", | |
| "prereq": 1 | |
| }, | |
| { | |
| "id": "c2", | |
| "name": "Couples 2", | |
| "prereq": 1 | |
| }, | |
| { | |
| "id": "alt", | |
| "name": "Active Listening Training", | |
| "prereq": 1 | |
| }, | |
| { | |
| "id": "at", | |
| "name": "Assistant Training", | |
| "prereq": 2 | |
| }, | |
| { | |
| "id": "tw", | |
| "name": "Team Workshop", | |
| "prereq": "t" | |
| }, | |
| { | |
| "id": "iw", | |
| "name": "Intern Workshop", | |
| "prereq": "t" | |
| }, | |
| { | |
| "id": "", | |
| "name": "Others", | |
| "prereq": null | |
| } | |
| ], | |
| "facilitators": [ | |
| { | |
| "id": "005i0000002bTz2AAE", | |
| "name": "Anne Watts", | |
| "img": "http://www.hai.org/angels/profilephoto/729i0000000dvaP/F" | |
| }, | |
| { | |
| "id": "005i0000002baZGAAY", | |
| "name": "Donna Rengel", | |
| "img": "http://www.hai.org/angels/profilephoto/729i00000001NpS/F" | |
| }, | |
| { | |
| "id": "005i0000002EChFAAW", | |
| "name": "Felicia Cosey", | |
| "img": "http://www.hai.org/angels/profilephoto/729i0000000dqtK/F" | |
| }, | |
| { | |
| "id": "005i0000001nIiIAAU", | |
| "name": "Jason Weston", | |
| "img": "http://www.hai.org/angels/profilephoto/729i0000000QXog/F" | |
| }, | |
| { | |
| "id": "005i0000002EGXGAA4", | |
| "name": "Marci Graham", | |
| "img": "http://www.hai.org/angels/profilephoto/729i0000000dr54/F" | |
| }, | |
| { | |
| "id": "005i0000002EcbeAAC", | |
| "name": "Peter Rengel", | |
| "img": "http://www.hai.org/angels/profilephoto/729i00000001NpN/F" | |
| }, | |
| { | |
| "id": "005i0000002E85yAAC", | |
| "name": "Peter Sandhill", | |
| "img": "http://www.hai.org/angels/profilephoto/729i0000000dvXJ/F" | |
| }, | |
| { | |
| "id": "005i0000002EDDGAA4", | |
| "name": "Rich Walkden", | |
| "img": "http://www.hai.org/angels/profilephoto/729i0000000dqwJ/F" | |
| }, | |
| { | |
| "id": "005i0000002EGDBAA4", | |
| "name": "Sarah Sandhill", | |
| "img": "http://www.hai.org/angels/profilephoto/729i00000001NpI/F" | |
| } | |
| ], | |
| "events": [ | |
| { | |
| "title": "Free Mini Workshop-Theme: Creating Authentic Connections @ Tribe Healing Arts in Chicago, IL", | |
| "start": "2016-11-02T23:45:00.000Z", | |
| "end": "2016-11-03T02:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "1819-21 W. Belmont Ave., Chicago, IL 60657, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Pauline Valvo" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6mdZEAR", | |
| "id": "a0Oi000000U6mdZEAR" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2016-11-03T02:30:00.000Z", | |
| "end": "2016-11-03T04:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0xYEAT", | |
| "id": "a0Oi000000QS0xYEAT" | |
| }, | |
| { | |
| "title": "Loving Sex @ Earthdance", | |
| "start": "2016-11-04T22:00:00.000Z", | |
| "end": "2016-11-06T23:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": 5, | |
| "facilitators": [ | |
| "Jason Weston", | |
| "Marci Graham" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRuQEEA1", | |
| "id": "a0Oi000000QRuQEEA1" | |
| }, | |
| { | |
| "title": "HAI 8: Sacred Energy Exchange @ NorCal - Wildwood", | |
| "start": "2016-11-05T02:00:00.000Z", | |
| "end": "2016-11-07T04:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 5, | |
| "level": 8, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPXNEA5", | |
| "id": "a0Oi000000OKPXNEA5" | |
| }, | |
| { | |
| "title": "Midwest HAI Connect in Livonia @ Livonia at Gregg Havlick's", | |
| "start": "2016-11-10T00:00:00.000Z", | |
| "end": "2016-11-10T02:30:00.000Z", | |
| "region": "midwest", | |
| "geo": "32536 Lyndon St., Livonia, MI 48154, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [ | |
| "Laura Machida", | |
| "Patrick Day" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3iHfEAJ", | |
| "id": "a0Oi000000U3iHfEAJ" | |
| }, | |
| { | |
| "title": "MONTHLY CONNECT @ SoCal Monthly Connect - Location TBA", | |
| "start": "2016-11-10T03:30:00.000Z", | |
| "end": "2016-11-10T05:30:00.000Z", | |
| "region": "socal", | |
| "geo": "CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UycIvEAJ", | |
| "id": "a0Oi000000UycIvEAJ" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Awakening to Love -- A Beginning @ Marsha's home", | |
| "start": "2016-11-10T03:30:00.000Z", | |
| "end": "2016-11-10T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "114 Los Altos Court, Santa Cruz, CA 95060, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Wahila Wilkie" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRzCHEA1", | |
| "id": "a0Oi000000QRzCHEA1" | |
| }, | |
| { | |
| "title": "Free Workshop: Opening to Love @ Private Residence, Indianapolis, IN", | |
| "start": "2016-11-10T23:45:00.000Z", | |
| "end": "2016-11-11T02:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "5240 Byram Ave, Indianapolis, IN 46208, USA", | |
| "prereq": null, | |
| "facilitators": [ | |
| "Pauline Valvo" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6mdPEAR", | |
| "id": "a0Oi000000U6mdPEAR" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Finding Love – An Evening Exploration @ Songbird Healing Center, Cotati", | |
| "start": "2016-11-11T03:30:00.000Z", | |
| "end": "2016-11-11T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "8297 Old Redwood Hwy, Cotati, CA 94931, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Phoenix Singer" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz97EAD", | |
| "id": "a0Oi000000QRz97EAD" | |
| }, | |
| { | |
| "title": "HAI 8: Sacred Energy Exchange @ Australia - Hunter Valley", | |
| "start": "2016-11-11T06:30:00.000Z", | |
| "end": "2016-11-13T07:00:00.000Z", | |
| "region": "aus", | |
| "geo": "NSW Australia", | |
| "prereq": 5, | |
| "level": 8, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRfBsEAL", | |
| "id": "a0Oi000000QRfBsEAL" | |
| }, | |
| { | |
| "title": "Free Mini Workshop @ Best Western Royal Plaza Trade Center", | |
| "start": "2016-11-11T13:00:00.000Z", | |
| "end": "2016-11-13T22:00:00.000Z", | |
| "region": "east", | |
| "geo": "181 Boston Post Rd W, Marlborough, MA 01752, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSfpoEAD", | |
| "id": "a0Oi000000ZSfpoEAD" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ Michigan at Ronora Retreat", | |
| "start": "2016-11-12T00:00:00.000Z", | |
| "end": "2016-11-13T23:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "9325 Dwight Boyer Rd, Watervliet, MI 49098, USA", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Marci Graham", | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QO21JEAT", | |
| "id": "a0Oi000000QO21JEAT" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ NorCal - Camp Navarro", | |
| "start": "2016-11-12T03:00:00.000Z", | |
| "end": "2016-11-14T04:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "901 Masonite Industrial Rd, Navarro, CA 95466", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPVlEAP", | |
| "id": "a0Oi000000OKPVlEAP" | |
| }, | |
| { | |
| "title": "Know your No, Vitalize Your Yes! @ Heart and Soul Center of Light", | |
| "start": "2016-11-12T18:00:00.000Z", | |
| "end": "2016-11-13T00:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "1001 42nd Street, Oakland, CA 94608, USA", | |
| "prereq": null, | |
| "facilitators": [ | |
| "Felicia Cosey" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6lO8EAJ", | |
| "id": "a0Oi000000U6lO8EAJ" | |
| }, | |
| { | |
| "title": "Ontario Mini @ Local private residence", | |
| "start": "2016-11-12T19:00:00.000Z", | |
| "end": "2016-11-12T22:00:00.000Z", | |
| "region": "ca", | |
| "geo": "Toronto, ON, Canada", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U75haEAB", | |
| "id": "a0Oi000000U75haEAB" | |
| }, | |
| { | |
| "title": "Boston Area Completion Party for the Loving Sex Workshop @ Hollis NH - Sterling & Laura Eanes' Home", | |
| "start": "2016-11-12T23:00:00.000Z", | |
| "end": "2016-11-13T04:00:00.000Z", | |
| "region": "east", | |
| "geo": "207 Depot Rd, Hollis, NH 03049, USA", | |
| "prereq": 5, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6ys8EAB", | |
| "id": "a0Oi000000U6ys8EAB" | |
| }, | |
| { | |
| "title": "MONTHLY CONNECT @ Vista", | |
| "start": "2016-11-13T01:00:00.000Z", | |
| "end": "2016-11-13T05:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Vista, CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6qa2EAB", | |
| "id": "a0Oi000000U6qa2EAB" | |
| }, | |
| { | |
| "title": "Community Night in San Jose @ John N’s home", | |
| "start": "2016-11-13T03:00:00.000Z", | |
| "end": "2016-11-13T07:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "2641 Media Way, San Jose, CA 95125", | |
| "prereq": 1, | |
| "level": "", | |
| "facilitators": [ | |
| "John Nadler", | |
| "Wahila Wilkie" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U78SnEAJ", | |
| "id": "a0Oi000000U78SnEAJ" | |
| }, | |
| { | |
| "title": "First Sunday Marin County HAI Connect (Support Group) @ Marin Connect - Longfellow Rd", | |
| "start": "2016-11-13T22:00:00.000Z", | |
| "end": "2016-11-14T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "60 Longfellow Road, Mill Valley, CA 94941, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3jOnEAJ", | |
| "id": "a0Oi000000U3jOnEAJ" | |
| }, | |
| { | |
| "title": "Starlight in the East Bay Community Events Team Meeting @ Starlight East Bay Meeting Location", | |
| "start": "2016-11-16T02:15:00.000Z", | |
| "end": "2016-11-16T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "East Bay, CA", | |
| "prereq": "t", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U30dtEAB", | |
| "id": "a0Oi000000U30dtEAB" | |
| }, | |
| { | |
| "title": "Third Tuesday Monthly HAI Connect (Support Group) – San Jose @ San Jose Support Group Location", | |
| "start": "2016-11-16T03:30:00.000Z", | |
| "end": "2016-11-16T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "2641 Media Way, San Jose, CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRq6DEAT", | |
| "id": "a0Oi000000QRq6DEAT" | |
| }, | |
| { | |
| "title": "Free Mini Workshop @ Four Points Sheraton - Emeryville", | |
| "start": "2016-11-18T03:30:00.000Z", | |
| "end": "2016-11-18T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "1603 Powell St, Emeryville, CA 94608, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Karen Goldberg" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz5yEAD", | |
| "id": "a0Oi000000QRz5yEAD" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Australia - Hunter Valley", | |
| "start": "2016-11-18T06:30:00.000Z", | |
| "end": "2016-11-20T08:00:00.000Z", | |
| "region": "aus", | |
| "geo": "NSW Australia", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRfBJEA1", | |
| "id": "a0Oi000000QRfBJEA1" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2016-11-19T03:00:00.000Z", | |
| "end": "2016-11-21T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Q17wlEAB", | |
| "id": "a0Oi000000Q17wlEAB" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ NorCal - Wildwood", | |
| "start": "2016-11-19T03:00:00.000Z", | |
| "end": "2016-11-21T04:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Peter Sandhill", | |
| "Sarah Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPW5EAP", | |
| "id": "a0Oi000000OKPW5EAP" | |
| }, | |
| { | |
| "title": "Ontario Mini @ Local private residence", | |
| "start": "2016-11-19T19:00:00.000Z", | |
| "end": "2016-11-19T22:30:00.000Z", | |
| "region": "ca", | |
| "geo": "Toronto, ON, Canada", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U71XKEAZ", | |
| "id": "a0Oi000000U71XKEAZ" | |
| }, | |
| { | |
| "title": "Free Mini Workshop-Theme: Creating Love and Connection @ Ann Arbor at Crazy Wisdom", | |
| "start": "2016-11-19T22:30:00.000Z", | |
| "end": "2016-11-20T01:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "114 S. Main St, Ann Arbor, MI 48104, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Dave Tuscany" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3FJ9EAN", | |
| "id": "a0Oi000000U3FJ9EAN" | |
| }, | |
| { | |
| "title": "East Bay Weekend HAI Connect (Support Group) @ East Bay Connect - Cotter St Oakland", | |
| "start": "2016-11-20T22:00:00.000Z", | |
| "end": "2016-11-21T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10812 Cotter St, Oakland, CA 94605, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U739bEAB", | |
| "id": "a0Oi000000U739bEAB" | |
| }, | |
| { | |
| "title": "Midwest HAI Connect @ Zoom Conference", | |
| "start": "2016-11-22T02:00:00.000Z", | |
| "end": "2016-11-22T03:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U73gXEAR", | |
| "id": "a0Oi000000U73gXEAR" | |
| }, | |
| { | |
| "title": "Midwest HAI Connect in Berkley @ Berkley at Cheryl Linck's", | |
| "start": "2016-11-23T00:00:00.000Z", | |
| "end": "2016-11-23T02:30:00.000Z", | |
| "region": "midwest", | |
| "geo": "2812 Robina Ave, Berkley, MI 48072, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [ | |
| "Dana Piper", | |
| "Laura Machida" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3iIEEAZ", | |
| "id": "a0Oi000000U3iIEEAZ" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ Ecology Retreat Centre", | |
| "start": "2016-11-25T23:00:00.000Z", | |
| "end": "2016-11-27T23:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Jason Weston", | |
| "Marci Graham" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QOCuzEAH", | |
| "id": "a0Oi000000QOCuzEAH" | |
| }, | |
| { | |
| "title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Camp Navarro", | |
| "start": "2016-11-26T03:00:00.000Z", | |
| "end": "2016-11-28T04:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "901 Masonite Industrial Rd, Navarro, CA 95466", | |
| "prereq": 4, | |
| "level": 5, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPWyEAP", | |
| "id": "a0Oi000000OKPWyEAP" | |
| }, | |
| { | |
| "title": "Saturday Night HAI @ Berkley at Cheryl Linck's", | |
| "start": "2016-11-26T23:30:00.000Z", | |
| "end": "2016-11-27T04:15:00.000Z", | |
| "region": "midwest", | |
| "geo": "2812 Robina Ave, Berkley, MI 48072, USA", | |
| "prereq": null, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U71xMEAR", | |
| "id": "a0Oi000000U71xMEAR" | |
| }, | |
| { | |
| "title": "Saturday Night HAI @ Berkley at Cheryl Linck's", | |
| "start": "2016-11-27T02:15:00.000Z", | |
| "end": "2016-11-27T04:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "2812 Robina Ave, Berkley, MI 48072, USA", | |
| "prereq": null, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U723hEAB", | |
| "id": "a0Oi000000U723hEAB" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ Earthdance", | |
| "start": "2016-12-02T23:00:00.000Z", | |
| "end": "2016-12-04T23:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRQAIEA5", | |
| "id": "a0Oi000000QRQAIEA5" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Indiana at Oakwood Retreat Center", | |
| "start": "2016-12-03T00:00:00.000Z", | |
| "end": "2016-12-04T23:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "3801 S 575 E Rd, Selma, IN 47383, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Marci Graham", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QOAxzEAH", | |
| "id": "a0Oi000000QOAxzEAH" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Wildwood", | |
| "start": "2016-12-03T03:00:00.000Z", | |
| "end": "2016-12-05T04:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000OKPTpEAP", | |
| "id": "a0Oi000000OKPTpEAP" | |
| }, | |
| { | |
| "title": "South Bay Saturday Monthly HAI Connect @ Portola Valley Connect Location", | |
| "start": "2016-12-03T22:00:00.000Z", | |
| "end": "2016-12-04T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "90 Hayfields Road, Portola Valley, CA 94028, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0yWEAT", | |
| "id": "a0Oi000000QS0yWEAT" | |
| }, | |
| { | |
| "title": "Monthly Connect and Holiday Gathering-SoCal @ SoCal Event - Topanga", | |
| "start": "2016-12-03T22:30:00.000Z", | |
| "end": "2016-12-04T06:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Topanga, CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UycJ0EAJ", | |
| "id": "a0Oi000000UycJ0EAJ" | |
| }, | |
| { | |
| "title": "Community Night in Petaluma @ La Cresta House", | |
| "start": "2016-12-04T03:00:00.000Z", | |
| "end": "2016-12-04T06:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "11 La Cresta Dr., Petaluma, CA 94952, USA", | |
| "prereq": 1, | |
| "level": "", | |
| "facilitators": [ | |
| "Erin Gilligan", | |
| "Jim Dawson" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U75LEEAZ", | |
| "id": "a0Oi000000U75LEEAZ" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Finding Love – An Exploration @ Topanga Mini-Workshop", | |
| "start": "2016-12-04T21:00:00.000Z", | |
| "end": "2016-12-05T00:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Topanga, CA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPZEA1", | |
| "id": "a0Oi000000ZSkPZEA1" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Communicating With Loved Ones @ John's home", | |
| "start": "2016-12-06T03:30:00.000Z", | |
| "end": "2016-12-06T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "2641 Media Way, San Jose, CA 95125, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Wahila Wilkie" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz9bEAD", | |
| "id": "a0Oi000000QRz9bEAD" | |
| }, | |
| { | |
| "title": "NYC Area Level 2 Completion Party and Support Group @ Brooklyn NY - Murray and Lee's Home", | |
| "start": "2016-12-08T00:00:00.000Z", | |
| "end": "2016-12-08T03:00:00.000Z", | |
| "region": "east", | |
| "geo": "110 Livingston St, Apt 2G, Brooklyn, NY 11201, USA", | |
| "prereq": 2, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6ysIEAR", | |
| "id": "a0Oi000000U6ysIEAR" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2016-12-08T03:30:00.000Z", | |
| "end": "2016-12-08T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0xdEAD", | |
| "id": "a0Oi000000QS0xdEAD" | |
| }, | |
| { | |
| "title": "Livingston NJ Support Group @ Livingston NJ - Rob Blau's home", | |
| "start": "2016-12-09T00:00:00.000Z", | |
| "end": "2016-12-09T03:00:00.000Z", | |
| "region": "east", | |
| "geo": "1000 Town Center Way, Apt 310, Livingston, NJ, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSpHKEA1", | |
| "id": "a0Oi000000ZSpHKEA1" | |
| }, | |
| { | |
| "title": "Free Mini Workshop @ Four Points Sheraton - Emeryville", | |
| "start": "2016-12-09T03:30:00.000Z", | |
| "end": "2016-12-09T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "1603 Powell St, Emeryville, CA 94608, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Phoenix Singer" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRz89EAD", | |
| "id": "a0Oi000000QRz89EAD" | |
| }, | |
| { | |
| "title": "Free Mini Workshop-Theme: Be Love, Find Joy! @ Royal Oak at Life Learning Center", | |
| "start": "2016-12-10T00:00:00.000Z", | |
| "end": "2016-12-10T02:30:00.000Z", | |
| "region": "midwest", | |
| "geo": "3121 Rochester Road, Royal Oak, MI 48073, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [ | |
| "Dave Tuscany" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRydWEAT", | |
| "id": "a0Oi000000QRydWEAT" | |
| }, | |
| { | |
| "title": "Boston Area Level 2 Completion Party @ Hollis NH - Sterling & Laura Eanes' Home", | |
| "start": "2016-12-10T23:00:00.000Z", | |
| "end": "2016-12-11T04:00:00.000Z", | |
| "region": "east", | |
| "geo": "207 Depot Rd, Hollis, NH 03049, USA", | |
| "prereq": null, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6ysNEAR", | |
| "id": "a0Oi000000U6ysNEAR" | |
| }, | |
| { | |
| "title": "MONTHLY CONNECT @ Encinitas", | |
| "start": "2016-12-11T01:00:00.000Z", | |
| "end": "2016-12-11T05:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Encinitas, CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6qZxEAJ", | |
| "id": "a0Oi000000U6qZxEAJ" | |
| }, | |
| { | |
| "title": "Holiday Party 2016 @ Mill Valley Community Center", | |
| "start": "2016-12-11T03:00:00.000Z", | |
| "end": "2016-12-11T07:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "180 Camino Alto, Mill Valley, CA 94941, USA", | |
| "prereq": null, | |
| "level": "", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRnTXEA1", | |
| "id": "a0Oi000000XRnTXEA1" | |
| }, | |
| { | |
| "title": "First Sunday Marin County HAI Connect (Support Group) @ Marin Connect - Longfellow Rd", | |
| "start": "2016-12-11T22:00:00.000Z", | |
| "end": "2016-12-12T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "60 Longfellow Road, Mill Valley, CA 94941, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3jOsEAJ", | |
| "id": "a0Oi000000U3jOsEAJ" | |
| }, | |
| { | |
| "title": "Starlight in the East Bay Community Events Team Meeting @ Starlight East Bay Meeting Location", | |
| "start": "2016-12-14T02:15:00.000Z", | |
| "end": "2016-12-14T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "East Bay, CA", | |
| "prereq": "t", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U30dyEAB", | |
| "id": "a0Oi000000U30dyEAB" | |
| }, | |
| { | |
| "title": "Midwest HAI Connect in Livonia @ Livonia at Gregg Havlick's", | |
| "start": "2016-12-15T00:00:00.000Z", | |
| "end": "2016-12-15T02:30:00.000Z", | |
| "region": "midwest", | |
| "geo": "32536 Lyndon St., Livonia, MI 48154, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [ | |
| "Christine Fodor" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U3iHkEAJ", | |
| "id": "a0Oi000000U3iHkEAJ" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Exploring Relational Intimacy @ Culver City", | |
| "start": "2016-12-15T03:00:00.000Z", | |
| "end": "2016-12-15T06:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Culver City, CA, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPeEAL", | |
| "id": "a0Oi000000ZSkPeEAL" | |
| }, | |
| { | |
| "title": "East Bay Weekend HAI Connect (Support Group) @ East Bay Connect - Cotter St Oakland", | |
| "start": "2016-12-18T22:00:00.000Z", | |
| "end": "2016-12-19T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10812 Cotter St, Oakland, CA 94605, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U74j1EAB", | |
| "id": "a0Oi000000U74j1EAB" | |
| }, | |
| { | |
| "title": "Midwest HAI Connect @ Zoom Conference", | |
| "start": "2016-12-20T01:00:00.000Z", | |
| "end": "2016-12-20T02:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSm0bEAD", | |
| "id": "a0Oi000000ZSm0bEAD" | |
| }, | |
| { | |
| "title": "Third Tuesday Monthly HAI Connect (Support Group) – San Jose @ San Jose Support Group Location", | |
| "start": "2016-12-21T03:30:00.000Z", | |
| "end": "2016-12-21T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "2641 Media Way, San Jose, CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QRq6IEAT", | |
| "id": "a0Oi000000QRq6IEAT" | |
| }, | |
| { | |
| "title": "Concert: Heather Katz & Friends @ Unity of Royal Oak", | |
| "start": "2016-12-31T00:00:00.000Z", | |
| "end": "2016-12-31T03:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "2500 Crooks Rd, Royal Oak, MI 48073, USA", | |
| "prereq": null, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSfSUEA1", | |
| "id": "a0Oi000000ZSfSUEA1" | |
| }, | |
| { | |
| "title": "South Bay Saturday Monthly HAI Connect @ Portola Valley Connect Location", | |
| "start": "2016-12-31T22:00:00.000Z", | |
| "end": "2017-01-01T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "90 Hayfields Road, Portola Valley, CA 94028, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000QS0ybEAD", | |
| "id": "a0Oi000000QS0ybEAD" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2017-01-05T03:30:00.000Z", | |
| "end": "2017-01-05T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790gEAB", | |
| "id": "a0Oi000000U790gEAB" | |
| }, | |
| { | |
| "title": "YES! Ignite your Heart's Desires @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-01-07T03:00:00.000Z", | |
| "end": "2017-01-08T23:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": null, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U75N0EAJ", | |
| "id": "a0Oi000000U75N0EAJ" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality and Sexuality @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2017-01-07T03:00:00.000Z", | |
| "end": "2017-01-09T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6wFVEAZ", | |
| "id": "a0Oi000000U6wFVEAZ" | |
| }, | |
| { | |
| "title": "MONTHLY CONNECT @ Encinitas", | |
| "start": "2017-01-15T01:00:00.000Z", | |
| "end": "2017-01-15T05:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Encinitas, CA, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPUEA1", | |
| "id": "a0Oi000000ZSkPUEA1" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Deepening Intimacy – Introduction to the Tools @ Santa Barbara", | |
| "start": "2017-01-15T03:00:00.000Z", | |
| "end": "2017-01-15T06:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Santa Barbara, CA, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPjEAL", | |
| "id": "a0Oi000000ZSkPjEAL" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Finding Love – An Exploration @ Encinitas", | |
| "start": "2017-01-15T23:00:00.000Z", | |
| "end": "2017-01-16T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Encinitas, CA, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPyEAL", | |
| "id": "a0Oi000000ZSkPyEAL" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City", | |
| "start": "2017-01-15T23:00:00.000Z", | |
| "end": "2017-01-16T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Culver City, CA, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPoEAL", | |
| "id": "a0Oi000000ZSkPoEAL" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Communicating With Loved Ones @ Culver City", | |
| "start": "2017-01-15T23:00:00.000Z", | |
| "end": "2017-01-16T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Culver City, CA, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkPtEAL", | |
| "id": "a0Oi000000ZSkPtEAL" | |
| }, | |
| { | |
| "title": "Team Workshop @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-01-21T03:00:00.000Z", | |
| "end": "2017-01-23T04:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Donna Rengel", | |
| "Felicia Cosey", | |
| "Jason Weston", | |
| "Marci Graham", | |
| "Peter Rengel", | |
| "Peter Sandhill", | |
| "Sarah Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0lpEAB", | |
| "id": "a0Oi000000Wl0lpEAB" | |
| }, | |
| { | |
| "title": "Team Workshop @ Germany - Seminarhof", | |
| "start": "2017-01-27T18:00:00.000Z", | |
| "end": "2017-01-29T16:00:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j5tEAB", | |
| "id": "a0Oi000000U6j5tEAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-01-28T03:00:00.000Z", | |
| "end": "2017-01-30T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11JEAR", | |
| "id": "a0Oi000000Wl11JEAR" | |
| }, | |
| { | |
| "title": "Free Mini Workshop - Theme: Exploring Relational Intimacy @ Vista", | |
| "start": "2017-01-29T23:00:00.000Z", | |
| "end": "2017-01-30T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "Vista, CA, USA", | |
| "prereq": null, | |
| "level": 0, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSkQ3EAL", | |
| "id": "a0Oi000000ZSkQ3EAL" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2017-02-02T03:30:00.000Z", | |
| "end": "2017-02-02T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790lEAB", | |
| "id": "a0Oi000000U790lEAB" | |
| }, | |
| { | |
| "title": "Team Workshop @ UK Earth Spirit", | |
| "start": "2017-02-10T18:00:00.000Z", | |
| "end": "2016-02-12T18:30:00.000Z", | |
| "region": "uk", | |
| "geo": "Peak Lane, Compton Dundon, Somerton, Somerset, TA11 6PE, UK", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhKEAT", | |
| "id": "a0Oi000000XRdhKEAT" | |
| }, | |
| { | |
| "title": "Team Workshop @ NSW Sydney", | |
| "start": "2017-02-10T23:00:00.000Z", | |
| "end": "2017-02-12T05:00:00.000Z", | |
| "region": "aus", | |
| "geo": "Sydney, NSW Australia", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U72ArEAJ", | |
| "id": "a0Oi000000U72ArEAJ" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2017-02-11T03:00:00.000Z", | |
| "end": "2017-02-13T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6wGiEAJ", | |
| "id": "a0Oi000000U6wGiEAJ" | |
| }, | |
| { | |
| "title": "Igniting Your Love: A Couples Weekend Retreat for Deepening Intimacy and Communication @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-02-11T03:00:00.000Z", | |
| "end": "2017-02-13T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": 1, | |
| "level": "c1", | |
| "facilitators": [ | |
| "Peter Sandhill", | |
| "Sarah Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0kWEAR", | |
| "id": "a0Oi000000Wl0kWEAR" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-02-18T03:00:00.000Z", | |
| "end": "2017-02-20T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13YEAR", | |
| "id": "a0Oi000000Wl13YEAR" | |
| }, | |
| { | |
| "title": "HAI 6: Creating Community @ NorCal - Wildwood", | |
| "start": "2017-02-25T03:00:00.000Z", | |
| "end": "2017-02-27T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 5, | |
| "level": 6, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0jJEAR", | |
| "id": "a0Oi000000Wl0jJEAR" | |
| }, | |
| { | |
| "title": "Assistant Training Feb 2017 @ San Anselmo", | |
| "start": "2017-02-25T18:00:00.000Z", | |
| "end": "2017-02-26T02:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "San Anselmo, CA, USA", | |
| "prereq": 2, | |
| "level": "at", | |
| "facilitators": [ | |
| "Donna Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZBEA1", | |
| "id": "a0Oi000000ZShZBEA1" | |
| }, | |
| { | |
| "title": "Active Listening Feb 2017 @ San Anselmo", | |
| "start": "2017-02-26T18:00:00.000Z", | |
| "end": "2017-02-27T02:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "San Anselmo, CA, USA", | |
| "prereq": 1, | |
| "level": "alt", | |
| "facilitators": [ | |
| "Donna Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZQEA1", | |
| "id": "a0Oi000000ZShZQEA1" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2017-03-02T03:30:00.000Z", | |
| "end": "2017-03-02T05:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790qEAB", | |
| "id": "a0Oi000000U790qEAB" | |
| }, | |
| { | |
| "title": "Team Workshop @ Earthdance", | |
| "start": "2017-03-03T22:00:00.000Z", | |
| "end": "2017-03-05T21:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Rich Walkden" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0TEAV", | |
| "id": "a0Oi000000UyK0TEAV" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2017-03-04T03:00:00.000Z", | |
| "end": "2017-03-06T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6wHMEAZ", | |
| "id": "a0Oi000000U6wHMEAZ" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Australia - Hunter Valley", | |
| "start": "2017-03-10T06:30:00.000Z", | |
| "end": "2017-03-12T08:00:00.000Z", | |
| "region": "aus", | |
| "geo": "NSW Australia", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U72ADEAZ", | |
| "id": "a0Oi000000U72ADEAZ" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Germany - Seminarhof", | |
| "start": "2017-03-17T18:00:00.000Z", | |
| "end": "2017-03-19T17:30:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j5yEAB", | |
| "id": "a0Oi000000U6j5yEAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Wildwood", | |
| "start": "2017-03-18T02:00:00.000Z", | |
| "end": "2017-03-20T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Rich Walkden" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11YEAR", | |
| "id": "a0Oi000000Wl11YEAR" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ UK Oxon Hoath", | |
| "start": "2017-03-31T16:00:00.000Z", | |
| "end": "2017-04-02T17:00:00.000Z", | |
| "region": "uk", | |
| "geo": "Oxenhoath Road, off Carpenters Lane, Hadlow, TN11 9SS, UK", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhFEAT", | |
| "id": "a0Oi000000XRdhFEAT" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ NorCal - Wildwood", | |
| "start": "2017-04-01T02:00:00.000Z", | |
| "end": "2017-04-03T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl147EAB", | |
| "id": "a0Oi000000Wl147EAB" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2017-04-06T02:30:00.000Z", | |
| "end": "2017-04-06T04:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U790vEAB", | |
| "id": "a0Oi000000U790vEAB" | |
| }, | |
| { | |
| "title": "HAI 5: The Dance Between Surrender & Control @ Earthdance", | |
| "start": "2017-04-07T22:00:00.000Z", | |
| "end": "2017-04-09T22:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": 4, | |
| "level": 5, | |
| "facilitators": [ | |
| "Peter Rengel", | |
| "Sarah Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0OEAV", | |
| "id": "a0Oi000000UyK0OEAV" | |
| }, | |
| { | |
| "title": "HAI 7: Being the Source of Love @ NorCal - Wildwood", | |
| "start": "2017-04-08T02:00:00.000Z", | |
| "end": "2017-04-10T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 5, | |
| "level": 7, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0jYEAR", | |
| "id": "a0Oi000000Wl0jYEAR" | |
| }, | |
| { | |
| "title": "EC Assistant Training Day @ Hollis NH - Sterling & Laura Eanes' Home", | |
| "start": "2017-04-15T14:00:00.000Z", | |
| "end": "2017-04-15T22:00:00.000Z", | |
| "region": "east", | |
| "geo": "207 Depot Rd, Hollis, NH 03049, USA", | |
| "prereq": 2, | |
| "level": "at", | |
| "facilitators": [ | |
| "Karen Glover", | |
| "Lydia Carbone", | |
| "Robyn Vogel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSmmDEAT", | |
| "id": "a0Oi000000ZSmmDEAT" | |
| }, | |
| { | |
| "title": "HAI 6: Creating Community @ Germany - Seminarhof", | |
| "start": "2017-04-21T17:00:00.000Z", | |
| "end": "2017-04-23T16:30:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": 5, | |
| "level": 6, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j68EAB", | |
| "id": "a0Oi000000U6j68EAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Ecology Retreat Centre", | |
| "start": "2017-04-21T22:30:00.000Z", | |
| "end": "2017-04-23T22:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Jason Weston", | |
| "Sarah Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzEEAR", | |
| "id": "a0Oi000000U6yzEEAR" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality and Sexuality @ NorCal - Wildwood", | |
| "start": "2017-04-29T02:00:00.000Z", | |
| "end": "2017-05-01T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14gEAB", | |
| "id": "a0Oi000000Wl14gEAB" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2017-05-04T02:30:00.000Z", | |
| "end": "2017-05-04T04:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U7910EAB", | |
| "id": "a0Oi000000U7910EAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Earthdance", | |
| "start": "2017-05-05T22:00:00.000Z", | |
| "end": "2017-05-07T22:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Rich Walkden" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0EEAV", | |
| "id": "a0Oi000000UyK0EEAV" | |
| }, | |
| { | |
| "title": "Team Workshop Ontario @ Ecology Retreat Centre", | |
| "start": "2017-05-05T22:30:00.000Z", | |
| "end": "2017-05-07T20:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [ | |
| "Felicia Cosey" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzOEAR", | |
| "id": "a0Oi000000U6yzOEAR" | |
| }, | |
| { | |
| "title": "Loving Sex @ NorCal - Wildwood", | |
| "start": "2017-05-06T02:00:00.000Z", | |
| "end": "2017-05-08T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 5, | |
| "facilitators": [ | |
| "Jason Weston", | |
| "Marci Graham" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6npcEAB", | |
| "id": "a0Oi000000U6npcEAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Happy Valley", | |
| "start": "2017-05-06T02:00:00.000Z", | |
| "end": "2017-05-08T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "2159 Branciforte Drive, Santa Cruz, CA 95065, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11dEAB", | |
| "id": "a0Oi000000Wl11dEAB" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ UK Ammerdown", | |
| "start": "2017-05-12T17:00:00.000Z", | |
| "end": "2017-05-14T17:00:00.000Z", | |
| "region": "uk", | |
| "geo": "The Ammerdown Centre, Ammerdown Park, Radstock, Somerset, BA3 5SW, UK", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhPEAT", | |
| "id": "a0Oi000000XRdhPEAT" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ Germany - Seminarhof", | |
| "start": "2017-05-19T17:00:00.000Z", | |
| "end": "2017-05-21T16:30:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6DEAR", | |
| "id": "a0Oi000000U6j6DEAR" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ NorCal - Wildwood", | |
| "start": "2017-05-20T02:00:00.000Z", | |
| "end": "2017-05-22T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Rich Walkden" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13dEAB", | |
| "id": "a0Oi000000Wl13dEAB" | |
| }, | |
| { | |
| "title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Wildwood", | |
| "start": "2017-05-27T02:00:00.000Z", | |
| "end": "2017-05-29T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 4, | |
| "level": 5, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0ipEAB", | |
| "id": "a0Oi000000Wl0ipEAB" | |
| }, | |
| { | |
| "title": "Community Weekend @ Germany - Seminarhof", | |
| "start": "2017-06-02T17:00:00.000Z", | |
| "end": "2017-06-05T11:00:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": 1, | |
| "level": "", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6cEAB", | |
| "id": "a0Oi000000U6j6cEAB" | |
| }, | |
| { | |
| "title": "Assistant Training Jun 2017 @ Scotts Valley", | |
| "start": "2017-06-03T17:00:00.000Z", | |
| "end": "2017-06-04T01:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "Scotts Valley, CA, USA", | |
| "prereq": 2, | |
| "level": "at", | |
| "facilitators": [ | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZGEA1", | |
| "id": "a0Oi000000ZShZGEA1" | |
| }, | |
| { | |
| "title": "Active Listening Jun 2017 @ Scotts Valley", | |
| "start": "2017-06-04T17:00:00.000Z", | |
| "end": "2017-06-05T01:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "Scotts Valley, CA, USA", | |
| "prereq": 1, | |
| "level": "alt", | |
| "facilitators": [ | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZVEA1", | |
| "id": "a0Oi000000ZShZVEA1" | |
| }, | |
| { | |
| "title": "Reclaiming Your Authentic Self @ Esalen Institute", | |
| "start": "2017-06-05T03:30:00.000Z", | |
| "end": "2017-06-09T18:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "55000 Highway 1, Big Sur, CA 93920, USA", | |
| "prereq": null, | |
| "facilitators": [ | |
| "Anne Watts" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSiGUEA1", | |
| "id": "a0Oi000000ZSiGUEA1" | |
| }, | |
| { | |
| "title": "South Bay First Wednesday Monthly HAI Connect @ Santa Clara HAI Connect Group Location", | |
| "start": "2017-06-08T02:30:00.000Z", | |
| "end": "2017-06-08T04:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "3854 Pruneridge Ave, Santa Clara, CA 95051, USA", | |
| "prereq": 1, | |
| "level": "hc", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U7915EAB", | |
| "id": "a0Oi000000U7915EAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Wildwood", | |
| "start": "2017-06-10T02:00:00.000Z", | |
| "end": "2017-06-12T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11nEAB", | |
| "id": "a0Oi000000Wl11nEAB" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ NorCal - Wildwood", | |
| "start": "2017-06-17T02:00:00.000Z", | |
| "end": "2017-06-19T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Marci Graham", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14MEAR", | |
| "id": "a0Oi000000Wl14MEAR" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality & Sexuality @ Germany - Seminarhof", | |
| "start": "2017-06-23T17:00:00.000Z", | |
| "end": "2017-06-25T16:30:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6IEAR", | |
| "id": "a0Oi000000U6j6IEAR" | |
| }, | |
| { | |
| "title": "HAI 6: Creating Community @ Ecology Retreat Centre", | |
| "start": "2017-06-23T22:30:00.000Z", | |
| "end": "2017-06-25T22:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": 5, | |
| "level": 6, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yrjEAB", | |
| "id": "a0Oi000000U6yrjEAB" | |
| }, | |
| { | |
| "title": "Team Workshop @ NorCal - Wildwood", | |
| "start": "2017-07-08T02:00:00.000Z", | |
| "end": "2017-07-10T03:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": "t", | |
| "level": "tw", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0lfEAB", | |
| "id": "a0Oi000000Wl0lfEAB" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality and Sexuality @ NorCal - Wildwood", | |
| "start": "2017-07-15T02:00:00.000Z", | |
| "end": "2017-07-17T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14REAR", | |
| "id": "a0Oi000000Wl14REAR" | |
| }, | |
| { | |
| "title": "HAI 5: The Dance Between Surrender & Control @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2017-07-22T02:00:00.000Z", | |
| "end": "2017-07-24T01:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": 4, | |
| "level": 5, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSldfEAD", | |
| "id": "a0Oi000000ZSldfEAD" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ UK Oxon Hoath", | |
| "start": "2017-07-28T17:00:00.000Z", | |
| "end": "2017-07-30T17:00:00.000Z", | |
| "region": "uk", | |
| "geo": "Oxenhoath Road, off Carpenters Lane, Hadlow, TN11 9SS, UK", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhUEAT", | |
| "id": "a0Oi000000XRdhUEAT" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Wildwood", | |
| "start": "2017-07-29T02:00:00.000Z", | |
| "end": "2017-07-31T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl11sEAB", | |
| "id": "a0Oi000000Wl11sEAB" | |
| }, | |
| { | |
| "title": "Mystery Upper Level Workshop @ NorCal - Wildwood", | |
| "start": "2017-08-05T02:00:00.000Z", | |
| "end": "2017-08-07T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 5, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSezFEAT", | |
| "id": "a0Oi000000ZSezFEAT" | |
| }, | |
| { | |
| "title": "HAI 6: Creating Community @ Australia - Hunter Valley", | |
| "start": "2017-08-11T07:30:00.000Z", | |
| "end": "2017-08-13T08:00:00.000Z", | |
| "region": "aus", | |
| "geo": "NSW Australia", | |
| "prereq": 5, | |
| "level": 6, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U7392EAB", | |
| "id": "a0Oi000000U7392EAB" | |
| }, | |
| { | |
| "title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Wildwood", | |
| "start": "2017-08-12T02:00:00.000Z", | |
| "end": "2017-08-14T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 4, | |
| "level": 5, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0j4EAB", | |
| "id": "a0Oi000000Wl0j4EAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2017-08-19T02:00:00.000Z", | |
| "end": "2017-08-21T01:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSldVEAT", | |
| "id": "a0Oi000000ZSldVEAT" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ NorCal - Wildwood", | |
| "start": "2017-08-19T02:00:00.000Z", | |
| "end": "2017-08-21T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13iEAB", | |
| "id": "a0Oi000000Wl13iEAB" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ Michigan at Ronora Retreat", | |
| "start": "2017-08-25T22:00:00.000Z", | |
| "end": "2017-08-27T22:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "9325 Dwight Boyer Rd, Watervliet, MI 49098, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6nVhEAJ", | |
| "id": "a0Oi000000U6nVhEAJ" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Ecology Retreat Centre", | |
| "start": "2017-08-25T22:30:00.000Z", | |
| "end": "2017-08-27T22:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzdEAB", | |
| "id": "a0Oi000000U6yzdEAB" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality and Sexuality @ UK Oxon Hoath", | |
| "start": "2017-09-08T17:00:00.000Z", | |
| "end": "2017-09-10T17:00:00.000Z", | |
| "region": "uk", | |
| "geo": "Oxenhoath Road, off Carpenters Lane, Hadlow, TN11 9SS, UK", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdhZEAT", | |
| "id": "a0Oi000000XRdhZEAT" | |
| }, | |
| { | |
| "title": "HAI 7: Being the Source of Love @ Earthdance", | |
| "start": "2017-09-08T22:00:00.000Z", | |
| "end": "2017-09-10T22:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": 5, | |
| "level": 7, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0dEAF", | |
| "id": "a0Oi000000UyK0dEAF" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ NorCal - Wildwood", | |
| "start": "2017-09-09T02:00:00.000Z", | |
| "end": "2017-09-11T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13xEAB", | |
| "id": "a0Oi000000Wl13xEAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Germany - Seminarhof", | |
| "start": "2017-09-15T17:00:00.000Z", | |
| "end": "2017-09-17T16:30:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6NEAR", | |
| "id": "a0Oi000000U6j6NEAR" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Happy Valley", | |
| "start": "2017-09-16T02:00:00.000Z", | |
| "end": "2017-09-18T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "2159 Branciforte Drive, Santa Cruz, CA 95065, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl139EAB", | |
| "id": "a0Oi000000Wl139EAB" | |
| }, | |
| { | |
| "title": "HAI 9: Radical Intimacy: Creating Vibrant Connections @ Ecology Retreat Centre", | |
| "start": "2017-09-22T22:30:00.000Z", | |
| "end": "2017-09-24T22:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": 5, | |
| "level": 9, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yziEAB", | |
| "id": "a0Oi000000U6yziEAB" | |
| }, | |
| { | |
| "title": "HAI 8: Sacred Energy Exchange @ NorCal - Wildwood", | |
| "start": "2017-09-23T02:00:00.000Z", | |
| "end": "2017-09-25T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 5, | |
| "level": 8, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0jnEAB", | |
| "id": "a0Oi000000Wl0jnEAB" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ Germany - Seminarhof", | |
| "start": "2017-10-06T17:00:00.000Z", | |
| "end": "2017-10-08T16:30:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6SEAR", | |
| "id": "a0Oi000000U6j6SEAR" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Earthdance", | |
| "start": "2017-10-06T22:00:00.000Z", | |
| "end": "2017-10-08T22:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK09EAF", | |
| "id": "a0Oi000000UyK09EAF" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality and Sexuality @ NorCal - Wildwood", | |
| "start": "2017-10-07T02:00:00.000Z", | |
| "end": "2017-10-09T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [ | |
| "Marci Graham", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl14lEAB", | |
| "id": "a0Oi000000Wl14lEAB" | |
| }, | |
| { | |
| "title": "Assistant Training Oct 2017 @ Northern California - TBD", | |
| "start": "2017-10-21T17:00:00.000Z", | |
| "end": "2017-10-22T01:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "NorCal, USA", | |
| "prereq": 2, | |
| "level": "at", | |
| "facilitators": [ | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZLEA1", | |
| "id": "a0Oi000000ZShZLEA1" | |
| }, | |
| { | |
| "title": "Active Listening Oct 2017 @ Northern California - TBD", | |
| "start": "2017-10-22T17:00:00.000Z", | |
| "end": "2017-10-23T01:30:00.000Z", | |
| "region": "norcal", | |
| "geo": "NorCal, USA", | |
| "prereq": 1, | |
| "level": "alt", | |
| "facilitators": [ | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZShZaEAL", | |
| "id": "a0Oi000000ZShZaEAL" | |
| }, | |
| { | |
| "title": "HAI 7: Being the Source of Love @ UK Ammerdown", | |
| "start": "2017-10-27T17:00:00.000Z", | |
| "end": "2017-10-29T17:00:00.000Z", | |
| "region": "uk", | |
| "geo": "The Ammerdown Centre, Ammerdown Park, Radstock, Somerset, BA3 5SW, UK", | |
| "prereq": 5, | |
| "level": 7, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000XRdheEAD", | |
| "id": "a0Oi000000XRdheEAD" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ Ecology Retreat Centre", | |
| "start": "2017-10-27T22:30:00.000Z", | |
| "end": "2017-10-29T22:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Donna Rengel", | |
| "Peter Rengel" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yznEAB", | |
| "id": "a0Oi000000U6yznEAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal - Wildwood", | |
| "start": "2017-10-28T02:00:00.000Z", | |
| "end": "2017-10-30T01:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Felicia Cosey", | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13EEAR", | |
| "id": "a0Oi000000Wl13EEAR" | |
| }, | |
| { | |
| "title": "HAI 8: Sacred Energy eXchange @ Earthdance", | |
| "start": "2017-11-03T22:00:00.000Z", | |
| "end": "2017-11-05T23:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": 5, | |
| "level": 8, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0iEAF", | |
| "id": "a0Oi000000UyK0iEAF" | |
| }, | |
| { | |
| "title": "Intern Workshop @ NorCal - Wildwood", | |
| "start": "2017-11-04T02:00:00.000Z", | |
| "end": "2017-11-06T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": "t", | |
| "level": "iw", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0lVEAR", | |
| "id": "a0Oi000000Wl0lVEAR" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality & Sexuality @ Australia - Hunter Valley", | |
| "start": "2017-11-10T06:30:00.000Z", | |
| "end": "2017-11-12T07:00:00.000Z", | |
| "region": "aus", | |
| "geo": "NSW Australia", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U739REAR", | |
| "id": "a0Oi000000U739REAR" | |
| }, | |
| { | |
| "title": "HAI 5: The Dance Between Surrender & Control @ NorCal - Wildwood", | |
| "start": "2017-11-11T03:00:00.000Z", | |
| "end": "2017-11-13T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "20111 Old Cazadero Rd, Guerneville, CA 95446, USA", | |
| "prereq": 4, | |
| "level": 5, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Peter Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl0j9EAB", | |
| "id": "a0Oi000000Wl0j9EAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ Australia - Hunter Valley", | |
| "start": "2017-11-17T06:30:00.000Z", | |
| "end": "2017-11-19T08:00:00.000Z", | |
| "region": "aus", | |
| "geo": "NSW Australia", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U739WEAR", | |
| "id": "a0Oi000000U739WEAR" | |
| }, | |
| { | |
| "title": "HAI 3: Living at Choice @ Ecology Retreat Centre", | |
| "start": "2017-11-17T23:30:00.000Z", | |
| "end": "2017-11-19T23:00:00.000Z", | |
| "region": "ca", | |
| "geo": "308046 Hockley Rd, Mono, ON L9W 6N2, Canada", | |
| "prereq": 2, | |
| "level": 3, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6yzsEAB", | |
| "id": "a0Oi000000U6yzsEAB" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-11-18T03:00:00.000Z", | |
| "end": "2017-11-20T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [ | |
| "Jason Weston", | |
| "Sarah Sandhill" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13nEAB", | |
| "id": "a0Oi000000Wl13nEAB" | |
| }, | |
| { | |
| "title": "Community Weekend @ Germany - Seminarhof", | |
| "start": "2017-11-24T18:00:00.000Z", | |
| "end": "2017-11-26T12:00:00.000Z", | |
| "region": "de", | |
| "geo": "Heven 54, 48624 Schöppingen, Germany", | |
| "prereq": 1, | |
| "level": "", | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000U6j6mEAB", | |
| "id": "a0Oi000000U6j6mEAB" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ SoCal - Joshua Tree Retreat Center, Joshua Tree, CA", | |
| "start": "2017-11-25T03:00:00.000Z", | |
| "end": "2017-11-27T02:00:00.000Z", | |
| "region": "socal", | |
| "geo": "59700 Twentynine Palms Hwy, Joshua Tree, CA 92252, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSldaEAD", | |
| "id": "a0Oi000000ZSldaEAD" | |
| }, | |
| { | |
| "title": "HAI 4: Spirituality & Sexuality @ Indiana at Oakwood Retreat Center", | |
| "start": "2017-12-01T23:00:00.000Z", | |
| "end": "2017-12-03T23:00:00.000Z", | |
| "region": "midwest", | |
| "geo": "3801 S 575 E Rd, Selma, IN 47383, USA", | |
| "prereq": 3, | |
| "level": 4, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000ZSgTREA1", | |
| "id": "a0Oi000000ZSgTREA1" | |
| }, | |
| { | |
| "title": "HAI 2: Loving Yourself @ Earthdance", | |
| "start": "2017-12-01T23:00:00.000Z", | |
| "end": "2017-12-03T23:30:00.000Z", | |
| "region": "east", | |
| "geo": "252 Prospect St, Plainfield, MA 01070, USA", | |
| "prereq": 1, | |
| "level": 2, | |
| "facilitators": [], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000UyK0JEAV", | |
| "id": "a0Oi000000UyK0JEAV" | |
| }, | |
| { | |
| "title": "HAI 1: Love is a Miracle @ NorCal- Saratoga Springs, Upper Lake CA", | |
| "start": "2017-12-02T03:00:00.000Z", | |
| "end": "2017-12-04T02:00:00.000Z", | |
| "region": "norcal", | |
| "geo": "10243 Saratoga Springs Road, Upper Lake, CA 95485, USA", | |
| "prereq": null, | |
| "level": 1, | |
| "facilitators": [ | |
| "Anne Watts", | |
| "Jason Weston" | |
| ], | |
| "url": "http://www.hai.org/angels/apex/EventDetail_pub?id=a0Oi000000Wl13OEAR", | |
| "id": "a0Oi000000Wl13OEAR" | |
| } | |
| ] | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!doctype html> | |
| <html lang="en"><head> | |
| <meta name="referrer" content="no-referrer"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> | |
| <script>(function(l){for (var u in l)if(l[u])document.write('<script src="'+u+'"><\/script>')})( | |
| {"https://cdnjs.cloudflare.com/ajax/libs/promiz/1.0.6/promiz.min.js":typeof Promise !== 'function' || !Promise.resolve || Object.prototype.toString.call(Promise.resolve()) !== '[object Promise]' | |
| ,"https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js":typeof fetch!=='function' | |
| });if (!Array.from) Array.from = function(a) { | |
| for (var l = a.length, A = new Array(l), i = 0; i < l; i++) | |
| A[i] = a[i]; | |
| return A; | |
| };if (![].find) Array.prototype.find = function(f) { | |
| for (var i = 0; i < this.length; i++) | |
| if (f(this[i])) return this[i]; | |
| };</script> | |
| <style> | |
| html { | |
| position: relative; | |
| min-height: 100%; | |
| } | |
| body { | |
| /* Margin bottom by footer height */ | |
| margin-bottom: 60px; | |
| } | |
| .footer { | |
| position: absolute; | |
| bottom: 0; | |
| width: 100%; | |
| /* Set the fixed height of the footer here */ | |
| height: 60px; | |
| background-color: #f5f5f5; | |
| } | |
| body > .container { | |
| padding-top: 60px; | |
| } | |
| .dropdown-menu > li > label { | |
| display: block; | |
| padding: 3px 10px; | |
| clear: both; | |
| font-weight: 400; | |
| line-height: 1.42857143; | |
| color: #333; | |
| white-space: nowrap; | |
| } | |
| .navbar-inverse .dropdown-menu > li > label { | |
| color: #ccc; | |
| } | |
| ul { | |
| padding-left: 0; | |
| } | |
| </style></head><body> | |
| <nav class="navbar navbar-default navbar-fixed-top navbar-inverse"> | |
| <div class="container"> | |
| <div class="navbar-header"> | |
| <button aria-controls="navbar" aria-expanded="false" class="navbar-toggle collapsed" data-target="#navbar" data-toggle="collapse" type="button"> | |
| <span class="sr-only">Toggle navigation</span> | |
| <span class="icon-bar"></span> | |
| <span class="icon-bar"></span> | |
| <span class="icon-bar"></span> | |
| </button> | |
| <a class="navbar-brand" id="dlc">Calendar of HAI Events by…</a> | |
| </div> | |
| <div class="collapse navbar-collapse" id="navbar"> | |
| <ul class="nav navbar-nav"> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Regions | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="byregion"></ul> | |
| </li> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Prerequisites | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="byprereq"></ul> | |
| </li> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Levels | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="bylevels"></ul> | |
| </li> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Facilitators | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="byleader"></ul> | |
| </li> | |
| </ul> | |
| </div> | |
| </div> | |
| </nav> | |
| <div class="container"> | |
| <ul id="events"></ul> | |
| </div> | |
| <footer class="footer" id="fetch"> | |
| <div class="container"> | |
| <p class="text-muted"> | |
| Tip: click the "Calendar" link to save your event selection as a calendar to your device's calendar | |
| </p> | |
| </div> | |
| </footer> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> | |
| <script src="events.es5.js"></script> | |
| </body></html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| {"005i0000002bTz2AAE":{"name":"Anne Watts","id":"005i0000002bTz2AAE","img":"/angels/profilephoto/729i0000000dvaP/F","facilitator":true} | |
| ,"005i0000002baZGAAY":{"name":"Donna Rengel","id":"005i0000002baZGAAY","img":"/angels/profilephoto/729i00000001NpS/F","facilitator":true} | |
| ,"005i0000002EChFAAW":{"name":"Felicia Cosey","id":"005i0000002EChFAAW","img":"/angels/profilephoto/729i0000000dqtK/F","facilitator":true} | |
| ,"005i0000001nIiIAAU":{"name":"Jason Weston","id":"005i0000001nIiIAAU","img":"/angels/profilephoto/729i0000000QXog/F","facilitator":true} | |
| ,"005i0000002EGXGAA4":{"name":"Marci Graham","id":"005i0000002EGXGAA4","img":"/angels/profilephoto/729i0000000dr54/F","facilitator":true} | |
| ,"005i0000002EcbeAAC":{"name":"Peter Rengel","id":"005i0000002EcbeAAC","img":"/angels/profilephoto/729i00000001NpN/F","facilitator":true} | |
| ,"005i0000002E85yAAC":{"name":"Peter Sandhill","id":"005i0000002E85yAAC","img":"/angels/profilephoto/729i0000000dvXJ/F","facilitator":true} | |
| ,"005i0000002EDDGAA4":{"name":"Rich Walkden","id":"005i0000002EDDGAA4","img":"/angels/profilephoto/729i0000000dqwJ/F","facilitator":true} | |
| ,"005i0000002EGDBAA4":{"name":"Sarah Sandhill","id":"005i0000002EGDBAA4","img":"/angels/profilephoto/729i00000001NpI/F","facilitator":true} | |
| ,"005i0000002EAGMAA4":{"name":"Pauline Valvo","id":"005i0000002EAGMAA4","img":"/angels/profilephoto/729i0000000QStl/F"} | |
| ,"005i0000002d8AWAAY":{"name":"Laura Machida","id":"005i0000002d8AWAAY","img":"/angels/profilephoto/729i0000000eCCr/F"} | |
| ,"005i0000002d91XAAQ":{"name":"Patrick Day","id":"005i0000002d91XAAQ","img":"/angels/profilephoto/005/F"} | |
| ,"005i0000002bBetAAE":{"name":"Wahila Wilkie","id":"005i0000002bBetAAE","img":"/angels/profilephoto/729i0000000fysF/F"} | |
| ,"005i0000002Drc7AAC":{"name":"Phoenix Singer","id":"005i0000002Drc7AAC","img":"/angels/profilephoto/729i0000000QZOz/F"} | |
| ,"005i0000002bbv0AAA":{"name":"John Nadler","id":"005i0000002bbv0AAA","img":"/angels/profilephoto/729i0000000eFky/F"} | |
| ,"005i0000002D4iTAAS":{"name":"Karen Goldberg","id":"005i0000002D4iTAAS","img":"/angels/profilephoto/729i0000000doQv/F"} | |
| ,"005i0000002d8UfAAI":{"name":"Dave Tuscany","id":"005i0000002d8UfAAI","img":"/angels/profilephoto/729i0000000e1E5/F"} | |
| ,"005i0000002cJZ9AAM":{"name":"Dana Piper","id":"005i0000002cJZ9AAM","img":"/angels/profilephoto/729i0000000QT8R/F"} | |
| ,"005i0000002EbiSAAS":{"name":"Erin Gilligan","id":"005i0000002EbiSAAS","img":"/angels/profilephoto/729i0000000dveJ/F"} | |
| ,"005i0000002bWLFAA2":{"name":"Jim Dawson","id":"005i0000002bWLFAA2","img":"/angels/profilephoto/729i0000000QYCO/F"} | |
| ,"005i0000003TBx7AAG":{"name":"Christine Fodor","id":"005i0000003TBx7AAG","img":"/angels/profilephoto/729i0000000eGME/F"} | |
| ,"005i0000002bqxPAAQ":{"name":"Karen Glover","id":"005i0000002bqxPAAQ","img":"/angels/profilephoto/005/F"} | |
| ,"005i0000002d1OnAAI":{"name":"Lydia Carbone","id":"005i0000002d1OnAAI","img":"/angels/profilephoto/729i0000000e3ko/F"} | |
| ,"005i0000002cORnAAM":{"name":"Robyn Vogel","id":"005i0000002cORnAAM","img":"/angels/profilephoto/729i0000000MDGX/F"} | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // delete?! | |
| let old_filterEvents = (regions) => { | |
| const visibleRegions = regions.map(({region}) => region).filter(region => | |
| (document.getElementById(region) || {}).checked | |
| ); | |
| const prereq = Array.from(document.querySelectorAll('input[name=prereq]')).find( | |
| ({ checked }) => checked | |
| ).value || null; | |
| const level = {}, leader = {}; | |
| Array.from(document.querySelectorAll('#bylevels input')).forEach( | |
| ({ value, checked }) => level[value] = checked | |
| ); | |
| Array.from(document.querySelectorAll('#byleader input')).forEach( | |
| ({ value, checked }) => leader[value] = checked | |
| ); | |
| const otherFacs = byLeader.querySelector('input[value=""]').checked; | |
| const shownEvents = []; | |
| console.log('lst', eventLst, eventLst && eventLst.children.length); | |
| Array.from(eventLst.children).forEach((e, n) => { | |
| const event = events[n]; | |
| const showRegion = visibleRegions.indexOf(event.region) !== -1; | |
| const showPrereq = event.prereq == prereq || prereq == '*'; | |
| const showLevels = level[event.level === 0 ? 0 : event.level || '']; | |
| const facs = event.facilitators; | |
| const picks = facs.filter(id => leader[id]); | |
| const mainfacs = facs.filter(id => id && (id in leader)); | |
| const showLeader = !!picks.length || otherFacs && | |
| (!event.facilitators.length || picks.length !== mainfacs.length); | |
| const show = showRegion && showPrereq && showLevels && showLeader; | |
| e.style.display = show ? 'block' : 'none'; | |
| console.info(n, show ? 'show' : 'hide'); | |
| if (show) shownEvents.push(event); | |
| }); | |
| // update ical link | |
| const showDLC = !!shownEvents.length; | |
| document.querySelector('#fetch').style.display = showDLC ? 'block' : 'none'; | |
| if (showDLC) { | |
| const dlc = document.getElementById('dlc'); | |
| const text = dlc.textContent, {className} = dlc; | |
| let name = `2017 HAI events in ${visibleRegions.join('/')}`; | |
| let filename = `2017-hai-events-${visibleRegions.join('+')}`; | |
| if (prereq !== '*') { | |
| filename += '-' + (prereq ? prereq.replace(/\s+/g, '') : 'public'); | |
| let desc = document.querySelector(`#p${prereq}`); | |
| if (desc) desc = desc.nextSibling.nodeValue.trim(); | |
| name += prereq ? ` requiring ${desc}` : ' open to the public'; | |
| } | |
| filename += '.ics'; | |
| const a = icalLink({text, name, filename, events: shownEvents}); | |
| a.id = 'dlc'; | |
| a.className = className; | |
| dlc.parentNode.replaceChild(a, dlc); | |
| } | |
| }; | |
| // OLD; drop, after verifying getEventFiter works right: | |
| const old_renderFilters = (regions, levels, facilitators) => { | |
| function input({ text, title, id, type, name, value, checked, onclick }) { | |
| const li = document.createElement('li'); | |
| let label = document.createElement('label'); | |
| let input = document.createElement('input'); | |
| if (id) input.id = id; | |
| if (name) input.name = name; | |
| if (value != null) input.value = value; | |
| input.checked = !!checked; | |
| input.type = type || 'checkbox'; | |
| input.onclick = onclick; // FIXME?! || filterEvents; | |
| if (title) label.title = title; | |
| li.appendChild(label); | |
| label.appendChild(input); | |
| label.appendChild(document.createTextNode(' ' + text)); | |
| return li; | |
| } | |
| // "All regions" toggle | |
| byRegion.appendChild(input({ text: 'All', onclick: (e) => { | |
| const {checked} = e.target; | |
| regions.forEach( | |
| ({region}) => document.getElementById(region).checked = checked | |
| ); | |
| filterEvents(); | |
| } })); | |
| // in Germany and Canada, show units as km instead of miles | |
| let unit = getUnitByRegion(regions[0].id); | |
| const units = ({ km:'km', mi: 'mi' }); | |
| regions.forEach(({ className, region, name, site, km, mi }, nth) => { | |
| let dist = region[unit] + units[unit], info; | |
| console.log(info = `${dist} to ${region} (${site})`); | |
| let li = input({text: name, id: region, checked: !nth, title: `~${info}`}); | |
| byRegion.appendChild(li); | |
| }); | |
| for (const text in prereqs) { | |
| const prereq = prereqs[text]; | |
| byPrereq.appendChild(input( | |
| { text | |
| , type: 'radio' | |
| , name: 'prereq' | |
| , value: prereq || '' | |
| , id: `p${prereq}` | |
| , checked: !prereq | |
| } | |
| )); | |
| } | |
| // "All levels" toggle | |
| byLevels.appendChild(input({ text: 'All', checked: true, onclick: (e) => { | |
| const {checked} = e.target; | |
| for (const text in levels) { | |
| if (/^-+$/.test(text)) continue; | |
| const level = levels[text]; | |
| document.getElementById(`l${level}`).checked = checked; | |
| } | |
| filterEvents(); | |
| } })); | |
| let $menu = $(byLevels); | |
| for (const text in levels) { | |
| const level = levels[text]; | |
| if (/^-+$/.test(text)) { | |
| $menu.append('<li class="divider" role="separator"></li>'); | |
| if (level) { | |
| $menu.append(`<li class="dropdown-header">${level}</li>`); | |
| } | |
| } else { | |
| byLevels.appendChild(input( | |
| { text | |
| , value: level | |
| , id: `l${level}` | |
| , checked: true | |
| } | |
| )); | |
| } | |
| } | |
| // "All facilitators" toggle | |
| byLeader.appendChild(input({ text: 'All', checked: true, onclick: (e) => { | |
| const {checked} = e.target; | |
| const checks = Object.assign({"": "Other"}, facilitators); | |
| for (const id in checks) { | |
| const f = facilitators[id]; | |
| if (f ? f.facilitator : !id) { | |
| document.querySelector(`#byleader input[value="${id}"]`).checked = checked; | |
| } | |
| } | |
| filterEvents(); | |
| } })); | |
| $menu = $(byLeader); | |
| for (const id in facilitators) { | |
| const leader = facilitators[id]; | |
| if (!leader.facilitator) { | |
| continue; | |
| $menu.append('<li class="divider" role="separator"></li>'); | |
| } else { | |
| byLeader.appendChild(input( | |
| { text: leader.name | |
| , value: id | |
| , checked: true | |
| } | |
| )); | |
| } | |
| } | |
| byLeader.appendChild(input( | |
| { text: "Other" | |
| , value: '' | |
| , checked: true | |
| } | |
| )); | |
| }; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| { "name": "hai-events-page" | |
| , "scripts": | |
| { "build": "./node_modules/babili/node_modules/.bin/babel --no-babelrc --presets es2015 --plugins transform-es2015-template-literals --compact true --no-comments < events.es6.js > events.es5.js" | |
| } | |
| , "dependencies": | |
| { "babili": "*" | |
| , "babel-preset-es2015": "*" | |
| , "babel-plugin-transform-es2015-template-literals": "*" | |
| } | |
| } |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| // WIP – needs testing and some extra "magic" filters for "Other" | |
| // facilitators / levels / prereq / regions, where those do exist | |
| const deQuery = (q = location.search, o = {}, d = decodeURIComponent) => | |
| (q.replace(/[?&]([^&=]*)(?:=([^&]*))?/g, | |
| (a, k, v) => o[d(k)] = d(v||'') | |
| ), o); | |
| const query = deQuery(); | |
| const eventUrl = query.e || 'https://gist.githubusercontent.com/johan/d7309c8c5e7dcd7ce160e88803aa29ab/raw/71ea321097ef2cae79992de9e64579cc18fde522/everything.json'; | |
| const eventLst = document.querySelector('#events'); | |
| const byRegion = document.querySelector('#byregion'); | |
| const byPrereq = document.querySelector('#byprereq'); | |
| const byLevels = document.querySelector('#bylevels'); | |
| const byLeader = document.querySelector('#byleader'); | |
| const getUnitByRegion = (id) => ({de: 'km', ca: 'km'})[region.id] || 'mi'; | |
| const prereqs = | |
| { "Any": "*" | |
| , "None": 0 | |
| , "HAI 1": 1 | |
| , "HAI 2": 2 | |
| , "HAI 3": 3 | |
| , "HAI 4": 4 | |
| , "HAI 5": 5 | |
| , "On Team": "t" | |
| }; | |
| const levels = | |
| { "HAI Mini": 0 | |
| , "-": null | |
| , "HAI 1": 1 | |
| , "HAI 2": 2 | |
| , "HAI 3": 3 | |
| , "HAI 4": 4 | |
| , "HAI 5": 5 | |
| , "HAI 6": 6 | |
| , "HAI 7": 7 | |
| , "HAI 8": 8 | |
| , "HAI 9": 9 | |
| , "--": null | |
| , "Couples 1": "c1" | |
| , "Couples 2": "c2" | |
| , "---": "Team Related" | |
| , "Assistant Training": "at" | |
| , "Active Listening Training": "alt" | |
| , "Team Workshop": "tw" | |
| , "Intern Workshop": "iw" | |
| , "----": null | |
| , "Others": "" | |
| }; | |
| // render (all-invisible) event list | |
| const renderEventList = (events) => { | |
| for (const event of events) { | |
| const {region, prereq, title, start, end, url} = event; | |
| const e = document.createElement('li'); | |
| let a = document.createElement('a'); | |
| a.href = url; | |
| a.textContent = `${iso(start)}: ${title}`; | |
| e.appendChild(gcalLink(event)); | |
| e.appendChild(a); | |
| a.style.marginLeft = '8px'; | |
| e.style.display = 'none'; | |
| eventLst.appendChild(e); | |
| } | |
| }; | |
| // returns a function(event) that checks if it is visible, per current filters | |
| const getEventFilter = ({regions, levels, facilitators}) => { | |
| // if a checkbox is checked, accept events having its correspondign property | |
| function testProp(event) { | |
| return this.inputs.find(i => i.checked && i.value == event[this.property]); | |
| } | |
| let prereqs = // TODO: derive from levels: | |
| [ { name: "None", id: 0 } | |
| , { name: "HAI 1", id: 1 } | |
| , { name: "HAI 2", id: 2 } | |
| , { name: "HAI 3", id: 3 } | |
| , { name: "HAI 4", id: 4 } | |
| , { name: "HAI 5", id: 5 } | |
| , { name: "On Team", id: "t" } | |
| ]; | |
| class Filter { | |
| constructor({ | |
| property, list, root, all, selectMultiple, test = testProp, checked | |
| }) { | |
| this.test = test; | |
| this.root = root; | |
| this.property = property; | |
| const text = all; | |
| console.info('new', {test, root, property, checked}); | |
| this.setupFilters(list, text, selectMultiple, checked); | |
| // this.init(); - made redundant, by storing references in setupFilters | |
| } | |
| updateAllStateOnCheckboxToggle() { | |
| const checkCount = this.inputs.reduce((sum, i) => sum + i.checked, 0); | |
| const {allCheckbox} = this; | |
| if (checkCount === 0 || checkCount === this.inputs.length) { | |
| allCheckbox.checked = !!checkCount; | |
| allCheckbox.indeterminate = false; | |
| console.info('all/nothing', !!checkCount); | |
| } else { | |
| allCheckbox.indeterminate = true; | |
| console.info('indeterminate'); | |
| } | |
| filterEvents(); // FIXME: clean up dep on global var | |
| } | |
| // init() { | |
| // this.skip = (root || document).querySelector( | |
| // `input[name="${name}"][value="*"]` | |
| // ); | |
| // this.inputs = Array.from((root || document).querySelectorAll( | |
| // 'input[name="${name}"]:not([value="*"])' | |
| // )); | |
| // } | |
| // populate the menu | |
| setupFilters( | |
| list, text = 'All', | |
| selectMultiple = true, | |
| checked = (item, n) => !n // default to always check just the first item | |
| ) { | |
| // nests the DOM of a list {item/label/checkbox|radio button} | |
| function input({ text, title, id, type, name, value, checked, onclick }) { | |
| const li = document.createElement('li'); | |
| let label = document.createElement('label'); | |
| let input = document.createElement('input'); | |
| if (id) input.id = id; | |
| if (name) input.name = name; | |
| if (value != null) input.value = value; | |
| input.checked = !!checked; | |
| input.type = type || 'checkbox'; | |
| if (onclick) { | |
| input.onclick = onclick; | |
| } // else { console.warn('no filter set', {text, title, id}); } // FIXME | |
| else { | |
| input.onclick = onUpdate; | |
| } | |
| if (title) label.title = title; | |
| li.appendChild(label); | |
| label.appendChild(input); | |
| label.appendChild(document.createTextNode(' ' + text)); | |
| return { input, li }; | |
| } | |
| const onUpdate = this.updateAllStateOnCheckboxToggle.bind(this); | |
| const type = selectMultiple ? 'checkbox' : 'radio'; | |
| // render the first "All" / "Any" item, to skip checks for this property: | |
| let all = input( | |
| { text | |
| , type | |
| , name: this.property | |
| , value: '*', | |
| onclick: (e) => { | |
| const {checked} = e.target; | |
| for (const input of this.inputs) { | |
| input.checked = checked; | |
| }; | |
| filterEvents(); // TODO: trigger events instead? | |
| } | |
| , checked: list.every(checked) | |
| }); | |
| this.skip = this.allCheckbox = all.input; | |
| this.root.appendChild(all.li); | |
| // render all the other items in the menu | |
| let n = 0; | |
| this.inputs = []; | |
| for (const opt of list) { | |
| const {id, name} = opt; | |
| const item = input( | |
| { text: name | |
| , id | |
| , checked: checked(opt, n++, list) | |
| } | |
| ); | |
| this.inputs.push(item.input); | |
| this.root.appendChild(item.li); | |
| n++; | |
| } | |
| } | |
| } | |
| // inits root, property, test, skip, inputs for each of these filters: | |
| const filters = | |
| [ new Filter({ root: byRegion, property: 'region', list: regions}) | |
| , new Filter({ root: byPrereq, property: 'prereq', list: prereqs}) | |
| , new Filter({ root: byLevels, property: 'level', list: levels | |
| , checked: () => true | |
| }) | |
| , new Filter({ root: byLeader, property: 'facilitators', list: facilitators | |
| // if a facilitator is checked, accept events with at least that leader | |
| , test: function facChecked(event) { | |
| // FIXME: this gets called on regions, not events?! on unclicking All | |
| return this.inputs.find( | |
| i => i.checked && event.facilitators.indexOf(i.value) !== -1 | |
| ); | |
| } | |
| , checked: () => true | |
| }) | |
| ]; | |
| return function(e) { | |
| let check = (filter) => { | |
| const {indeterminate, checked} = filter.allCheckbox; | |
| return (checked && !indeterminate) || filter.test(e); | |
| }; | |
| // FIXME: this shouldn't be needed; e should always be an event, not Array | |
| if (Array.isArray(e)) { | |
| console.warn('eventFilter(', e, ')'); | |
| check = (filter) => { | |
| const {indeterminate, checked} = filter.allCheckbox; | |
| return (checked && !indeterminate) || e.every(E => filter.test(E)); | |
| }; | |
| } | |
| return filters.every(check); | |
| }; | |
| }; | |
| const fetchJSON = (url) => new Promise((resolve, reject) => { | |
| fetch(url).catch(reject).then( | |
| (res) => res.text().catch(reject).then( | |
| (j) => resolve(JSON.parse(j)) | |
| ) | |
| ); | |
| }); | |
| const cached = (as, promiseFunc, ms = 3600e3) => new Promise((resolve, reject) => { | |
| let {from, data} = JSON.parse(localStorage[as] || '{}'); | |
| if (data && Date.now() - (from || 0) < ms) { | |
| console.log(`Cached ${as} from last ${ms/3600e3}h`); | |
| resolve(data); | |
| } else { | |
| console.log(`Fetching ${as} from source`); | |
| promiseFunc().catch( | |
| () => data ? resolve(data) : reject() | |
| ).then( | |
| (data) => { | |
| localStorage[as] = JSON.stringify({from: Date.now(), data}); | |
| resolve(data); | |
| } | |
| ); | |
| } | |
| }); | |
| const cacheJSON = (url) => cached(url, () => fetchJSON(url)); | |
| const geoLocate = () => new Promise((resolve, reject) => { | |
| const {geolocation} = navigator; | |
| if (geolocation) { | |
| geolocation.getCurrentPosition(resolve, reject); | |
| } else { | |
| reject(); | |
| } | |
| }); | |
| const geoLocateOrNorcal = () => new Promise((resolve, reject) => { | |
| const resolveFallback = () => resolve( | |
| { fallback: true | |
| , coords: | |
| { latitude: 37.4 | |
| , longitude: -122.1 | |
| } | |
| } | |
| ); | |
| const resolveJSONable = ({coords}) => { | |
| const {latitude, longitude} = coords; | |
| resolve({coords: {latitude, longitude}}); | |
| }; | |
| geoLocate().then(resolveJSONable).catch(resolveFallback); | |
| }); | |
| const cachedGeo = () => cached('geo', geoLocateOrNorcal); | |
| const ical = ({name, desc, domain, events}) => { | |
| function vevent({summary, title, start, end, uid, geo, url, description}) { | |
| start = date(start); | |
| end = date(end); | |
| const now = date(new Date); | |
| const name = summary || title || ''; | |
| const slug = name.replace(/\W+/g, '-'); | |
| if (!uid) uid = `${start}-${slug}`; | |
| const props = | |
| [ `UID:${uid}@${domain}` | |
| , `DTSTAMP:${now}` | |
| , `DTSTART:${start}` | |
| , `DTEND:${end}` | |
| ]; | |
| if (name) props.push(`SUMMARY:${name}`); | |
| if (geo) props.push(`GEO:${geo}`); | |
| if (url) props.push(`URL:${url}`); | |
| if (description) props.push(`DESCRIPTION:${description}`); | |
| return ['BEGIN:VEVENT', ...props, 'END:VEVENT'].join('\r\n'); | |
| } | |
| domain = domain || location.hostname; | |
| const optionals = []; | |
| if (name) { optionals.push(`X-WR-CALNAME:${name}`); } | |
| if (desc) { optionals.push(`X-WR-CALDESC:${desc}`); } | |
| return [ 'BEGIN:VCALENDAR' | |
| , 'VERSION:2.0' | |
| , 'METHOD:PUBLISH' | |
| , `PRODID:-//${domain}//iCal Events` | |
| , ...optionals | |
| , ...events.map(vevent) | |
| , 'END:VCALENDAR', '' | |
| ].join('\r\n'); | |
| }; | |
| // caniuse.com/#search=download - covered mostly everywhere | |
| const icalLink = ({text, name, filename, domain, events}) => { | |
| var ics = ical({name, domain, events}); | |
| var a = document.createElement('a'); | |
| //a.href = `data:text/calendar;base64,${btoa(ics)}`; | |
| a.href = `data:text/calendar,${encodeURIComponent(ics)}`; | |
| a.download = filename || 'calendar.ics'; | |
| a.textContent = text || name; | |
| return a; | |
| } | |
| const gcalUrl = (event) => { | |
| let {summary, title, start, end, url, description} = event; | |
| let calurl = 'https://www.google.com/calendar/render'; | |
| let query = | |
| { action: 'TEMPLATE' | |
| , text: summary || title | |
| , dates: date(start) + '/' + date(end) | |
| , details: description | |
| , location: url | |
| , sf: 'true' | |
| , output: 'xml' | |
| }; | |
| let sep = '?'; | |
| for (let key in query) { | |
| let val = query[key]; | |
| if (val) calurl += `${sep}${key}=${encodeURIComponent(val)}`; | |
| sep = '&'; | |
| } | |
| return calurl; | |
| } | |
| const gcalLink = (event) => { | |
| var a = document.createElement('a'); | |
| var i = document.createElement('img'); | |
| i.src = 'https://i.imgur.com/QlbTNwa.png'; | |
| i.width = i.height = 32; | |
| i.border = 0; | |
| a.appendChild(i); | |
| a.href = gcalUrl(event); | |
| a.target = '_blank'; | |
| var n = event.summary || event.title; | |
| if (n) a.title = i.alt = `Add "${n}" to Google Calendar`; | |
| return a; | |
| } | |
| const parseDate = (t) => { | |
| if (typeof t !== 'object' || !(t instanceof Date)) { | |
| if (typeof t !== 'number') { t = Date.parse(t); } | |
| t = new Date(t); | |
| } | |
| return t; | |
| } | |
| const date = (t) => parseDate(t).toISOString().replace(/[-:]|\.\d*/g, ''); | |
| const iso = (t) => { | |
| function p(n, c) { | |
| return ('0000' + n).slice(-(c || 2)); | |
| } | |
| return [ t.getFullYear(), '-' | |
| , p(t.getMonth() + 1), '-' | |
| , p(t.getDate()), ' ' | |
| , p(t.getHours()), ':' | |
| , p(t.getMinutes()) | |
| ].join(''); | |
| } | |
| const toRadians = (n) => n * Math.PI / 180; | |
| const toDegrees = (n) => n / Math.PI * 180; | |
| const haversineAngularDistance = ([lat1, lng1], [lat2, lng2]) => { | |
| const φ1 = toRadians(lat1); | |
| const φ2 = toRadians(lat2); | |
| const Δφ = toRadians(lat2 - lat1); | |
| const Δλ = toRadians(lng2 - lng1); | |
| const a = Math.sin(Δφ / 2) * Math.sin(Δφ / 2) + | |
| Math.cos(φ1) * Math.cos(φ2) * | |
| Math.sin(Δλ / 2) * Math.sin(Δλ / 2); | |
| return toDegrees(2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a))); | |
| }; | |
| // sorts the regions array, per a geolocation.getCurrentPosition response object | |
| const getRegionsByProximity = (regions, {coords: {latitude, longitude}}) => { | |
| const here = [latitude, longitude]; | |
| return regions.map(region => { | |
| const {lat, lng} = region; | |
| const degrees = haversineAngularDistance(here, [lat, lng]); | |
| const kilometers = 6371 * toRadians(degrees); | |
| const km = Math.round(kilometers); | |
| const mi = Math.round(kilometers / 1.60934); | |
| return Object.assign({degrees, km, mi}, region); | |
| }).sort((a, b) => a.degrees - b.degrees); | |
| } | |
| const now = Date.now(); | |
| const eventInFuture = ({end}) => end > now; | |
| const decodeEvent = (event) => { | |
| event.title = event.title.replace(/\s+/g, ' ').trim().replace(/[,.]+$/, ''); | |
| event.start = parseDate(event.start); | |
| event.end = parseDate(event.end); | |
| return event; | |
| }; | |
| Promise.all( | |
| [ cachedGeo() | |
| , cacheJSON(eventUrl) | |
| ]) | |
| .then(([pos, {regions, levels, facilitators, events}]) => { | |
| window.allevents = events; | |
| window.events = events = events.map(decodeEvent).filter(eventInFuture); | |
| window.regions = getRegionsByProximity(regions, pos); | |
| window.facilitators = facilitators; | |
| renderEventList(events); | |
| let filterEvent = getEventFilter({ regions, levels, facilitators }); | |
| let filterEvents = window.filterEvents = () => { | |
| console.info('debugger'); | |
| Array.from(eventLst.children).forEach((e, n) => { | |
| const event = events[n]; | |
| const show = filterEvent(event); | |
| e.style.display = show ? '' : 'none'; | |
| if (show) | |
| console.info(event, show ? 'show' : 'hide'); | |
| }); | |
| }; | |
| filterEvents(); | |
| }); |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| <!doctype html> | |
| <html lang="en"><head> | |
| <meta name="referrer" content="no-referrer"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/normalize/5.0.0/normalize.min.css"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/css/bootstrap.min.css"> | |
| <script>(function(l){for (var u in l)if(l[u])document.write('<script src="'+u+'"><\/script>')})( | |
| {"https://cdnjs.cloudflare.com/ajax/libs/promiz/1.0.6/promiz.min.js":typeof Promise !== 'function' || !Promise.resolve || Object.prototype.toString.call(Promise.resolve()) !== '[object Promise]' | |
| ,"https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js":typeof fetch!=='function' | |
| });if (!Array.from) Array.from = function(a) { | |
| for (var l = a.length, A = new Array(l), i = 0; i < l; i++) | |
| A[i] = a[i]; | |
| return A; | |
| };if (![].find) Array.prototype.find = function(f) { | |
| for (var i = 0; i < this.length; i++) | |
| if (f(this[i])) return this[i]; | |
| };</script> | |
| <style> | |
| html { | |
| position: relative; | |
| min-height: 100%; | |
| } | |
| body { | |
| /* Margin bottom by footer height */ | |
| margin-bottom: 60px; | |
| } | |
| .footer { | |
| position: absolute; | |
| bottom: 0; | |
| width: 100%; | |
| /* Set the fixed height of the footer here */ | |
| height: 60px; | |
| background-color: #f5f5f5; | |
| } | |
| body > .container { | |
| padding-top: 60px; | |
| } | |
| .dropdown-menu > li > label { | |
| display: block; | |
| padding: 3px 10px; | |
| clear: both; | |
| font-weight: 400; | |
| line-height: 1.42857143; | |
| color: #333; | |
| white-space: nowrap; | |
| } | |
| .navbar-inverse .dropdown-menu > li > label { | |
| color: #ccc; | |
| } | |
| ul { | |
| padding-left: 0; | |
| } | |
| </style></head><body> | |
| <nav class="navbar navbar-default navbar-fixed-top navbar-inverse"> | |
| <div class="container"> | |
| <div class="navbar-header"> | |
| <button aria-controls="navbar" aria-expanded="false" class="navbar-toggle collapsed" data-target="#navbar" data-toggle="collapse" type="button"> | |
| <span class="sr-only">Toggle navigation</span> | |
| <span class="icon-bar"></span> | |
| <span class="icon-bar"></span> | |
| <span class="icon-bar"></span> | |
| </button> | |
| <a class="navbar-brand" id="dlc">Calendar of HAI Events by…</a> | |
| </div> | |
| <div class="collapse navbar-collapse" id="navbar"> | |
| <ul class="nav navbar-nav"> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Regions | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="byregion"></ul> | |
| </li> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Prerequisites | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="byprereq"></ul> | |
| </li> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Levels | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="bylevels"></ul> | |
| </li> | |
| <li class="dropdown"> | |
| <a aria-expanded="false" aria-haspopup="true" class="dropdown-toggle" data-toggle="dropdown" href="#" role="button"> | |
| Facilitators | |
| <span class="caret"></span> | |
| </a> | |
| <ul class="dropdown-menu" id="byleader"></ul> | |
| </li> | |
| </ul> | |
| </div> | |
| </div> | |
| </nav> | |
| <div class="container"> | |
| <ul id="events"></ul> | |
| </div> | |
| <footer class="footer" id="fetch"> | |
| <div class="container"> | |
| <p class="text-muted"> | |
| Tip: click the "Calendar" link to save your event selection as a calendar to your device's calendar | |
| </p> | |
| </div> | |
| </footer> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/fetch/1.0.0/fetch.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> | |
| <script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.7/js/bootstrap.min.js"></script> | |
| <script src="rewrite.es6.js"></script> | |
| </body></html> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment