my eye

author Angelo Gladding

category Micropub

name RSVP Client

published 2024-12-09T14:21:33.725538-08:00

type entry

updated 2026-10-05T23:22:28.519350-07:00

url /rsvp, /2024/12/09/om

visibility public

Content

$if web.tx.request.method == "GET":
    <p>Bookmarklet: <a href="javascript:(function(){
      window.location.href='https://ragt.ag/rsvp?url='+
        encodeURIComponent(window.location.href)
    })()">RSVP</a> <small>(drag to browser toolbar to install)</small></p>
    
    $ url = web.tx.request.uri.query.get('url', [None])[0]
    <form method=$("post" if url else "get") action=/rsvp>
    <label><small>Event URL:</small><br>
    <input name=url value="$url" style=width:30em $("readonly" if url else "")></label><br>
    $if url:
        $ event = web.get(url).event
        <p>$event["name"]
        $if "featured" in event:
            <br><img src="$event['featured']">
        </p>
        <p>Start time: $event["start"]</p>
        <p>End time: $event["end"]</p>
        <fieldset>
        <legend>Response</legend>
        $for response in ("yes", "no", "maybe"):
            <label><input type=radio name=response
            value=$response required> $response.capitalize()</label>
        </fieldset>
        <button>RSVP</button>
    $else:
        <button>Fetch</button
    </form>
$elif web.tx.request.method == "POST":
    $ form = web.form("url", "response")
    $ event = web.get(form.url).event
    $if token := web.tx.user.session.get("token"):
        $ micropub_response = web.post(f"https://{web.tx.user.session['endpoint']}",
        $   headers={
        $     "Authorization": f"Bearer {token}",
        $   },
        $   json={
        $     "type": ["h-entry"],
        $     "properties": {
        $       "in-reply-to": [{
        $         "type": ["h-event"],
        $         "properties": {
        $           "name": [event["name"]],
        $           "start": [event["start-str"]],
        $           "end": [event["end-str"]],
        $           "url": [event["url"]]
        $         }
        $       }],
        $       "rsvp": [form.response],
        $     }
        $   }
        $ )
        $micropub_response.text
        <p>RSVP'd to <code>$form.url</code></p>
    $else:
        <p>Your site doesn't support Micropub.</p>