Skip to content

Instantly share code, notes, and snippets.

@captproton
Created November 25, 2020 04:33
Show Gist options
  • Save captproton/9e2abcd1cf992413fe98f4f4121ab67e to your computer and use it in GitHub Desktop.
Save captproton/9e2abcd1cf992413fe98f4f4121ab67e to your computer and use it in GitHub Desktop.
missionary search
<div class="container">
<div id="missionary-page-search" class="map-search"><span class="map-search-icon map-search-icon-search"></span>
<span class="map-search-icon map-search-icon-loading"></span>
<span class="map-search-icon map-search-icon-close"></span>
<input type="text" name="map-search" placeholder="Search for a location or missionary">
<ul class="suggestions"></ul></div>
<div class="wrap760" style="text-align: right;">
<div class="filters-toggle">Filters <span class="arrow">▼</span></div>
</div>
<div class="filters show">
<div class="wrap760 duration-select">
<label class="radio-label" for="any-duration">
<input type="radio" name="duration" id="any-duration" checked="checked" value="any-duration">
<div class="radio"></div>Any duration
</label>
<label class="radio-label" for="long-term">
<input type="radio" name="duration" id="long-term" value="long-term">
<div class="radio"></div>Long term
</label>
<label class="radio-label" for="short-term">
<input type="radio" name="duration" id="short-term" value="short-term">
<div class="radio"></div>Short term
</label>
</div>
<hr>
<ul class="regions">
<div class="back">◀ Back </div>
<li class="region">
<div class="locations" amount="13"></div>
<div class="region-button" data-location="northamerica" data-location-tooltip="North America">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="128px" height="128px" viewBox="0 0 128 128">
<path d="M57.6,30.7c0-0.3-0.1-0.7-0.1-1c0.7-0.5,1.4-1.3,2.1-1.3c3.1,0.1,6.1,0.4,9.2,0.7c0,0.5,0,1.1-0.1,1.6 C65,30.7,61.3,30.7,57.6,30.7z M95.6,30.2c-4.9-0.4-8.9-0.8-12.7-1.1C83.3,31.6,89.2,32.9,95.6,30.2z M80.9,20.8 c1.5,4,4.6,2.9,7.6,2.2c-0.5,1.5-1.1,2.9-1.6,4.5c4.5,0.9,8.9,1.1,12.1-3.4c0.8-1.1,1.2-2.5,2.2-3.1c3.8-2.3,7.7-4.3,12.4-6.8 c-10.3-2.9-19.3-1.4-28.6,2.7c1.7,0.8,3.5,1.5,4.8,2.1c-0.2,0.7-0.4,1.4-0.7,2.1c-1.9-0.9-3.7-2-5.7-2.8c-0.8-0.3-1.8,0-2.8,0.1 C80.7,19.1,80.6,20,80.9,20.8z M55.2,35.2c1.7,2,3,3.6,4.2,5.1c0,0-0.5,0.3-1,0.6c0.1,0.4,0.1,0.8,0.2,1.1c4.6,0,9.2,0,14,0 c-1.4-3.1-2.6-5.6-3.7-8c-4.6,2.5-5,2.5-10.9-0.7c-4-2.2-6.6-1.3-8.7,3C52.8,40.7,54,35.6,55.2,35.2z M108.5,71.2 c1.3,2,2.6,4,4.1,6.2c-0.2,0.1-0.8,0.9-1.3,0.8c-7.2-0.5-9.7,4.8-12.4,10c-0.3,0.7-0.4,1.7-0.9,1.9c-4.5,2-5.3,5.3-2.9,10.1 c-2.4-2.1-3.9-4.3-5.8-4.8c-2.3-0.7-5.1-0.4-7.4,0.4c-1.8,0.6-3.8,2.4-4.4,4.1c-1.1,2.9-0.6,6.3,2.6,7.9c1,0.5,3-0.4,4.4-1 c0.9-0.4,1.6-1.4,3.2-1.5c-0.3,1.7-0.7,3.3-1,5.3c1.5,0.2,3,0.4,4.6,0.6c0,1.8,0,3.5,0,4.2c-4.3-1.6-8.9-3.3-13.4-5.1 c-3.3-1.3-6.8-1.9-8.5-6.4c-1.4-3.7-5.1-6.6-7.9-9.7c-0.1-0.1-1.1,0.7-1.7,1c-5.6-6.2-12.4-12.4-8-21.4c-1.8-1.9-3.5-3.2-4.6-4.9 C42.6,61.8,36.3,57.4,28,56.1c-1.1-0.2-2.5,1.1-4.1,1.9c-0.2-0.6-0.5-1.3-1-2.4c-1.3,1.9-2.4,3.4-3.6,5.1c-3.4-2.2-8.7-1.1-10.3-6.3 c1.7-1,3.2-1.9,5.8-3.5c-3.1-0.5-4.9-0.8-6.7-1.1c0-0.4-0.1-0.9-0.1-1.3c1.5-0.3,2.9-0.7,4.3-1c-1.2-0.9-2.5-2-3.4-2.8 c4.7-6,9.9-6,15.6-4.4c3.9,1.1,7.9,1.7,11.9,2.3c1,0.2,2-0.1,3-0.4c7.2-2.1,13.9-1.4,20.5,2.1c1.6,0.8,3.8,0.7,5.7,0.7 c4.2-0.1,8.3-0.9,12.5-0.8c3.2,0.1,3.3-0.7,1.9-3.1c-0.5-0.9-0.5-2,0.2-3.3c2.5,2.5,5,5,7.8,7.9c0.9-1.5,1.7-2.8,3.3-5.3 c-0.7,0-1.5-0.1-2.2-0.3c-1.4-0.4-2.9-1.8-3.5-3.1c-0.3-0.7,1.1-2.3,2.4-4.5c0.3,2.3,0.5,3.1,0.5,3.1c2.9-0.7,5.6-1.4,8.3-2.1 c0.2,0.4,0.3,0.8,0.5,1.2c-0.9,0.2-1.8,0.5-2.6,0.7c8.9-0.8,12.6,7.1,19.2,12c-2.3,0-3.9,0-6.1,0c0.9,1.3,1.8,2.5,3.2,4.7 c-2.5,0-4.7,0.4-6.6-0.1c-2.1-0.5-4-1.8-5.3-2.4c1-1.3,2.4-3.1,3.7-4.8c-2.4-1.4-4.7-3.1-7.3-4c-1.2-0.4-2.6-0.3-4-0.4 c0.9,2.2,1.6,3.7,1.9,4.4c-4.3,3.4-8,6.2-11.4,9.3c-2.9,2.6-1.6,5.9,1.1,7.1c4.8,2.1,9.9,3.2,12.1,9.1c0.5-0.2,1-0.4,1.5-0.6 c0.5-5.3,1-10.6,1.6-16c4.6-1,7,2.5,9.5,6.2c1.3-0.8,2.3-1.6,3.2-2.1c2.8,3.4,5.7,6.7,9.2,10.9C116,69.5,112.3,70.3,108.5,71.2z M89.2,73.3c-1.8,0.3-3.6,0.6-5.4,1c0.1,0.4,0.1,0.9,0.2,1.3c1.2,0,2.4,0,3.8,0c-0.1,2.3-0.3,4-0.4,5.7c0.6,0,1.2,0,1.8,0 C89.2,78.6,89.2,76,89.2,73.3z"/>
</svg>
</div>
</li>
<li class="region">
<div class="locations" amount="14"></div>
<div class="region-button" data-location="southamerica" data-location-tooltip="South America">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="128px" height="128px" viewBox="0 0 128 128">
<path d="M100.4,37.3c-4.7,4.4-5.4,10.2-6.9,15.9c-1,3.7-2.5,6.6-7.2,7.7c-3.7,0.9-6.7,3.1-7.7,8.3 c-0.8,4.4-4.8,8.3-8,11.9c-1,1.1-4,0.4-6.1,0.6c1.9,6.2,1.9,6.1-5,7.9c-0.8,0.2-1.6,0.7-2.2,1.3c-1.3,1.2-2.4,2.6-3.2,4 c-1.3,2.5-2.9,4.8-3.8,7.4c-0.5,1.5-0.1,3.3-0.1,4.9c0.4,0.1,0.9,0.1,1.3,0.2c-0.9,1.1-1.7,2.1-2.6,3.2c-3.3,4.2-3.1,6.4,0.4,10.7 c0.5,0.6,0.2,2,0.3,3c-1.3,0-2.5,0-3.8,0c-0.6-0.7-1-1.6-1.7-2c-1.8-1.2-5-2-5.3-3.5c-1-4.4-1.4-9-1.2-13.5c0.1-2.5,2.3-4.8,2.7-7.3 c0.3-2-1.2-4.2-0.9-6.2c1.1-7.4,2.5-14.7,3.9-22.1c0.3-1.9,0.6-3.7,1-5.6c1.5-7.2,0.8-12.9-7.4-16c-2.5-1-3.6-5.5-5.3-8.5 c-0.7-1.2-1.2-2.6-2-3.8c-3.8-5.6-3.6-10.3,0.5-15.9c1-1.4,2.2-3.2,2.2-4.8c0.2-7.1,1.9-9.5,9.1-11.5c0.1,1.3,0.1,2.6,0.2,3.8 c1.4-2.6,2.6-4.3,5.9-2.4C49.4,6,52,5.3,54,5.9c2.7,0.9,5.1,2.5,7.6,3.8c2.9,1.4,5.7,3,8.7,4c5.2,1.6,7.1,5.2,4.3,9.9 c1.5,1.6,2.7,4.1,5.3,0.9c0.4-0.4,1.5-0.6,2.1-0.4c6.1,2.4,12.2,4.6,18.1,7.5C101.1,32,101.3,36.4,100.4,37.3z"/>
</svg>
</div>
</li>
<li class="region">
<div class="locations" amount="18"></div>
<div class="region-button" data-location="europe" data-location-tooltip="Europe">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="128px" height="128px" viewBox="0 0 128 128">
<path d="M70,34.6c4.4-0.9,5-4.6,7.1-7.3c3.7-4.7,7.8-9.3,12.2-13.4c1.4-1.3,4.3-1.1,6.7-1.6c-0.1,7.2,3,13.2,6.6,19 c0.4,0.7,0.2,2.6-0.4,3.1c-2.9,2.3-5.9,4.4-9,6.2c-0.7,0.4-3-0.6-3.2-1.3c-0.5-2-0.8-4.3-0.1-6.1c0.8-2.3,2.7-4.3,4.2-6.5 c-2.8-3-4.2-0.9-5.4,0.8c-1.5,2.1-2.6,4.3-3.9,6.5c-1.5,2.4-4.2,4.8-0.2,7.5c0.3,0.2,0.4,1.5,0.1,2c-2.3,3.8-4.8,7.6-7.6,12 c-1.9-4.4-3.3-7.8-4.8-11.1c-2.1,1.1-4.6,2.3-7.4,3.7c-0.2-3-0.4-5-0.5-7C64.2,37.2,66.9,35.2,70,34.6z M48.4,44.8 c-0.7,1.1-1,1.7-1.5,2.5c0.9,0.3,1.8,0.5,2.8,0.8c-0.9,1-1.7,2-2.5,2.9c1.1,3.6,2.1,7.1,3.3,11.1c0,0,0.7,0.3,2.3,0.9 c-2.4,1.7-4.1,3.6-6.2,4.2c-2.4,0.7-5.2,0.2-8-0.6c1.1-0.5,2.2-0.9,3.7-1.5c-1.1-0.7-2.1-1.2-3.2-1.8c1.6-1.4,3.5-2.7,4.8-4.4 c0.7-0.9,0.9-3,0.4-3.9C40.8,49.4,41.4,47.3,48.4,44.8z M32.4,21.9c0.3-0.9,0.7-1.8,0.9-2.3c2.8,0.5,5.1,0.8,7.4,1.4 c0.9,0.2,2.2,1,2.3,1.7c0.1,0.7-0.8,2.1-1.5,2.4c-1.7,0.7-3.5,1.1-5.3,1.4C33,26.9,31.5,25,32.4,21.9z M36.8,53.5 c0.7-0.2,1.7-0.2,2.3,0.2c0.5,0.3,0.9,1.4,0.8,2c-1.1,4.9-5.2,7-11.1,5.2C31.4,58,33.2,54.8,36.8,53.5z M77.4,115.7 c-2.7-1.1-5-2.1-7.2-3c0.1-0.5,0.1-1,0.2-1.4c2.3-0.2,4.5-0.4,7.1-0.6C77.4,112.2,77.4,113.6,77.4,115.7z M118.5,75.1 c-1.5,1-3.8,1.6-4.3,2.9c-1.3,3.5-2.2,7.3-2.5,11c-0.1,1.6,1.4,3.3,2.6,5.6c-2,0.5-4.6,1.1-7.2,1.9c-1.3,0.4-2.4,1.3-3.7,1.9 c-1.3,0.6-2.7,1-5.1,1.9c0.9,1.9,2.2,4.6,3.4,7.3c-0.4,1.2-1,2.8-1.9,5.5c-1.5-1.3-3.1-2.6-5.5-4.5c2.6-0.4,4.2-0.7,5.7-0.9 c-6.1-1-9.4-4.4-10.2-10.5c-0.1-0.9-1.1-1.9-1.9-2.5c-4-3-8.6-5.4-12.1-8.9c-1.8-1.7-2.9-2-3.9-0.4c-0.7,1.1-0.8,3.7,0,4.6 c3.3,4,7.1,7.6,10.6,11.2c-0.1,1.6-0.2,3.7-0.2,5.1c-3.6-2.8-7.5-5.7-11.2-8.8c-2-1.7-3.8-3.8-5-6c-2-3.5-4.6-2.9-6.7-1 c-2.8,2.5-5.5,2.7-8.9,1.5c-0.8-0.3-3.3,1.2-3.3,1.6c0.3,2.7-1.6,2.9-3.3,3.7c-4.4,1.9-9.3,3.1-9.6,9.5c-0.1,2.3-6.8,5.1-10.3,4.8 c-1.1-0.1-2.4-0.5-3.4-0.1c-2.7,0.9-4.4,0.3-6.2-2c-1.1-1.5-3.3-2.1-5-3.1c-0.8-6.6,5.2-10,7.6-15.3c2.7-5.8,6.4-4.4,10.6-3 c3.6,1.2,7.5,4,10.5-1.2c2.8-4.9,2-8.9-3-13.1c0.6-0.4,1.4-1.1,1.6-1c3.7,1.9,6.7-0.9,9.5-1.9c4.9-1.8,9.3-5.3,13.9-8.1 c1.1-0.7,2.3-1.7,3.5-1.7c2.7-0.1,3.7-0.7,3.2-3.8c-0.3-2.2,0.8-4.7,1.2-7c0.6,0.1,1.2,0.2,1.8,0.3c-0.3,1.4-0.3,2.9-1,4.1 c-1.6,2.6,0.1,4.1,2,4.4c2.4,0.4,5.8,0.8,7.2,0.1c3.8-1.9,7.6-1.8,11.5-2.1c0.8,0,1.6-0.6,2.4-1c-0.4-0.8-0.9-1.5-1-2.3 C90.9,51.9,90.6,50,90,47c2.6,1.1,3.8,1.6,6,2.5c-0.7-2.7-1.1-4.5-1.8-6.9c1.3-0.4,3-0.8,4.6-1.3c-0.2,0.4-0.5,0.8-0.7,1.1 c2.7,3.6,5.3,7.4,8.3,10.8c1.3,1.5,2.5,5.5,2.8,7.5c0.3,1.9,1.8,4,3.4,5.1c1.5,0.9,3.8,0.5,5.8,0.7 C118.5,69.3,118.5,72.2,118.5,75.1z"/>
</svg>
</div>
</li>
<li class="region">
<div class="locations" amount="12"></div>
<div class="region-button" data-location="africa" data-location-tooltip="Africa">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="128px" height="128px" viewBox="0 0 128 128">
<path d="M104.4,101.2c-1.1,2-4,1.3-4.1-1c-0.1-3.4,0.5-6.8,1-10.1c0.1-0.4,0.8-0.7,1.2-1c1.8-1.4,3.7-2.8,6.1-4.7 C109.3,90.7,107.1,96.1,104.4,101.2z M100.4,65.4c-5,3.2-7.3,8.4-6.2,12.7c0.6,2.4,0.9,5,1.4,7.5c0.5,2.4-0.6,3.8-2.7,4.8 c-3.2,1.6-6.7,3.1-4.1,7.9c0.3,0.5,0.1,1.7-0.2,1.9c-4.7,2.9-4.6,9-8.4,12.3c-1.7,1.4-3.8,2.7-6,3.1c-4.4,1-8.5,2-9.9-5 c-1.4-6.5-5.2-12.4-7.6-18.7c-0.5-1.4-0.1-3.6,0.6-5c2.3-4.5,1.7-11.2-1.9-15c-2-2.1-3.1-3.8-1.8-6.9c1-2.4,0.3-4.6-3.1-4.8 c-1.1-0.1-2.1-1-3.2-1.3c-1.5-0.5-3-1.1-4.5-1c-3.3,0.3-6.7,0.6-9.8,1.7c-3.3,1.2-5.7,0-7.8-2.1c-2.6-2.6-4.9-5.5-7.3-8.2 c-0.2-0.3-0.4-0.8-0.4-1.1c0-4.1-0.7-8.4,0.4-12.2c1.1-3.8,2.5-8.2,7.2-9.9c1-0.4,1.9-2,2.3-3.2c1.5-5.1,3.7-6.9,9.2-7.2 c0.5,0,1-0.3,1.6-0.4c3.9-0.9,7.9-1.8,11.8-2.7c1-0.2,2-0.6,3-0.8c0.5,0,1.1,0,1.6,0c0.2,1,0.8,2.1,0.6,3.1c-0.5,2.9,0.7,4,3.4,4.3 c1.3,0.1,2.5,1,3.6,1.7c2.2,1.4,4.3,3.7,5.9-0.7c0.2-0.5,1.9-0.8,2.9-0.7c4.4,0.6,8.7,1.4,13,2.2c1.3,0.2,2.6,0.5,3.6,1.3 c0.4,0.3-0.2,1.9-0.5,2.9c-0.1,0.2-0.8,0.2-1.4,0.4c2.8,6,5.3,12,8.5,17.6c1.6,2.9,4.1,5.3,6.5,7.6c0.6,0.5,2.2,0,3.4-0.1 c2-0.3,4-0.6,6.6-1.1C108.7,56.8,105.9,61.9,100.4,65.4z"/>
</svg>
</div>
</li>
<li class="region">
<div class="locations" amount="5"></div>
<div class="region-button" data-location="asia" data-location-tooltip="Asia">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="128px" height="128px" viewBox="0 0 128 128">
<path class="st0" d="M70.8,98c-1-0.5-2-1-3-1.5c1.4-1.7,2.8-3.4,4.3-5.1c0.5,0.3,1,0.6,1.6,0.9C72.7,94.2,71.8,96.1,70.8,98z M93.5,101.9c-2.7-0.9-5.3-1.8-8-2.6c0.2-0.7,0.5-1.4,0.7-2.2c2.7,0.9,5.3,1.8,8,2.7C94,100.5,93.7,101.2,93.5,101.9z M120.8,41.3c-2.5-1.5-3.4-0.8-4.8,1.8c-1,1.9-4.1,3.6-6.3,3.6c-3.2,0-4.5,1.1-5.4,3.8c-0.4,1.3-1.7,2.4-2.6,3.6c-0.5-0.3-1-0.6-1.5-0.8c1.2-2.3,2.3-4.7,3.5-7c-3.6-1.7-14.5,1.9-17.4,6c4,2.8,3.1,8.5-1.7,10.9c-4.2,2.1-4.2,2.1-4.1,6.6c-1.9-2.3-3-6-7-3c0.3,1,0.7,1.9,0.9,2.8c1.6,6.6,0.2,9.1-6.4,10.6c-3,0.7-4.5,1.2-2.2,4.4c0.7,1,0,2.9-0.1,4.4c-0.6,0.2-1.1,0.3-1.7,0.5c-2.9-2.8-5.6-5.8-8.7-8.3c-0.9-0.8-3.4-0.9-4.2-0.3c-2.5,2.3-4.5,5.1-6.6,7.5c-2.1-3-3.9-7.6-7.2-9.9c-3.5-2.4-8.5-2.6-12.9-3.9c-1.7,5.8,6.2,2,7.2,6.6c-3.3,1.9-6.6,3.8-10.6,6.1c-1.6-6.9-8.8-10.7-5.8-18.1c-2.3-0.5-4.4-1-6.5-1.5c0-0.7,0-1.3,0.1-2c3.3-0.4,6.6-0.8,10.4-1.3c-2.2-1-1.1-4.8-5.6-3.7c-2.1,0.5-7.4-0.7-6.9-6c0.1-1-1.1-2.1-2-3.8c5.4-3.1,9.1-7.5,5.3-15.7c3.9,1.6,6.3,2.5,9.8,3.9c-2.6,0.7-4,1-5.4,1.4c0.1,0.5,0.2,0.9,0.3,1.4c1.8-0.5,3.5-1.1,5.3-1.6c4.9-1.4,9.8-2.8,14.7-4c0.7-0.2,1.7,0.6,2.6,0.9c0.5-1.8,1-3.6,1.5-5.4c0.4,0.1,0.9,0.2,1.3,0.3c0.4,1.6,0.9,3.2,1.3,4.7c0.2,0,0.4,0,0.6,0c0.1-1.2,0.3-2.4,0.4-3.3c8.6-3.2,16.5-9.6,26.6-6.8c0.1,4,2.3,5.4,7.4,4.5c2.1-0.4,3.5-1.1,4.9,1.6c0.6,1.1,4.9,1.8,6.1,0.9c5.2-4.1,9.5,0.6,14.1,0.8c2.7,0.1,5.3,1.3,8,1.8c4.6,0.8,9.1,1.5,13.7,2.2c0,0.7,0,1.4,0,2.1C122.4,40.9,121.3,41.6,120.8,41.3z"/>
</svg>
</div>
</li>
<li class="region">
<div class="locations" amount="4"></div>
<div class="region-button" data-location="oceania" data-location-tooltip="Oceania">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/" width="128px" height="128px" viewBox="0 0 128 128">
<path class="st0" d="M95.7,102.6c-0.5,0.6-2.1,1.2-2.2,1c-1.6-2.1-3.1-4.2-5.1-7.1c3.6,0,5.8,0,8.4,0 C98.3,98.8,97.1,100.8,95.7,102.6z M105.6,76.1c-1.8,2.5-2.5,5.8-4,8.5c-0.8,1.5-2.1,2.7-3.4,3.8c-1,0.8-2.6,0.8-3.4,1.6 c-1.3,1.4-2.3,1.1-3.6,0.3c-0.7-0.4-1.8-0.7-2.5-0.4c-4.8,1.8-8.3,0.1-10.1-4.5c-0.7-1.9-2.3-3.4-3.7-5.3c-0.6,0.5-1.3,1-2.1,1.7 c0.5-1.9,1-3.6,1.6-5.4c-0.2-0.1-0.4-0.2-0.6-0.3c-1.3,1.6-2.7,3.1-4.3,4.9c-0.8-1.1-1.4-1.9-1.9-2.7c-3.4-5.7-8.5-7.3-14.5-4.7 c-1.7,0.7-3.7,0.7-5.4,1.4c-1.8,0.6-3.4,1.6-5.2,2.4c-1.2,0.5-2.5,0.9-3.8,1.2c-2.4,0.6-5,1-7.3,1.9c-3.3,1.3-5.2,1.1-8.2-1.7 c2-3.7-0.4-14.6-3.9-17.8c0-0.5,0-0.9,0-1.4c0.4-0.3,1.1-0.5,1.2-0.8c0.1-0.5-0.2-1.1-0.4-1.7c-1.2-5.6,1.7-9.8,7.4-10.8 c2.1-0.4,4.2-0.8,6.1-1.4c4.4-1.5,5.1-2.3,6.5-6.1c1.4-1.2,2.9-2.5,4.3-3.7c1.3-1.1,2.4-2.5,3.8-3.4c0.6-0.4,1.9-0.1,2.8,0.2 c1.2,0.5,2.2,1.4,3.5,2.1c2.4-6.6,5.2-8.1,11.9-7.1c1.6,0.3,3.2,0,5.1,0c-3.5,5.4-3.5,7.3,3.2,10.1c0.9,0.4,1.8,0.7,2.5,1.2 c3,2.1,4.4,1.6,5.2-2c0.5-2.4,0.5-4.9,0.8-7.3c0.2-1.5,0.6-3,0.9-4.5c0.3,0,0.6,0,1-0.1c0.6,1.7,1,3.4,1.8,5.1 c0.5,1,1.4,1.9,2.1,2.8c0.7,1,1.7,1.8,2.1,2.9c1.3,4.1,2,8.5,6.8,10.3c0.6,0.2,1.1,0.9,1.5,1.4c2.4,3,5.1,5.8,6.9,9 c1.5,2.6,2.8,5.8,2.8,8.8C109,68.6,108.1,72.6,105.6,76.1z"/>
</svg>
</div>
</li>
</ul>
</div>
<div class="missionary-content"><br><br><br><br><br></div>
</div>
/*
* Searching library for WOL International ministries
*
* Depends:
* - jQuery.js https://github.com/jquery/jquery
* - fuse.js https://github.com/krisk/Fuse
* - anime.js https://github.com/juliangarnier/anime
*/
(function (root, factory) {
if ( typeof define === 'function' && define.amd ) {
define(factory);
} else if ( typeof exports === 'object' ) {
module.exports = factory;
} else {
root.missionsSearch = factory(root); // @todo Update to plugin name
}
})(this, function (root) {
'use strict';
var fuse;
var selectedItem = null;
var selectedItemVisible = false;
var missionsSearch = function(element, searchData, indexedData, options){
var missionsSearch = {};
var options = {
fuseOptions : options.fuseOptions || {},
searchResults: options.searchResults || 5,
showResults: typeof options.showResults !== 'undefined' ? options.showResults : true,
showItemByIDCallback: options.showItemByIDCallback || function(){},
clearCallback: options.clearCallback || function(){},
mobileCallback: options.mobileCallback || function(){},
changeCallback: options.changeCallback || function(){}
}
/**
* Initialize the missionary search
* @private
*/
var init = function(){
if ( typeof Fuse !== 'function' ){
console.error( 'MissionsSearch: Fuse.js is defined, please download it from https://github.com/krisk/Fuse.' );
return;
}
if ( typeof jQuery !== 'function' ){
console.error( 'MissionsSearch: jQuery.js is defined, please download it from https://github.com/jquery/jquery.' );
return;
}
if ( typeof anime !== 'function' ){
console.error( 'MissionsSearch: anime.js is defined, please download it from https://github.com/juliangarnier/anime.' );
return;
}
// convert to a jQuery object if not a jQuery object
element = element instanceof jQuery ? element : $(element);
searchData = typeof searchData == 'string' ? (isValidJSONString(searchData) ? JSON.parse(searchData) : null ) :
typeof searchData == 'object' ? searchData : null;
indexedData = typeof indexedData == 'string' ? (isValidJSONString(indexedData) ? JSON.parse(indexedData) : null ) :
typeof indexedData == 'object' ? indexedData : null;
// Error if provided search and indexed data is not valid JSON
if ( searchData == null || typeof searchData === 'undefined' || indexedData == null || typeof indexedData === 'undefined' ){
console.error( 'MissionsSearch: Not a valid object provided for searching. Object initializion canceled.' );
return;
}
fuse = new Fuse(searchData, options.fuseOptions);
if ( isMobile() ) {
element.addClass('mobile');
options.mobileCallback();
}
$(element).addClass('map-search');
// add our required HTML to element
$(element).html(`<span class="map-search-icon map-search-icon-search"></span>
<span class="map-search-icon map-search-icon-loading"></span>
<span class="map-search-icon map-search-icon-close"></span>
<input type="text" name="map-search" placeholder="Search for a location or missionary">
<ul class="suggestions"></ul>`);
element.children('[name=map-search]').on('keyup', handleInputKeyupEvent );
element.children('.map-search-icon-close').on('click', missionsSearch.clear );
element.on('click', '.suggestions li', suggestionClickHandler );
element.on('click', '.region-location-button', suggestionClickHandler );
element.removeClass('hidden');
}
/**
* Update the results with the query inside the input lement
* @public
*/
missionsSearch.update = function() {
var results = missionsSearch.query( element.children('input[name=map-search]').val(), options.searchResults );
options.changeCallback( results );
if ( options.showResults ){
populateFromQueryResults( results )
if ( results.length == 0 && element.children('input[name=map-search]').val().length > 0){
element.children('.suggestions').prepend('<li class="no-results">No results found</li>')
}
missionsSearch.updateStyle(results);
}
};
missionsSearch.fuse = function(){
return fuse;
}
/**
* Update the results with the query inside the input lement
* @public
*/
missionsSearch.updateStyle = function(results) {
if ( element.children('input[name=map-search]').val().length == 0 ){
element.children('.big').removeClass('under');
if ( selectedItem == null ){
element.removeClass('show-results');
}
} else {
element.addClass('show-results');
}
if ( selectedItemVisible && selectedItem != null ){
element.addClass('big-visible')
} else {
element.removeClass('big-visible')
}
if ( selectedItem == null ){
element.children('.big').remove();
}
};
/**
* Update the results with the query inside the input lement
* @private
*/
var populateFromQueryResults = function(queryResults) {
var results = queryResults
var suggestions = element.children('.suggestions');
suggestions.html('');
results.forEach( function(result, index){
suggestions.append(`
<li data-id='${result.item.id}' class="${result.type} ${ index == 0 ? 'active' : '' }">
<div class="title">${result.item.n}</div>
<div class="sub" >${result.type}</div>
</li>`)
});
};
/**
* Query the search data and output a specific amount of results (default:5) prioritized by Region, then Location, then Field, then Missionary.
* @public
* @param {string} searchQuery The query to search for
* @param {intiger} amount of results to return
* @returns {array} results from the search query
*/
missionsSearch.query = function(searchQuery, outputResults = 5) {
var results = fuse.search(searchQuery);
// fields are not currently being populated, this is for future when we will have a clearer split in coutries with multiple locations
var regions = [];
var locations = [];
var fields = [];
var missionaries = [];
results.forEach( function(i){
if ( ['Career', 'CCI', 'Launch', 'Short Term', 'Undefined'].indexOf(i.item.t) !== -1 ) {
i.type = 'missionary';
missionaries.push(i);
}
else if ( ['location'].indexOf(i.item.t) !== -1 && typeof i.item.cf !== 'undefined' ) {
i.type = 'region';
regions.push(i);
}
else {
i.type = 'location';
locations.push(i);
};
})
// connect all the results by priority
// var output = [].concat(regions).concat(locations).concat(fields).concat(missionaries);
var output = missionaries;
// Cut the array in double size of the output to decrease processing time
output = output.slice(0, outputResults*2);
// Remove duplicate ids
output = output.filter((item, index, self) =>
index === output.findIndex( t => ( t.item.id === item.item.id ))
)
return output.slice(0, outputResults);
};
/**
* Keyboard input handler with the ability to prevent results search update from being called
* @private
* @return {boolean} returns true if update should be triggered false if it should not be triggered.
*/
var handleInputKeyupEvent = function(e){
switch (e.keyCode){
case 38: // Up arrow
if ( element.children('.suggestions').children('.active').prev('li:not(.big)').length > 0){
element.children('.suggestions').children('.active').removeClass('active').prev().addClass('active')
} else {
element.children('.suggestions').children('.active').removeClass('active')
element.children('.suggestions').children('li:not(.big):last').addClass('active');
}
break;
case 40: // Down arrow
if ( element.children('.suggestions').children('.active').next('li:not(.big)').length > 0){
element.children('.suggestions').children('.active').removeClass('active').next().addClass('active')
} else {
element.children('.active').removeClass('active');
element.children('.suggestions').children('li:not(.big):first').addClass('active');
}
break;
case 13: // Enter Click
missionsSearch.showItemByID( element.children('.suggestions').children('.active').attr('data-id') );
break;
case 27: // Escape Click
missionsSearch.clear()
break;
default:
if ( element.children('[name=map-search]').val() != '' ){
element.children('.big').addClass('under');
}
break;
}
// Prevent update function to be called on these keys (Ctrl,Alt,Shift,CapsLock,Esc,Arrowkeys,etc.)
var updateSuggestions = ([220, 13, 16, 39, 38, 37, 40, 18, 93, 91, 17, 9, 27].indexOf(e.keyCode) == -1);
if ( updateSuggestions ){
missionsSearch.update()
}
}
var suggestionClickHandler = function(e){
missionsSearch.showItemByID( $(e.currentTarget).attr('data-id') );
}
/**
* Expand a item from the search results, or a completely new item
* @public
* @param {number|string} ID of the location or the missionary to show
*/
missionsSearch.showItemByID = function(id){
var id = String(id);
var index = getIndexOfSuggestionByID(id);
var offset = getOffsetFromTopByIndex(id);
var data = indexedData[id];
if ( index == false ){
element.children('.suggestions').children('li').remove();
}
// var bbox = data.t == 'field' ? JSON.parse(indexedData[data.pf].bbox) :
// data.t == 'location' ? JSON.parse(data.bbox) :
// typeof data.bbox !== 'undefined' ? JSON.parse(data.bbox) :
// typeof indexedData[data.lid] !== 'undefined' ? JSON.parse(indexedData[data.lid].bbox) : null;
// options.showItemByIDCallback(id, bbox, indexedData);
options.showItemByIDCallback(id, indexedData);
$('[name=map-search]').val(data.n);
if ( selectedItem != null ){ selectedItem.remove() }
selectedItem = element.children('.suggestions').children('li').eq(index).clone();
if ( selectedItem.attr('data-id') != id || selectedItem.length == 0) {
if ( ['Career', 'CCI', 'Launch', 'Short Term', 'Undefined'].indexOf(data.t) !== -1 ) {
data.type = 'missionary';
}
else if ( ['location'].indexOf(data.t) !== -1 && typeof data.cf !== 'undefined' ) {
data.type = 'region';
}
else {
data.type = 'location';
};
selectedItem = $(`
<li data-id='${id}' class="${data.type}">
<div class="title">${data.n}</div>
<div class="sub">${data.type}</div>
</li>`);
}
selectedItem = $( `<div><div class="content">${ selectedItem[0].innerHTML }</div></div>` );
data.type = ['Career', 'CCI', 'Launch', 'Short Term', 'Undefined'].indexOf(data.t) !== -1 ? 'missionary' : 'location';
var pageURL = data.type == 'location' ? '/locations/'+data.s : '/missionaries/'+data.n.toLowerCase().replace(/ /g,'-')+'-'+data.id+'/';
pageURL = "https://test.multindelible.com" + pageURL;
var fundID = data.n + (( typeof data.fid !== 'undefined') ? ( data.fid !== null ? ` (${data.fid})` : '' ) : '' );
var cashAmount = '75';
var showGiveButton = data.type == 'missionary';
// Populate the item content (regions such as Brazil and Germany need to have subregions listed)
if ( data.cf == undefined ){
selectedItem.append(`
<form method="post" action="https://give.wol.org/${fundID}" target="_parent">
<input type="hidden" name="amt" value="${cashAmount}">
<input type="hidden" name="picture" value="${data.s.toLowerCase()}">
<div class="search-btn-container">
<a class="search-visit-page" href="${pageURL}" target="_parent">Visit page</a>
${ showGiveButton ? `<label for="map-give-submit" class="search-give">Give <input type="submit" style="display:none" id="map-give-submit"></label>` : ''}
</div>
</form>
`)
selectedItem.addClass('big')
.addClass('pre-big')
.addClass('hide-buttons')
.addClass( data.type )
.css({
'position':'absolute',
'top': (offset != false) ? offset+'px' : '42px',
})
if (offset == false) { selectedItem.css({'height': '0px'}); }
// Append image of the missionary or location
selectedItem.prepend(`
<div class="header-image" style="width: 100%; height:0; background: url('https://home.wol.org/api/im/0.5/photo/${data.id}') no-repeat center center;
background-size: cover;
-webkit-background-size: cover;
-moz-background-size: cover;
-o-background-size: cover;"></div>`);
element.append(selectedItem);
if ( ['Career', 'CCI', 'Launch', 'Short Term', 'Undefined'].indexOf(data.t) != -1 ){
if ( typeof indexedData[data.lid] !== 'undefined' ){
var missionaryType = ( data.t == 'Undefined') ? '' : data.t+' ';
var missionaryLocation = ( typeof indexedData[data.lid].n == 'undefined' || indexedData[data.lid].n == 'undefined') ? '' : ' in '+indexedData[data.lid].n;
$('.big .sub').html(missionaryType+$('.big .sub').html()+missionaryLocation)
} else {
// Revive members
}
}
requestAnimationFrame(function(){
element.children('.big').removeClass('pre-big');
anime({
targets: '.header-image',
easing: 'easeOutCirc',
duration: 500,
delay: 500,
height: '183px', //$('.suggestions').innerWidth()/1.5
});
anime({
targets: element.children('.suggestions')[0],
duration: 500,
opacity: [1,0],
complete: function(){
element.children('.suggestions').children('li').remove();
element.children('.suggestions').css('opacity',1);
}
});
anime({
targets: '.big',
easing: 'easeOutCirc',
duration: 500,
top: 42,
height: isMobile() ? 100 : 300,
complete: function(){
element.children('.big').removeClass('hide-buttons');
}
});
})
} else {
// Germany or Brazil
selectedItem = $(`
<div data-id='${id}' class="region" style="height: 0px;">
<div class="content">
<div class="title">${data.n}</div>
<div class="sub">Locations in Region </div>
</div>
</div>`);
var childLocations = data.cf.split(',');
childLocations.forEach( function(item, index){
var childData = indexedData[item];
var pageURL = 'https://test.multindelible.com/location/' + childData.s;
selectedItem.children('.content').append(`
<span data-id="${childData.id}" class="region-location-button" href="${pageURL}">${childData.n}</span><br>`);
// <div class="title">${childData.n}</div>
// <div class="search-btn-container" style="position: relative">
// <a class="search-visit-page" href="${pageURL}">Visit page</a>
// </div>`);
})
element.append(selectedItem);
selectedItem.addClass('big')
requestAnimationFrame(function(){
element.children('.big').removeClass('pre-big');
anime({
targets: element.children('.suggestions')[0],
duration: 500,
opacity: [1,0],
complete: function(){
element.children('.suggestions').children('li').remove();
element.children('.suggestions').css('opacity',1);
}
});
anime({
targets: '.big',
easing: 'easeOutCirc',
duration: 500,
top: 42,
height: 52+childLocations.length*21,
complete: function(){
element.children('.big').removeClass('hide-buttons');
}
});
})
}
if ( $('.suggestions .big').length == 0 ){
$('#map-search').removeClass('big-visible');
} else {
$('#map-search').addClass('big-visible');
}
var results = missionsSearch.query( id, 1 );
missionsSearch.updateStyle(results);
}
/**
* Find the index of a suggestion by ID
* @private
* @param {number|string} ID of the location or the missionary to show
* @return {number} Returns the index of the item with provided ID in the suggestions, returns false if not found.
*/
var getIndexOfSuggestionByID = function(id){
var itemIndex = false;
//check if any of the current suggestions have the id
element.children('.suggestions').children('li').each(function(i,j,k){
if ( $(j).attr('data-id') == id){
itemIndex = $(j).index('li:not(.big)');
}
})
return itemIndex;
}
/**
* Return offset from top of suggestion with given index in px
* @private
* @param {number|string} ID of the location or the missionary to show
* @return {number|boolean} Returns the number of pixels the item is offset from top or false if item with index not found
*/
var getOffsetFromTopByIndex = function(id){
var offsetTop = 42;
var output = false;
//check if any of the current suggestions have the id
element.children('.suggestions').children('li').each(function(index,element){
if ( $(element).attr('data-id') == id){
output = offsetTop;
} else {
offsetTop += $(element).outerHeight();
}
})
return output;
}
/**
* Clear all search results and input field
* @public
*/
missionsSearch.clear = function(){
element.children('input[name=map-search]').val('')
element.children('.suggestions').html('')
element.removeClass('show-results')
if ( typeof selectedItem != 'undefined' ){
selectedItem.remove();
}
selectedItem = null;
selectedItemVisible = false;
missionsSearch.update;
options.clearCallback();
}
/**
* Validate whether string has correct JSON format
* @private
* @return {boolean} True if JSON formatted string, otherwise false
*/
var isValidJSONString = function(string) {
try {
JSON.parse(string);
} catch (e) {
return false;
}
return true;
}
/**
* Check whether device is mobile
* @private
* @return {boolean} True if device is mobile;
*/
var isMobile = function(){
return ( /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent) && window.innerWidth < 600 );
}
init();
missionsSearch.options = options;
return missionsSearch;
}
return missionsSearch;
});
$('.region').on('click', function(e){
$('.regions').addClass('show-back');
$('.region').addClass('hidden');
$(e.currentTarget).removeClass('hidden').addClass('active');
$('.back').html('◀ '+$(e.currentTarget).children('.region-button').attr('data-location-tooltip') )
})
$('.back').on('click', function(){
$('.regions').removeClass('show-back');
$('.hide-button').removeClass('hide-button');
requestAnimationFrame( function(){
$('.region').removeClass('hidden');
$('.region').removeClass('active');
})
})
$('.filters-toggle').on('click', function(e){
$('.filters').toggleClass('show');
if ( $('.filters').hasClass('show') ){
$('.filters-toggle .arrow').addClass('rotate');
} else {
$('.filters-toggle .arrow').removeClass('rotate');
}
})
$('body').on('click', '.location-row', function(e){
var title = $(e.currentTarget).children('.location-title').html();
var slug = $(e.currentTarget).children('.location-title').attr('data-location-slug')
var flagURL = $(e.currentTarget).children('.flag').css('background-image');
if ( $('.duration-select .location').length == 0 ) {
$('.duration-select').prepend('<span class="location"></span>')
}
$('.duration-select .location').replaceWith(`<span class="location" data-location-slug="${slug}">
<div class="flag" style='background-image: ${flagURL}'></div>
<span class="location-title">${title}</span>
<span class="remove">×</span>
</span>`)
$('.show-back .back').click();
missionaryPageSearch.update()
})
$('body').on('click','.duration-select .remove', function(e){
$('.duration-select .location').remove();
missionaryPageSearch.update();
})
$('input').on('change', function(e){
missionaryPageSearch.update();
})
$('body').on('click', '#more-missionaries', function(e){
loadMoreMissionaries();
})
var currentResults;
options = {
searchResults : -1,
showResults: false,
fuseOptions: {
shouldSort: true,
includeMatches: true,
threshold: 0.5,
location: 0,
distance: 100,
maxPatternLength: 32,
minMatchCharLength: 2,
keys: [
{
"name": "n",
},
{
"name": "id",
}
]
},
mobileCallback: function(){},
showItemByIDCallback: function(id, bbox, indexedData){},
clearCallback: function(){},
changeCallback: function(results){
if ( results.length == 0 && $('#missionary-page-search [name=map-search]').val().length == 0 ){
results = missionaryPageSearch.fuse().list;
results = Object.assign([], results);
}
results = applyFilters(results);
if ( results.length == 0 ){
console.log('No results found for given filters');
$('.missionary-content').html('No results found')
}
var content = '';
for (var i = 0; i < Math.min(results.length, 20); i++ ){
var item = (typeof results[i]['item'] !== 'undefined') ? results[i]['item'] : results[i];
content += getMissionaryCard(item);
}
if ( content != '' ){
$('.missionary-content').html(content)
}
currentResults = results;
if ( results.length > 20 ){
$('.missionary-content').append('<div id="load-more-container"><button id="more-missionaries">Load More</button></div>')
}
},
};
function loadMoreMissionaries(){
var startIndex = $('.missionary-single-result').length;
var endIndex = startIndex + 20;
var content = '';
for (var i = startIndex; i < Math.min(currentResults.length, endIndex); i++ ){
var item = (typeof currentResults[i]['item'] !== 'undefined') ? currentResults[i]['item'] : currentResults[i];
content += getMissionaryCard(item);
}
$('#load-more-container').before( content );
if ( currentResults.length <= $('.missionary-single-result').length ){
$('#load-more-container').remove();
}
}
function getMissionaryCard(missionaryData){
return `<div id="missionary-${missionaryData.id}" class="missionary-single-result BH long-term missionary-toggled" data-missionary="${missionaryData.id}" style="display: block;"><h3 class="missionary-name">${missionaryData.n}</h3>
<a class="missionary-link" href="/missionaries/${missionaryData.n.replace(' ','-').toLowerCase()+'-'+missionaryData.id}" style="outline: none;"><img src="https://home.wol.org/api/im/0.5/photo/${missionaryData.id}" class="missionary-image">
<div class="archive-fund-status black-fade-in" style="display: ${missionaryData.displaysupport === 0 ? 'none' : 'block'}"><div class="support-levels flex">
<span class="raised">${missionaryData.supportlevel}%</span>
<span class="remaining">100%</span>
</div>
<div class="slider-container"><div class="slider-fill highlight-bg" style="width:${missionaryData.supportlevel}%;"></div></div></div></a>
<div class="display-flex">
<a target="_blank" href="https://give.wol.org/${missionaryData.fundid}?amt=50" class="margin-right-10 primary-bg wol-btn donate">Donate Now</a> <a href="/missionaries/${missionaryData.n.replace(' ','-').toLowerCase()+'-'+missionaryData.id}" class="margin-left-10 primary-bg wol-btn">Profile</a>
</div>
</div>`;
}
var missionaryPageSearch;
var regionsArray = {};
// POPULATE REGIONS WITH APPROPRIATE COUTRIES AND FLAGS
// LOAD LOCATIONS
loadJSON('https://home.wol.org/api/im/0.5/locations/', function(locations){
// LOAD FIP -> REGION PAIRS
loadJSON('https://test.multindelible.com/wp-content/plugins/wol-im-api/location-to-region.php', function(codes){
locations = JSON.parse(locations);
codes = JSON.parse(codes);
// CREATE A regionsArray THAT CONTAINS AN ARRAY OF REGIONS, AND EACH REGION, AN ARRAY OF LOCATIONS
locations.forEach(function(location, index){
if ( location.fip !== null){
locations[index].region = codes[location.fip.split(', ')[0]].replace(/\s+/g, '').toLowerCase();
if ( typeof regionsArray[location.region] !== 'object' ){
regionsArray[location.region] = [];
}
regionsArray[location.region].push( location );
}
})
// SORT COUNTRIES ALPHABETICALLY AND POPULATE THE REGIONS WITH NAMES AND COUNTRIES
for (var key in regionsArray){
if (regionsArray.hasOwnProperty(key)) {
regionsArray[key].sort(function(a, b){
if(a.CountryName < b.CountryName) return -1;
if(a.CountryName > b.CountryName) return 1;
return 0;
})
}
}
for (var key in regionsArray){
if (regionsArray.hasOwnProperty(key)) {
var locationList = '';
regionsArray[key].forEach( function(location){
location.fip = location.fip == 'NN' ? 'SK' :
location.fip.indexOf(',') !== -1 ? 'DEFAULT' : location.fip;
var url = 'https://www.cia.gov/library/publications/resources/the-world-factbook/graphics/flags/large/'+location.fip.toLowerCase()+'-lgflag.gif';
url = location.fip == 'DEFAULT' ? 'https://test.multindelible.com/wp-content/plugins/wol-im-api/png/default-flag.png' : url;
locationList += `
<div class="location-row">
<div class="flag" style="background-image: url('${url}')"></div>
<span class="location-title" data-location-slug="${location.slug}">${location.CountryName}</span>
</div>`
})
$(`[data-location=${key}]`).parent().find('.locations').html(locationList)
}
}
})
})
loadJSON('https://home.wol.org/api/im/0.5/missionaries/',function(searchData){
searchData = JSON.parse(searchData);
var allMissionaries = [];
for (var key in searchData){
if (searchData.hasOwnProperty(key)) {
allMissionaries = allMissionaries.concat(searchData[key]);
}
}
window.searchData = searchData;
window.data = {};
allMissionaries.forEach( function(i){
window.data[i.id] = Object.assign({}, i);
})
missionaryPageSearch = new missionsSearch( $('#missionary-page-search'), allMissionaries, window.data, options );
missionaryPageSearch.update();
})
function loadJSON(url, callback) {
var xobj = new XMLHttpRequest();
xobj.overrideMimeType("application/json");
xobj.open('GET', url, true);
xobj.onreadystatechange = function () {
if (xobj.readyState == 4 && xobj.status == "200") {
callback(xobj.responseText);
}
};
xobj.send(null);
}
function applyFilters( results ){
var duration = $('[name=duration]:checked').val();
var countrySlug = $('.duration-select .location').attr('data-location-slug') || null;
var output = [];
for (var i = 0; i < results.length; i++) {
var item = (typeof results[i]['item'] !== 'undefined') ? results[i]['item'] : results[i];
if ( countrySlug == null ){
if ( duration == 'any-duration' ){
output.push(item);
} else if ( duration == 'long-term' && item.t == 'Career'){
output.push(item);
} else if ( duration == 'short-term' && item.t !== 'Career'){
output.push(item);
}
} else if ( countrySlug == item.ls ){
if ( duration == 'any-duration' ){
output.push(item);
} else if ( duration == 'long-term' && item.t == 'Career'){
output.push(item);
} else if ( duration == 'short-term' && item.t !== 'Career'){
output.push(item);
}
}
}
return output;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/fuse.js/3.2.0/fuse.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/animejs/2.2.0/anime.js"></script>
.regions {
width: 750px;
margin: 0 auto;
display: flex;
flex-direction: row;
max-width: 95vw;
list-style-type: none;
padding: 0;
position: relative;
}
.regions .region {
height: 80px;
flex: 1;
margin: 10px;
cursor: pointer;
transition: flex-grow .4s ease, margin 0.3s ease, opacity .3s ease;
position: relative;
/* background: gray; */
}
.regions .back {
position: absolute;
left: 0;
top: 0;
text-transform: uppercase;
font-weight: bold;
font-size: 12px;
color: #888;
cursor: pointer;
margin: 0.5vw 1vw;
opacity: 0;
transition: opacity .3s ease;
}
.regions.show-back .back {
opacity: 1;
z-index: 1;
}
.regions .region .region-button {
position: absolute;
left: 50%;
transform: translate(-50%, 0) scale(1);
max-width: 100%;
width: 100px;
height: 100%;
z-index: 1;
transition: opacity .3s ease, transform .3s ease;
display: flex;
flex-direction: column;
height: 100%;
}
.regions .region.hidden {
flex-grow: 0.00001;
opacity: 0;
margin: 10px 0;
}
.regions .region.hide-button .region-button {
display: none;
}
.regions .region .region-button:after {
content: attr(data-location-tooltip);
position: absolute;
top: 100%;
left: 50%;
transform: translateX(-50%);
text-align: center;
width: 100%;
font-size: 14px;
color: #aaa;
transition: fill .3s ease;
}
.regions .region .region-button svg {
width: 100%;
height: 100%;
fill: #ccc;
transition: fill .3s ease;
}
.region:hover .region-button svg, .regions .region.active .region-button svg {
fill: #34404E;
}
.regions .region.active .region-button {
opacity: 0;
transform: translate(-50%, -20px) scale(0);
}
.region:hover .region-button:after, .regions .region.active .region-button:after {
color: #34404E;
}
.regions .region .locations {
display: flex;
flex-flow: row wrap;
align-content: flex-start;
position: absolute;
align-items: center;
width: 100%;
margin-top: 5px;
background: #fff;
padding: 20px;
}
.regions .region .locations .location-row {
width: 33.33%;
display: inline-block;
margin: 0;
padding: 0;
height: 0px;
opacity: 0;
transition: height .3s ease, opacity .3s ease;
overflow: hidden;
}
.regions .region.active .locations .location-row {
height: 30px;
opacity: 0.8;
}
.regions .region .locations .location-row .title {
white-space: no-wrap;
}
.regions .region .locations .location-row .flag, .duration-select .flag {
position: relative;
top: 4px;
width: 40px;
height: 23px;
display: inline-block;
background-size: cover;
background-position: center;
background-repeat: no-repeat;
border: 1px solid rgba(0,0,0,0.1);
border-radius: 5px;
}
.duration-select .flag {
width: 30px;
height: 18px;
margin-right: 5px;
}
.duration-select .location {
background: #999;
color: #fff;
padding: 5px;
position: relative: -5px -5px;
border-radius: 5px;
}
.duration-select .remove {
cursor: pointer;
padding: 4px 0 4px 4px;
}
.regions .region .locations .location-row:hover {
opacity: 1;
}
.filters {
transition: transform .3s ease, margin .3s ease;
transform-origin: center top;
transform: scale(0);
margin-bottom: -100px;
}
.filters.show {
transform: scale(1);
margin-bottom: 40px;
}
#missionary-page-search {
z-index: 10;
position: relative;
left: 0;
top: 0;
width: 760px;
margin: 20px auto 5px;
}
.filters-toggle {
text-transform: uppercase;
font-weight: bold;
font-size: 12px;
color: #666;
cursor: pointer;
user-select: none;
}
.filters-toggle .arrow {
display: inline-block;
transition: transform .3s ease;
transform: rotate(0deg);
}
.filters-toggle .arrow.rotate {
transform: rotate(180deg);
}
.filters hr {
width: 600px;
margin: 0 auto;
}
.wrap760 {
width: 760px;
margin: 0 auto;
text-align: center;
max-width: 100vw;
}
.duration-select {
font-size: 14px;
color: #aaa;
margin-bottom: 10px;
}
.radio-label {
cursor: pointer;
}
.radio-label .radio {
width: 20px;
height: 20px;
display: inline-block;
border-radius: 50%;
border: 2px solid rgba(0,0,0,0.2);
margin: 0 5px 0 20px;
position: relative;
top: 5px;
}
.radio-label input {
display: none;
}
.radio-label input + .radio:after {
content: '';
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%) scale(0);
width: 10px;
height: 10px;
background: rgba(0,0,0,0.2);
border-radius: 50%;
transition: transform .3s ease;
}
.radio-label input:checked + .radio:after {
transform: translate(-50%, -50%) scale(1);
}
/* Basics */
.map-search,
.map-search *,
.map-search *:after,
.map-search *:before {
-webkit-box-sizing:border-box;
-moz-box-sizing:border-box;
box-sizing:border-box;
}
.map-search {
position: absolute;
font:15px/20px 'Helvetica Neue', Arial, Helvetica, sans-serif;
background-color:white;
width: 275px;
z-index:1;
border-radius:3px;
box-shadow: 0 0 0 2px rgba(0,0,0,0.1);
left: 20px;
top: 20px;
transform: translateX(0);
transition: all .3s ease;
}
.map-search.center {
width: 40%;
left: 50%;
transform: translateX(-50%);
top: 10vh;
}
.map-search.mobile {
width: 95vw;
left: 2.5vw;
top: 2.5vw;
transform: none;
}
#top-search-input-mobile {
position: relative;
max-width: 45vw;
left: 0;
top: 0;
}
.map-search.show-results {
border-radius: 3px 3px 0 0 ;
}
.map-search input[type='text'] {
font-size:12px;
width:100%;
border:0;
background-color:transparent;
height:40px;
margin:0;
color:rgba(0,0,0,.5);
padding:10px 10px 10px 40px;
text-overflow:ellipsis;
white-space:nowrap;
overflow:hidden;
}
.map-search input:focus {
color:rgba(0,0,0,.75);
outline:0;
box-shadow:none;
/*border: 0;*/
outline:thin dotted\8;
}
.map-search .map-search-icon-loading {
display: none;
position:absolute;
top:10px;
right:10px;
}
.map-search.searching .map-search-icon-loading {
display: block;
}
.map-search .map-search-icon-search {
position:absolute;
top:10px;
left:10px;
}
.map-search .map-search-icon-close {
display: none;
position:absolute;
top:10px;
right:10px;
cursor: pointer;
}
.map-search.show-results .map-search-icon-close {
display: block;
}
.map-search.show-results:after {
content: '';
position: absolute;
bottom: -2px;
left: 0;
width: 100%;
height: 2px;
background: #eaeaea;
}
.map-search.show-results.big-visible:after {
background: #d0d0d0;
}
.map-search .suggestions {
display: none;
position: absolute;
top: 42px;
width: 100%;
margin: 0;
padding: 0;
list-style-type: none;
box-shadow: 0 0 0 2px rgba(0,0,0,0.1);
z-index: 10;
overflow: hidden;
/*border:2px solid #d0d0d0;*/
}
.map-search.show-results .suggestions {
display: block;
}
.map-search .suggestions li,
.map-search .suggestions a {
width: 100%;
padding: 6px 10px;
position: relative;
background: white;
padding-left: 40px;
cursor: pointer;
display: block;
color: #000;
}
.map-search .suggestions:hover li, .map-search .suggestions:hover li.active,
.map-search .suggestions:hover a, .map-search .suggestions:hover a.active {
background: #fff !important;
}
.map-search .suggestions li .map-search-icon {
position: absolute;
left: 10px;
top: 12px;
}
.map-search .suggestions li.active, .map-search .suggestions li:hover, .map-search .suggestions li.active:hover,
.map-search .suggestions a.active, .map-search .suggestions a:hover, .map-search .suggestions a.active:hover {
background: #eee !important;
}
.map-search .big {
position: absolute;
top: 42px;
width: 100%;
margin: 0;
padding: 0;
box-shadow: 0 0 0 2px rgba(0,0,0,0.1);
border-radius: 0 0 3px 3px;
background: #fff;
z-index: 15;
transition: padding .2s ease, background .2s ease, transform .3s ease ;
transform-origin: center top;
box-sizing: border-box;
transform: scale(1);
cursor: default;
overflow: hidden;
}
.map-search .big.under {
z-index: 1;
transform: scale(0.95);
}
.map-search .content {
position: relative;
transition: padding .2s ease;
padding: 6px 20px 6px 20px;
}
.map-search .pre-big .content {
padding: 6px 10px 6px 40px;
}
.map-search .suggestions li.big .header-image,
.map-search .suggestions a.big .header-image {
max-width: 100%;
}
.big:before {
opacity: 0;
}
.pre-big:before {
opacity: 1;
}
.map-search .suggestions li .title, .big .title,
.map-search .suggestions a .title, .big .title {
font-weight: bold;
transition: font-size .3s ease;
}
.map-search .suggestions li .sub, .big .sub,
.map-search .suggestions a .sub, .big .sub {
text-transform: uppercase;
font-size: 11px;
color: #999;
margin-top: -2px;
transition: all .3s ease;
}
.map-search .suggestions li.big .title,
.map-search .suggestions a.big .title {
font-size: 18px;
}
.map-search .suggestions li.big .sub,
.map-search .suggestions a.big .sub {
font-size: 14px;
margin-top: 2px;
}
.map-search .suggestions li:after,
.map-search .suggestions a:after {
content: '';
position: absolute;
width: 96%;
background: #eee;
height: 1px;
left: 2%;
top: -1px;
}
.map-search .suggestions li:hover:after,
.map-search .suggestions a:hover:after {
width: 100%;
left: 0;
}
.map-search .suggestions li:first-child:after,
.map-search .suggestions a:first-child:after {
display: none;
}
.map-search .suggestions li:last-child,
.map-search .suggestions a:last-child {
border-radius: 0 0 3px 3px ;
}
.search-btn-container {
box-sizing: border-box;
padding: 20px;
width: 100%;
display: flex;
position: absolute;
bottom: 0;
transition: .3s ease;
}
.hide-buttons .search-btn-container {
bottom: -50px;
}
.search-btn-container a, .search-btn-container label {
background: #afa;
width: 100%;
margin-right: 10px;
padding: 4px 10px;
text-align: center;
background: #e99531;
color: #fff;
}
.search-btn-container a:last-child, .search-btn-container label:last-child {
margin-right: 0;
}
.map-search.mobile .header-image {
max-height: 0;
}
.map-search.mobile .big {
/*max-height: 100px;*/
}
.map-search.hidden {
display: none;
}
.marker {
width: 48px;
height: 48px;
background: url('https://home.wol.org/api/im/map-preview/missionary-icon.png');
background-size: 100%;
}
@-webkit-keyframes rotate { from { -webkit-transform: rotate(0deg); } to { -webkit-transform: rotate(360deg); } }
@-moz-keyframes rotate { from { -moz-transform: rotate(0deg); } to { -moz-transform: rotate(360deg); } }
@-ms-keyframes rotate { from { -ms-transform: rotate(0deg); } to { -ms-transform: rotate(360deg); } }
@keyframes rotate { from { transform: rotate(0deg); } to { transform: rotate(360deg); } }
/* icons */
.map-search-icon {
display:inline-block;
width:20px;
height:20px;
vertical-align:middle;
speak:none;
background-repeat:no-repeat;
}
.mapboxgl-ctrl-bottom-left {
z-index: 0 !important;
}
.map-search .suggestions li:before, .big:before,
.map-search .suggestions a:before {
content: '';
width: 16px;
height: 16px;
position: absolute;
left: 10px;
top: 15px;
transition: all .15s ease;
}
.map-search .suggestions li.no-results,
.map-search .suggestions a.no-results {
font-size: 12px;
padding-left: 20px;
color: #aaa;
background: #fff !important;
cursor: default;
}
.region-location-button {
color: #e99531;
text-decoration: none;
cursor: pointer;
}
.region-location-button:hover {
text-decoration: underline;
}
.map-search-icon-search {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIyMCIgaGVpZ2h0PSIyMCIgdmVyc2lvbj0iMS4xIj4NCiAgPHBhdGggZD0iTTguNSA0QzYgNCA0IDYgNCA4LjUgNCAxMSA2IDEzIDguNSAxMyA5LjQgMTMgMTAuMiAxMi44IDEwLjggMTIuM0wxMC45IDEyLjMgMTQuMyAxNS43QzE0LjUgMTUuOSAxNC43IDE2IDE1IDE2IDE1LjYgMTYgMTYgMTUuNiAxNiAxNSAxNiAxNC43IDE1LjkgMTQuNSAxNS43IDE0LjNMMTIuMyAxMC45IDEyLjMgMTAuOEMxMi44IDEwLjIgMTMgOS40IDEzIDguNSAxMyA2IDExIDQgOC41IDR6TTguNSA1LjVDMTAuMiA1LjUgMTEuNSA2LjggMTEuNSA4LjUgMTEuNSAxMC4yIDEwLjIgMTEuNSA4LjUgMTEuNSA2LjggMTEuNSA1LjUgMTAuMiA1LjUgOC41IDUuNSA2LjggNi44IDUuNSA4LjUgNS41eiIgZmlsbD0iIzAwMCIvPg0KPC9zdmc+);
}
.map-search-icon-close {
background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAyMCAyMCIgdmVyc2lvbj0iMS4xIiBoZWlnaHQ9IjIwIiB3aWR0aD0iMjAiPg0KICA8cGF0aCBkPSJtNSA1IDAgMS41IDMuNSAzLjUtMy41IDMuNSAwIDEuNSAxLjUgMCAzLjUtMy41IDMuNSAzLjUgMS41IDAgMC0xLjUtMy41LTMuNSAzLjUtMy41IDAtMS41LTEuNSAwLTMuNSAzLjUtMy41LTMuNS0xLjUgMHoiIGZpbGw9IiMwMDAiLz4NCjwvc3ZnPg==);
}
.map-search-icon-loading {
background-image:url(data:image/svg+xml;base64,PHN2ZyB4bWxuczpzdmc9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZlcnNpb249IjEuMSIgd2lkdGg9IjIwIiBoZWlnaHQ9IjIwIiB2aWV3Qm94PSIwIDAgMjAgMjAiPjxwYXRoIGQ9Im0xMCAyIDAgMy4zYzIuNiAwIDQuNyAyLjEgNC43IDQuN2wzLjMgMGMwLTQuNC0zLjYtOC04LTh6IiBmaWxsPSIjMDAwIi8+PHBhdGggZD0iTTEwIDJDNi44IDIgMy43IDQuMSAyLjYgNy4xIDEuNCAxMCAyLjEgMTMuNiA0LjUgMTUuOGMyLjQgMi40IDYuNCAyLjkgOS40IDEuMiAyLjUtMS40IDQuMi00LjIgNC4yLTctMS4xIDAtMi4yIDAtMy4zIDAgMC4xIDIuMi0xLjcgNC4zLTMuOCA0LjZDOC43IDE1IDYuNCAxMy44IDUuNyAxMS43IDQuOCA5LjcgNS42IDcuMSA3LjYgNiA4LjMgNS42IDkuMSA1LjMgMTAgNS4zYzAtMS4xIDAtMi4yIDAtMy4zeiIgc3R5bGU9ImZpbGw6IzAwMDtvcGFjaXR5OjAuMiIvPjwvc3ZnPg==);
-webkit-animation: rotate 400ms linear infinite;
-moz-animation: rotate 400ms linear infinite;
-ms-animation: rotate 400ms linear infinite;
animation: rotate 400ms linear infinite;
}
.map-search .suggestions li.location:before, .location:before,
.map-search .suggestions a.location:before {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZD0iTTgsLjFBNS42MSw1LjYxLDAsMCwwLDIuMzgsNS43MkMyLjM4LDguODMsOCwxNS45LDgsMTUuOXM1LjYyLTcuMDcsNS42Mi0xMC4xOEE1LjYxLDUuNjEsMCwwLDAsOCwuMVpNOCw3LjY2QTEuOTQsMS45NCwwLDEsMSw5Ljk0LDUuNzIsMS45NCwxLjk0LDAsMCwxLDgsNy42NloiLz48L3N2Zz4=);
}
.map-search .suggestions li.missionary:before, .missionary:before,
.map-search .suggestions a.missionary:before {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZD0iTTE0LjExLDE0LjU5SDEuODlWMTMuNDNjMC0yLjUyLDIuNzQtNC41Niw2LjExLTQuNTZzNi4xMSwyLDYuMTEsNC41NlpNOCwxLjQxQTMuMywzLjMsMCwxLDAsMTEuMyw0LjcsMy4yOSwzLjI5LDAsMCwwLDgsMS40MVoiLz48L3N2Zz4=);
}
.map-search .suggestions li.region:before, .region:before,
.map-search .suggestions a.region:before {
background-image: url(data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAxNiAxNiI+PHBhdGggZD0iTTgsLjkyQTcuMDgsNy4wOCwwLDEsMCwxNS4wOCw4LDcuMDgsNy4wOCwwLDAsMCw4LC45MlptNi4xNiw3YTQuNzIsNC43MiwwLDAsMS0uMzksMi4zNSw2LjA1LDYuMDUsMCwwLDEtMi44OSwzLjE5LDYuMTQsNi4xNCwwLDAsMS03LjI0LTEuMTVsLjQ2LTEuNDYtLjYtLjc0LDAtLjhMMiw5LjMxYTUuMDgsNS4wOCwwLDAsMS0uMTItMS45bC41My0uNDcuMzUtMS4xLDAtMS4wN2MuMTktLjI5LjM5LS41Ny41OS0uODZsLjIyLjQyaC43OEw1LDMuODlsLS4xMy0uNTEtLjctLjNhNiw2LDAsMCwxLDcuNTksMGwtMS40Ni4xOUw5LjA3LDIuODNsLTEuNDIuNjZoLS45bC0uMjkuNTcuNjcuMTcuNDMtLjQzLjU4LjEzLS4yMi40TDYuNjgsNSw2LjE3LDYuM2guNkw4LDUuNDksOSw2LjNsMS4xOS4xN0wxMCw2Ljg4SDguMzVMOCw2LjM1bC0xLjY4LjMzTDUuNTcsOC42MWwuOTIsMSwxLjQ1LjIxLjY2LDIuNTNoLjYxTDEwLjYyLDExbC4xLTIuNjksMS40MS0uNzhMMTMuNCw4LjcxWm0tMi43OCwzLS4wNy40Ny0uNDguNDctLjI2LS4xNS41Mi0uNzlaIi8+PC9zdmc+);
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0/css/bootstrap.css" rel="stylesheet" />
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment