|
|
<div class="narrow"> <?= partial('partials/header') ?>
<div style="clear: both;"> <div class="alert alert-success hidden" id="test_success"><strong>Success! </strong><a href="" id="post_href">View your post</a></div> <div class="alert alert-danger hidden" id="test_error"><strong>Something went wrong!</strong><br>Your Micropub endpoint indicated that something went wrong creating the post.</div> </div>
<form role="form" style="margin-top: 20px;" id="note_form">
<div class="form-group" style="margin-top: 18px;"> <label>Event Name</label> <input type="text" class="form-control" id="event_name" placeholder="" value=""> </div>
<div class="form-group" style="margin-top: 18px;"> <label>Location</label> <input type="text" class="form-control" id="event_location" placeholder="" value=""> <span class="help-block" id="location_preview"></span> </div>
<div id="map" class="hidden" style="width: 100%; height: 180px; border-radius: 4px; border: 1px #ccc solid;"></div>
<div class="form-group" id="start_date" style="margin-top: 18px;"> <label>Start Date/Time</label> <div class="form-group"> <input type="text" class="form-control date" placeholder="<?= date('Y-m-d') ?>" value="" style="max-width: 40%; margin-right: 4px; float: left;"> <input type="text" class="form-control time" placeholder="14:30" value="" style="max-width: 40%; margin-right: 4px; float: left;"> <input type="text" class="form-control timezone" placeholder="-08:00" style="max-width: 15%;"> </div> </div>
<div class="form-group" id="end_date" style="margin-top: 18px;"> <label>End Date/Time (Optional)</label> <div class="form-group"> <input type="text" class="form-control date" placeholder="<?= date('Y-m-d') ?>" value="" style="max-width: 40%; margin-right: 4px; float: left;"> <input type="text" class="form-control time" placeholder="14:30" value="" style="max-width: 40%; margin-right: 4px; float: left;"> <input type="text" class="form-control timezone" placeholder="-08:00" style="max-width: 15%;"> </div> </div>
<div id="presentation-fields" class="hidden">
<div class="form-group" style="margin-top: 18px;"> <label>Link to Slides</label> <input type="url" class="form-control" id="slides"> </div>
<div class="form-group"> <label for="slides-embed">Slides Embed Code</label> <textarea id="slides-embed" class="form-control" style="height: 4em;"></textarea> </div>
<div class="form-group" style="margin-top: 18px;"> <label>Link to Video</label> <input type="url" class="form-control" id="video-link"> </div>
<div class="form-group"> <label for="video-embed">Video Embed Code</label> <textarea id="video-embed" class="form-control" style="height: 4em;"></textarea> </div>
<div class="form-group" style="margin-top: 18px;"> <label>Conference</label> <div class="form-group"> <input type="text" id="conference-name" class="form-control" style="max-width: 48%; margin-right: 4px; float: left;" placeholder="Conference Name"> <input type="url" id="conference-url" class="form-control" style="max-width: 48%; margin-right: 4px; float: left;" placeholder="https://example.com"> </div> <div style="clear:both;"></div> </div>
</div>
<div class="form-group"> <label for="note_content">Content</label> <textarea id="note_content" value="" class="form-control" rows="6"></textarea> </div>
<div class="form-group hidden" id="content-type-selection"> <label for="note_content_type">Content Type</label> <select class="form-control" id="note_content_type"> <option value="text/plain">Text</option> <option value="text/markdown">Markdown</option> </select> </div>
<div class="form-group" style="margin-top: 18px;"> <label for="note_category">Tags</label> <input type="text" id="note_category" value="" class="form-control"> </div>
<?php if($this->channels): ?>
<div class="form-group"> <label for="note_channel">Channel</label> <div id="channel-container"> <?php echo '<select class="form-control" id="note_channel">'; echo '<option value="none"></option>'; foreach($this->channels as $ch) { echo '<option value="'.htmlspecialchars($ch).'" '.($ch == 'events' ? 'selected' : '').'>' . htmlspecialchars($ch) . '</option>'; } echo '</select>'; ?>
</div> </div> <?php endif; ?>
<div style="float: right; margin-top: 6px;"> <button class="btn btn-success" id="btn_post">Post</button> </div>
</form>
</div>
<link rel="stylesheet" href="/libs/bootstrap-typeahead/typeahead.css"> <script src="/libs/bootstrap-typeahead/typeahead.min.js"></script> <?php if(Config::$googleMapsAPIKey): ?>
<script src="https://maps.googleapis.com/maps/api/js?key=<?= Config::$googleMapsAPIKey ?>&libraries=places"></script> <?php endif ?>
<script> <?php if(Config::$googleMapsAPIKey): ?>
var map = new google.maps.Map(document.getElementById('map'), { center: new google.maps.LatLng(-45,122), zoom: 15 }); <?php else: ?>
var map = null; <?php endif ?>
var d = new Date(); var tzOffset = tz_seconds_to_offset(d.getTimezoneOffset() * 60 * -1);
var selectedPlace; if(map) { var gservice = new google.maps.places.AutocompleteService(); var gplaces = new google.maps.places.PlacesService(map); var selectedPlacePin; }
$(document).bind('keydown', function(e){ // Easter egg: press ctrl+shift+c to reveal a content type selection
if(e.keyCode == 67 && e.ctrlKey && e.shiftKey) { $("#content-type-selection").removeClass("hidden"); } // Easter egg: press ctrl+shift+m to switch to markdown
if(e.keyCode == 77 && e.ctrlKey && e.shiftKey) { switchToMarkdown(); } // Enable "presentation mode" which adds a few fields
if(e.keyCode == 80 && e.ctrlKey && e.shiftKey) { enablePresentationMode(); } });
function switchToMarkdown() { $("#content-type-selection select").val("text/markdown"); $("#content-type-selection").removeClass("hidden"); }
function enablePresentationMode() { $("#presentation-fields").removeClass("hidden"); }
$(function(){ // Start the event timezone offset in the browser's timezone
$("#start_date .timezone").attr("placeholder", tzOffset); $("#end_date .timezone").attr("placeholder", tzOffset);
// As soon as a time is entered, move the placeholder offset to the value
$("#start_date .time").on("keydown", function(){ $("#start_date .timezone").val($("#start_date .timezone").attr("placeholder")); }); $("#end_date .time").on("keydown", function(){ $("#end_date .timezone").val($("#end_date .timezone").attr("placeholder")); });
if(map) { $("#event_location").typeahead({ minLength: 3, highlight: true }, { limit: 5, async: true, source: function(query, sync, async) { gservice.getPlacePredictions({ input: query }, function(predictions, status) { if (status == google.maps.places.PlacesServiceStatus.OK) { async(predictions); } }); }, display: function(item) { return item.description; }, templates: { suggestion: function(item) { return '<span>'+item.description+'</span>'; } } }).bind('typeahead:select', function(ev, suggestion) {
gplaces.getDetails({ placeId: suggestion.place_id, fields: ["geometry", "name", "address_component", "url", "utc_offset"] }, function(result, status) { if(status != google.maps.places.PlacesServiceStatus.OK) { alert('Cannot find address'); return; } console.log(result);
map.setCenter(result.geometry.location);
if(selectedPlacePin) { selectedPlacePin.setMap(null); selectedPlacePin = null; } selectedPlacePin = new google.maps.Marker({ position: result.geometry.location, map: map });
selectedPlace = { type: ["h-card"], properties: { name: [result.name], latitude: [result.geometry.location.lat()], longitude: [result.geometry.location.lng()], } };
address = ''; locality = ''; region = ''; country = ''; for(var i in result.address_components) {
if(result.address_components[i].types.includes('street_number')) { address += ' '+result.address_components[i].short_name; } if(result.address_components[i].types.includes('route')) { address += ' '+result.address_components[i].short_name; }
if(result.address_components[i].types.includes('locality')) { locality = result.address_components[i].long_name; } if(result.address_components[i].types.includes('administrative_area_level_1')) { region = result.address_components[i].long_name; } if(result.address_components[i].types.includes('country')) { country = result.address_components[i].short_name; } } if(address) { selectedPlace['properties']['street-address'] = [address.trim()]; } if(locality) { selectedPlace['properties']['locality'] = [locality]; } if(region) { selectedPlace['properties']['region'] = [region]; } if(country) { selectedPlace['properties']['country-name'] = [country]; }
if(result.utc_offset) { tzOffset = tz_seconds_to_offset(result.utc_offset * 60); $("#start_date .timezone").attr("placeholder", tzOffset); $("#end_date .timezone").attr("placeholder", tzOffset); if($("#start_date .timezone").val()) { $("#start_date .timezone").val($("#start_date .timezone").attr("placeholder")); } if($("#end_date .timezone").val()) { $("#end_date .timezone").val($("#end_date .timezone").attr("placeholder")); } }
$("#map").removeClass("hidden"); $("#location_preview").text(''); }); }); } });
$("#note_category").tokenfield({ createTokensOnBlur: true, beautify: true });
$("#btn_post").click(function(){
var event_start = $("#start_date .date").val(); if($("#start_date .time").val()) { event_start += "T"+$("#start_date .time").val()+$("#start_date .timezone").val(); } var event_end; if($("#end_date .date").val()) { event_end = $("#end_date .date").val(); if($("#end_date .time").val()) { event_end += "T"+$("#end_date .time").val()+$("#end_date .timezone").val(); } }
var properties = { name: [$("#event_name").val()], start: [event_start], location: (selectedPlace ? selectedPlace : $("#event_location").val()), category: tokenfieldToArray("#note_category"), content: $("#note_content").val() };
if(event_end) { properties.end = event_end; }
if($("#note_channel").val()) { properties['p3k-channel'] = $("#note_channel").val(); }
if(!$("#content-type-selection").hasClass("hidden")) { properties['p3k-content-type'] = $("#note_content_type").val(); }
if(!$("#presentation-fields").hasClass("hidden")) { properties['slides'] = $("#slides").val(); properties['slides-embed'] = $("#slides-embed").val(); properties['video-link'] = $("#video-link").val(); properties['video-embed'] = $("#video-embed").val(); if($("#conference-name").val()) { properties['conference'] = { type: 'h-event', properties: { name: $("#conference-name").val(), url: $("#conference-url").val() } }; } }
$.post("/micropub/postjson", { data: JSON.stringify({ "type": ["h-event"], "properties": properties }) }, function(response){
if(response.location != false) { $("#test_success").removeClass('hidden'); $("#test_error").addClass('hidden'); $("#post_href").attr("href", response.location); $("#note_form").slideUp(200, function(){ $(window).scrollTop($("#test_success").position().top); }); } else { $("#test_success").addClass('hidden'); $("#test_error").removeClass('hidden'); }
}); return false; }); </script>
|