aboutsummaryrefslogtreecommitdiff
path: root/bridges/GitHubGistBridge.php
diff options
context:
space:
mode:
Diffstat (limited to 'bridges/GitHubGistBridge.php')
-rw-r--r--bridges/GitHubGistBridge.php258
1 files changed, 124 insertions, 134 deletions
diff --git a/bridges/GitHubGistBridge.php b/bridges/GitHubGistBridge.php
index 5760d8a0..969ee3be 100644
--- a/bridges/GitHubGistBridge.php
+++ b/bridges/GitHubGistBridge.php
@@ -1,110 +1,106 @@
<?php
-class GitHubGistBridge extends BridgeAbstract {
-
- const NAME = 'GitHubGist comment bridge';
- const URI = 'https://gist.github.com';
- const DESCRIPTION = 'Generates feeds for Gist comments';
- const MAINTAINER = 'logmanoriginal';
- const CACHE_TIMEOUT = 3600;
-
- const PARAMETERS = array(array(
- 'id' => array(
- 'name' => 'Gist',
- 'type' => 'text',
- 'required' => true,
- 'title' => 'Insert Gist ID or URI',
- 'exampleValue' => '2646763'
- )
- ));
-
- private $filename;
-
- public function getURI() {
-
- $id = $this->getInput('id') ?: '';
-
- $urlpath = parse_url($id, PHP_URL_PATH);
-
- if($urlpath) {
-
- $components = explode('/', $urlpath);
- $id = end($components);
-
- }
-
- return static::URI . '/' . $id;
-
- }
-
- public function getName() {
- return $this->filename ? $this->filename . ' - ' . static::NAME : static::NAME;
- }
-
- public function collectData() {
-
- $html = getSimpleHTMLDOM($this->getURI(),
- null,
- null,
- true,
- true,
- DEFAULT_TARGET_CHARSET,
- false, // Do NOT remove line breaks
- DEFAULT_BR_TEXT,
- DEFAULT_SPAN_TEXT);
-
- $html = defaultLinkTo($html, $this->getURI());
-
- $fileinfo = $html->find('[class~="file-info"]', 0)
- or returnServerError('Could not find file info!');
-
- $this->filename = $fileinfo->plaintext;
-
- $comments = $html->find('div[class~="TimelineItem"]');
-
- if(is_null($comments)) { // no comments yet
- return;
- }
-
- foreach($comments as $comment) {
-
- $uri = $comment->find('a[href*=#gistcomment]', 0)
- or returnServerError('Could not find comment anchor!');
-
- $title = $comment->find('h3', 0);
-
- $datetime = $comment->find('[datetime]', 0)
- or returnServerError('Could not find comment datetime!');
-
- $author = $comment->find('a.author', 0)
- or returnServerError('Could not find author name!');
-
- $message = $comment->find('[class~="comment-body"]', 0)
- or returnServerError('Could not find comment body!');
-
- $item = array();
-
- $item['uri'] = $uri->href;
- $item['title'] = str_replace('commented', 'commented on', $title->plaintext ?? '');
- $item['timestamp'] = strtotime($datetime->datetime);
- $item['author'] = '<a href="' . $author->href . '">' . $author->plaintext . '</a>';
- $item['content'] = $this->fixContent($message);
- // $item['enclosures'] = array();
- // $item['categories'] = array();
-
- $this->items[] = $item;
-
- }
-
- }
-
- /** Removes all unnecessary tags and adds formatting */
- private function fixContent($content){
-
- // Restore code (inside <pre />) highlighting
- foreach($content->find('pre') as $pre) {
-
- $pre->style = <<<EOD
+class GitHubGistBridge extends BridgeAbstract
+{
+ const NAME = 'GitHubGist comment bridge';
+ const URI = 'https://gist.github.com';
+ const DESCRIPTION = 'Generates feeds for Gist comments';
+ const MAINTAINER = 'logmanoriginal';
+ const CACHE_TIMEOUT = 3600;
+
+ const PARAMETERS = [[
+ 'id' => [
+ 'name' => 'Gist',
+ 'type' => 'text',
+ 'required' => true,
+ 'title' => 'Insert Gist ID or URI',
+ 'exampleValue' => '2646763'
+ ]
+ ]];
+
+ private $filename;
+
+ public function getURI()
+ {
+ $id = $this->getInput('id') ?: '';
+
+ $urlpath = parse_url($id, PHP_URL_PATH);
+
+ if ($urlpath) {
+ $components = explode('/', $urlpath);
+ $id = end($components);
+ }
+
+ return static::URI . '/' . $id;
+ }
+
+ public function getName()
+ {
+ return $this->filename ? $this->filename . ' - ' . static::NAME : static::NAME;
+ }
+
+ public function collectData()
+ {
+ $html = getSimpleHTMLDOM(
+ $this->getURI(),
+ null,
+ null,
+ true,
+ true,
+ DEFAULT_TARGET_CHARSET,
+ false, // Do NOT remove line breaks
+ DEFAULT_BR_TEXT,
+ DEFAULT_SPAN_TEXT
+ );
+
+ $html = defaultLinkTo($html, $this->getURI());
+
+ $fileinfo = $html->find('[class~="file-info"]', 0)
+ or returnServerError('Could not find file info!');
+
+ $this->filename = $fileinfo->plaintext;
+
+ $comments = $html->find('div[class~="TimelineItem"]');
+
+ if (is_null($comments)) { // no comments yet
+ return;
+ }
+
+ foreach ($comments as $comment) {
+ $uri = $comment->find('a[href*=#gistcomment]', 0)
+ or returnServerError('Could not find comment anchor!');
+
+ $title = $comment->find('h3', 0);
+
+ $datetime = $comment->find('[datetime]', 0)
+ or returnServerError('Could not find comment datetime!');
+
+ $author = $comment->find('a.author', 0)
+ or returnServerError('Could not find author name!');
+
+ $message = $comment->find('[class~="comment-body"]', 0)
+ or returnServerError('Could not find comment body!');
+
+ $item = [];
+
+ $item['uri'] = $uri->href;
+ $item['title'] = str_replace('commented', 'commented on', $title->plaintext ?? '');
+ $item['timestamp'] = strtotime($datetime->datetime);
+ $item['author'] = '<a href="' . $author->href . '">' . $author->plaintext . '</a>';
+ $item['content'] = $this->fixContent($message);
+ // $item['enclosures'] = array();
+ // $item['categories'] = array();
+
+ $this->items[] = $item;
+ }
+ }
+
+ /** Removes all unnecessary tags and adds formatting */
+ private function fixContent($content)
+ {
+ // Restore code (inside <pre />) highlighting
+ foreach ($content->find('pre') as $pre) {
+ $pre->style = <<<EOD
padding: 16px;
overflow: auto;
font-size: 85%;
@@ -116,46 +112,40 @@ box-sizing: border-box;
margin-bottom: 16px;
EOD;
- $code = $pre->find('code', 0);
+ $code = $pre->find('code', 0);
- if($code) {
-
- $code->style = <<<EOD
+ if ($code) {
+ $code->style = <<<EOD
white-space: pre;
word-break: normal;
EOD;
+ }
+ }
- }
-
- }
+ // find <code /> not inside <pre /> (`inline-code`)
+ foreach ($content->find('code') as $code) {
+ if ($code->parent()->tag === 'pre') {
+ continue;
+ }
- // find <code /> not inside <pre /> (`inline-code`)
- foreach($content->find('code') as $code) {
-
- if($code->parent()->tag === 'pre') {
- continue;
- }
-
- $code->style = <<<EOD
+ $code->style = <<<EOD
background-color: rgba(27,31,35,0.05);
padding: 0.2em 0.4em;
border-radius: 3px;
EOD;
+ }
- }
-
- // restore text spacing
- foreach($content->find('p') as $p) {
- $p->style = 'margin-bottom: 16px;';
- }
-
- // Remove unnecessary tags
- $content = strip_tags(
- $content->innertext,
- '<p><a><img><ol><ul><li><table><tr><th><td><string><pre><code><br><hr><h>'
- );
+ // restore text spacing
+ foreach ($content->find('p') as $p) {
+ $p->style = 'margin-bottom: 16px;';
+ }
- return $content;
+ // Remove unnecessary tags
+ $content = strip_tags(
+ $content->innertext,
+ '<p><a><img><ol><ul><li><table><tr><th><td><string><pre><code><br><hr><h>'
+ );
- }
+ return $content;
+ }
}