| @ -0,0 +1,34 @@ | |||
| <?php | |||
| $app->get('/', function() use($app) { | |||
| $res = $app->response(); | |||
| ob_start(); | |||
| render('index', array( | |||
| 'title' => 'Switchboard', | |||
| 'meta' => '' | |||
| )); | |||
| $html = ob_get_clean(); | |||
| $res->body($html); | |||
| }); | |||
| $app->get('/subscription/:hash', function($hash) use($app) { | |||
| $res = $app->response(); | |||
| $subscription = db\get_by_col('subscriptions', 'hash', $hash); | |||
| $feed = db\get_by_id('feeds', $subscription->feed_id); | |||
| if(!$subscription) { | |||
| $app->response()->status(404); | |||
| } else { | |||
| ob_start(); | |||
| render('subscription-status', array( | |||
| 'title' => 'Switchboard', | |||
| 'meta' => '', | |||
| 'subscription' => $subscription, | |||
| 'feed' => $feed | |||
| )); | |||
| $html = ob_get_clean(); | |||
| $res->body($html); | |||
| } | |||
| }); | |||
| @ -0,0 +1,130 @@ | |||
| body { | |||
| padding-top: 10px; | |||
| background: #fff; | |||
| } | |||
| body.logged-out { | |||
| background: white; | |||
| } | |||
| .logged-out .jumbotron { | |||
| background-color: #fffbeb; | |||
| border: 1px #fff2bc solid; | |||
| } | |||
| .header { | |||
| font-family:; "Helvetica Neue",Helvetica,Arial,sans-serif; | |||
| font-size: 22px; | |||
| font-weight: 500; | |||
| color: #888; | |||
| border-bottom: 6px #ddd solid; | |||
| padding-bottom: 4px; | |||
| } | |||
| .narrow { | |||
| max-width: 700px; | |||
| margin-right: auto; | |||
| margin-left: auto; | |||
| } | |||
| .footer { | |||
| padding: 0; | |||
| margin-top: 20px; | |||
| text-align: center; | |||
| color: #999; | |||
| background-color: #f9f9f9; | |||
| border-top: 1px #e5e5e5 solid; | |||
| position: absolute; | |||
| bottom: 0; | |||
| width: 100%; | |||
| } | |||
| .footer .nav { | |||
| max-width: 700px; | |||
| margin-right: auto; | |||
| margin-left: auto; | |||
| } | |||
| .footer .credits { | |||
| padding: 20px; | |||
| font-size: 12px; | |||
| } | |||
| .jumbotron .tagline { | |||
| font-size: 23px; | |||
| } | |||
| .jumbotron p { | |||
| font-size: 18px; | |||
| } | |||
| /** | |||
| * Bootstrap callouts | |||
| */ | |||
| /* Base styles (regardless of theme) */ | |||
| .bs-callout { | |||
| margin: 20px 0; | |||
| padding: 15px 30px 15px 15px; | |||
| border-left: 5px solid #eee; | |||
| } | |||
| .bs-callout h4 { | |||
| margin-top: 0; | |||
| } | |||
| .bs-callout p:last-child { | |||
| margin-bottom: 0; | |||
| } | |||
| .bs-callout code, | |||
| .bs-callout .highlight { | |||
| background-color: #fff; | |||
| } | |||
| /* Themes for different contexts */ | |||
| .bs-callout-danger { | |||
| background-color: #fcf2f2; | |||
| border-color: #dFb5b4; | |||
| } | |||
| .bs-callout-warning { | |||
| background-color: #fefbed; | |||
| border-color: #f1e7bc; | |||
| } | |||
| .bs-callout-info { | |||
| background-color: #f0f7fd; | |||
| border-color: #d0e3f0; | |||
| } | |||
| .bs-callout-success { | |||
| background-color: #dff0d8; | |||
| border-color: #b5dca5; | |||
| } | |||
| .bs-callout-danger h4 { | |||
| color: #B94A48; | |||
| } | |||
| .bs-callout-warning h4 { | |||
| color: #C09853; | |||
| } | |||
| .bs-callout-info h4 { | |||
| color: #3A87AD; | |||
| } | |||
| .bs-callout-success h4 { | |||
| color: #3c763d; | |||
| } | |||
| .bs-callout.pre { | |||
| font-family: Menlo,Monaco,Consolas,"Courier New",monospace; | |||
| word-break: break-all; | |||
| word-wrap: break-word; | |||
| } | |||
| @-webkit-keyframes pulsate { | |||
| 0% {-webkit-transform: scale(0.9, 0.9); opacity: 1.0;} | |||
| 50% {opacity: 0.0;} | |||
| 100% {-webkit-transform: scale(1.1, 1.1); opacity: 1.0;} | |||
| } | |||
| @ -0,0 +1,27 @@ | |||
| <div class="narrow"> | |||
| <div class="jumbotron h-x-app"> | |||
| <h1><img src="/images/icons/apple-icon-144x144.png" height="72" style="margin-bottom: 13px;" class="u-logo p-name" alt="Switchboard"> Switchboard</h1> | |||
| <p class="tagline p-summary">Switchboard is a PubSubHubbub 0.4 hub.</p> | |||
| <p>To publish content using Switchboard as your hub, add the following links to your home page:</p> | |||
| <p><pre><link rel="self" href="https://example.com/"> | |||
| <link rel="hub" href="https://switchboard.p3k.io/"></pre></p> | |||
| <p>Then, send a POST request to <code>https://switchboard.p3k.io/</code> with the following | |||
| parameters every time you add content to your home page:</p> | |||
| <p> | |||
| <ul> | |||
| <li><code>hub.mode=publish</code></li> | |||
| <li><code>hub.topic=https://example.com/</code></li> | |||
| </ul> | |||
| </p> | |||
| <p>Read more info about <a href="https://indiewebcamp.com/how-to-push">how to publish and consume using PubSubHubbub</a>.</p> | |||
| <a href="<?= Config::$base_url ?>/" class="u-url"></a> | |||
| </div> | |||
| </div> | |||
| @ -0,0 +1,65 @@ | |||
| <!doctype html> | |||
| <html lang="en"> | |||
| <head> | |||
| <title><?= $this->title ?></title> | |||
| <meta charset="utf-8"> | |||
| <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> | |||
| <meta name="apple-mobile-web-app-capable" content="yes" /> | |||
| <!-- standard viewport tag to set the viewport to the device's width | |||
| , Android 2.3 devices need this so 100% width works properly and | |||
| doesn't allow children to blow up the viewport width--> | |||
| <meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1,width=device-width" /> | |||
| <!-- width=device-width causes the iPhone 5 to letterbox the app, so | |||
| we want to exclude it for iPhone 5 to allow full screen apps --> | |||
| <meta name="viewport" content="initial-scale=1.0,user-scalable=no,maximum-scale=1" media="(device-height: 568px)" /> | |||
| <link rel="stylesheet" href="/bootstrap/css/bootstrap.min.css"> | |||
| <link rel="stylesheet" href="/bootstrap/css/bootstrap-theme.min.css"> | |||
| <link href="/font-awesome/css/font-awesome.min.css" rel="stylesheet" media="all"> | |||
| <link rel="stylesheet" href="/openwebicons/css/openwebicons-bootstrap.css" /> | |||
| <link rel="stylesheet" href="/css/style.css"> | |||
| <!-- icon stuff from www.favicongenerator.org --> | |||
| <link rel="apple-touch-icon" sizes="57x57" href="/images/icons/apple-icon-57x57.png"> | |||
| <link rel="apple-touch-icon" sizes="60x60" href="/images/icons/apple-icon-60x60.png"> | |||
| <link rel="apple-touch-icon" sizes="72x72" href="/images/icons/apple-icon-72x72.png"> | |||
| <link rel="apple-touch-icon" sizes="76x76" href="/images/icons/apple-icon-76x76.png"> | |||
| <link rel="apple-touch-icon" sizes="114x114" href="/images/icons/apple-icon-114x114.png"> | |||
| <link rel="apple-touch-icon" sizes="120x120" href="/images/icons/apple-icon-120x120.png"> | |||
| <link rel="apple-touch-icon" sizes="144x144" href="/images/icons/apple-icon-144x144.png"> | |||
| <link rel="apple-touch-icon" sizes="152x152" href="/images/icons/apple-icon-152x152.png"> | |||
| <link rel="apple-touch-icon" sizes="180x180" href="/images/icons/apple-icon-180x180.png"> | |||
| <link rel="icon" type="image/png" sizes="192x192" href="/images/icons/android-icon-192x192.png"> | |||
| <link rel="icon" type="image/png" sizes="32x32" href="/images/icons/favicon-32x32.png"> | |||
| <link rel="icon" type="image/png" sizes="96x96" href="/images/icons/favicon-96x96.png"> | |||
| <link rel="icon" type="image/png" sizes="16x16" href="/images/icons/favicon-16x16.png"> | |||
| <link rel="manifest" href="/images/icons/manifest.json"> | |||
| <meta name="msapplication-TileColor" content="#ffffff"> | |||
| <meta name="msapplication-TileImage" content="/images/icons/ms-icon-144x144.png"> | |||
| <meta name="theme-color" content="#ffffff"> | |||
| <link rel="icon" href="/favicon.ico" type="image/x-icon"> | |||
| <script src="/js/jquery-1.7.1.min.js"></script> | |||
| </head> | |||
| <body role="document"> | |||
| <div class="page"> | |||
| <div class="container"> | |||
| <?= $this->fetch($this->page . '.php') ?> | |||
| </div> | |||
| <div class="footer"> | |||
| <p class="credits"> | |||
| This code is <a href="https://github.com/aaronpk/Switchboard">open source</a>. | |||
| Feel free to send a pull request, or <a href="https://github.com/aaronpk/Switchboard/issues">file an issue</a>. | |||
| </p> | |||
| </div> | |||
| </div> | |||
| </body> | |||
| </html> | |||
| @ -0,0 +1,36 @@ | |||
| <? if($this->subscription->active): ?> | |||
| <div class="bs bs-callout bs-callout-success">This subscription is active!</div> | |||
| <? else: ?> | |||
| <div class="bs bs-callout bs-callout-danger">This subscription is not active</div> | |||
| <? endif; ?> | |||
| <table class="table"> | |||
| <?php $tz = -7 * 3600; ?> | |||
| <tr> | |||
| <td>Feed URL (Topic)</td> | |||
| <td><?= $this->feed->feed_url ?></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Callback URL</td> | |||
| <td><?= $this->subscription->callback_url ?></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Date Subscription was Requested</td> | |||
| <td><?= $this->subscription->date_requested ? friendly_date($this->subscription->date_requested, $tz) : '' ?></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Subscription Verification Response (from your server)</td> | |||
| <td><pre><?= htmlspecialchars($this->subscription->challenge_response) ?></pre></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Date Subscription was Confirmed</td> | |||
| <td><?= $this->subscription->date_confirmed ? friendly_date($this->subscription->date_confirmed, $tz) : '' ?></td> | |||
| </tr> | |||
| <tr> | |||
| <td>Subscription Expiration</td> | |||
| <td><?= $this->subscription->date_expires ? friendly_date($this->subscription->date_expires, $tz) : '' ?></td> | |||
| </tr> | |||
| </table> | |||