]> git.mxchange.org Git - quix0rs-gnu-social.git/commitdiff
Improved imageboard-style notice feeds on web UI
authorMikael Nordfeldth <mmn@hethane.se>
Sun, 18 May 2014 12:05:29 +0000 (14:05 +0200)
committerMikael Nordfeldth <mmn@hethane.se>
Sun, 18 May 2014 12:05:29 +0000 (14:05 +0200)
lib/attachment.php
lib/attachmentlistitem.php
lib/default.php

index c55b07d7ccf7ad410ab5a003cd39e345bc9f23cd..c7aceed218009e05e8808ef995b443143c132039 100644 (file)
@@ -40,7 +40,7 @@ class Attachment extends AttachmentListItem
             $this->out->elementStart('div', array('id' => 'attachment_view',
                                                   'class' => 'hentry'));
             $this->out->elementStart('div', 'entry-title');
-            $this->out->element('a', $this->linkAttr(), $this->linkTitle());
+            $this->out->element('a', $this->linkAttr(), _('Download link'));
             $this->out->elementEnd('div');
 
             $this->out->elementStart('div', 'entry-content');
@@ -56,130 +56,6 @@ class Attachment extends AttachmentListItem
     }
 
     function linkAttr() {
-        return array('rel' => 'external', 'href' => $this->attachment->url);
-    }
-
-    function linkTitle() {
-        return $this->attachment->url;
-    }
-
-    function showRepresentation() {
-        if (Event::handle('StartShowAttachmentRepresentation', array($this->out, $this->attachment))) {
-            if (!empty($this->attachment->mimetype)) {
-                switch ($this->attachment->mimetype) {
-                case 'image/gif':
-                case 'image/png':
-                case 'image/jpg':
-                case 'image/jpeg':
-                    $this->out->element('img', array('src' => $this->attachment->url, 'alt' => 'alt'));
-                    break;
-
-                case 'application/ogg':
-                    $arr  = array('type' => $this->attachment->mimetype,
-                        'data' => $this->attachment->url,
-                        'width' => 320,
-                        'height' => 240
-                    );
-                    $this->out->elementStart('object', $arr);
-                    $this->out->element('param', array('name' => 'src', 'value' => $this->attachment->url));
-                    $this->out->element('param', array('name' => 'autoStart', 'value' => 1));
-                    $this->out->elementEnd('object');
-                    break;
-
-                case 'audio/ogg':
-                case 'audio/x-speex':
-                case 'video/mpeg':
-                case 'audio/mpeg':
-                case 'video/mp4':
-                case 'video/ogg':
-                case 'video/quicktime':
-                case 'video/webm':
-                    $mediatype = common_get_mime_media($this->attachment->mimetype);
-                    try {
-                        $thumb = $this->attachment->getThumbnail();
-                        $poster = $thumb->getUrl();
-                        unset ($thumb);
-                    } catch (Exception $e) {
-                        $poster = null;
-                    }
-                    $this->out->elementStart($mediatype,
-                                        array('class'=>'attachment_player',
-                                            'poster'=>$poster,
-                                            'controls'=>'controls'));
-                    $this->out->element('source',
-                                        array('src'=>$this->attachment->url,
-                                            'type'=>$this->attachment->mimetype));
-                    $this->out->elementEnd($mediatype);
-                    break;
-
-                case 'text/html':
-                    if ($this->attachment->filename) {
-                        // Locally-uploaded HTML. Scrub and display inline.
-                        $this->showHtmlFile($this->attachment);
-                        break;
-                    }
-                    // Fall through to default.
-
-                default:
-                    Event::handle('ShowUnsupportedAttachmentRepresentation', array($this->out, $this->attachment));
-                }
-            } else {
-                Event::handle('ShowUnsupportedAttachmentRepresentation', array($this->out, $this->attachment));
-            }
-        }
-        Event::handle('EndShowAttachmentRepresentation', array($this->out, $this->attachment));
-    }
-
-    protected function showHtmlFile(File $attachment)
-    {
-        $body = $this->scrubHtmlFile($attachment);
-        if ($body) {
-            $this->out->raw($body);
-        }
-    }
-
-    /**
-     * @return mixed false on failure, HTML fragment string on success
-     */
-    protected function scrubHtmlFile(File $attachment)
-    {
-        $path = File::path($attachment->filename);
-        if (!file_exists($path) || !is_readable($path)) {
-            common_log(LOG_ERR, "Missing local HTML attachment $path");
-            return false;
-        }
-        $raw = file_get_contents($path);
-
-        // Normalize...
-        $dom = new DOMDocument();
-        if(!$dom->loadHTML($raw)) {
-            common_log(LOG_ERR, "Bad HTML in local HTML attachment $path");
-            return false;
-        }
-
-        // Remove <script>s or htmlawed will dump their contents into output!
-        // Note: removing child nodes while iterating seems to mess things up,
-        // hence the double loop.
-        $scripts = array();
-        foreach ($dom->getElementsByTagName('script') as $script) {
-            $scripts[] = $script;
-        }
-        foreach ($scripts as $script) {
-            common_log(LOG_DEBUG, $script->textContent);
-            $script->parentNode->removeChild($script);
-        }
-
-        // Trim out everything outside the body...
-        $body = $dom->saveHTML();
-        $body = preg_replace('/^.*<body[^>]*>/is', '', $body);
-        $body = preg_replace('/<\/body[^>]*>.*$/is', '', $body);
-
-        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
-        $config = array('safe' => 1,
-                        'deny_attribute' => 'id,style,on*',
-                        'comment' => 1); // remove comments
-        $scrubbed = htmLawed($body, $config);
-
-        return $scrubbed;
+        return array('rel' => 'external', 'href' => $this->attachment->getUrl());
     }
 }
index 5de61d17c512a1d0912b75baece5a8d4942a6e36..6b8df0dd3962537cfbcd7bd20bffdf99ecff9fa5 100644 (file)
@@ -87,7 +87,7 @@ class AttachmentListItem extends Widget
 
     function linkAttr() {
         return array('class' => 'attachment',
-                     'href' => $this->attachment->url,
+                     'href' => $this->attachment->getUrl(),
                      'id' => 'attachment-' . $this->attachment->id,
                      'title' => $this->linkTitle());
     }
@@ -105,12 +105,128 @@ class AttachmentListItem extends Widget
     }
 
     function showRepresentation() {
-        try {
-            $thumb = $this->attachment->getThumbnail();
-            $this->out->element('img', array('alt' => '', 'src' => $thumb->getUrl(), 'width' => $thumb->width, 'height' => $thumb->height));
-        } catch (UnsupportedMediaException $e) {
-            // Image representation unavailable
+        if (Event::handle('StartShowAttachmentRepresentation', array($this->out, $this->attachment))) {
+            if (!empty($this->attachment->mimetype)) {
+                switch ($this->attachment->mimetype) {
+                case 'image/gif':
+                case 'image/png':
+                case 'image/jpg':
+                case 'image/jpeg':
+                    try {
+                        $thumb = $this->attachment->getThumbnail();
+                        $this->out->element('img', array('src' => $thumb->getUrl(), 'alt' => ''));
+                    } catch (UnsupportedMediaException $e) {
+                        // FIXME: Show a good representation of unsupported/unshowable images
+                    }
+                    break;
+
+                case 'application/ogg':
+                    $arr  = array('type' => $this->attachment->mimetype,
+                        'data' => $this->attachment->url,
+                        'width' => 320,
+                        'height' => 240
+                    );
+                    $this->out->elementStart('object', $arr);
+                    $this->out->element('param', array('name' => 'src', 'value' => $this->attachment->url));
+                    $this->out->element('param', array('name' => 'autoStart', 'value' => 1));
+                    $this->out->elementEnd('object');
+                    break;
+
+                case 'audio/ogg':
+                case 'audio/x-speex':
+                case 'video/mpeg':
+                case 'audio/mpeg':
+                case 'video/mp4':
+                case 'video/ogg':
+                case 'video/quicktime':
+                case 'video/webm':
+                    $mediatype = common_get_mime_media($this->attachment->mimetype);
+                    try {
+                        $thumb = $this->attachment->getThumbnail();
+                        $poster = $thumb->getUrl();
+                        unset ($thumb);
+                    } catch (Exception $e) {
+                        $poster = null;
+                    }
+                    $this->out->elementStart($mediatype,
+                                        array('class'=>'attachment_player',
+                                            'poster'=>$poster,
+                                            'controls'=>'controls'));
+                    $this->out->element('source',
+                                        array('src'=>$this->attachment->url,
+                                            'type'=>$this->attachment->mimetype));
+                    $this->out->elementEnd($mediatype);
+                    break;
+
+                case 'text/html':
+                    if ($this->attachment->filename) {
+                        // Locally-uploaded HTML. Scrub and display inline.
+                        $this->showHtmlFile($this->attachment);
+                        break;
+                    }
+                    // Fall through to default.
+
+                default:
+                    Event::handle('ShowUnsupportedAttachmentRepresentation', array($this->out, $this->attachment));
+                }
+            } else {
+                Event::handle('ShowUnsupportedAttachmentRepresentation', array($this->out, $this->attachment));
+            }
+        }
+        Event::handle('EndShowAttachmentRepresentation', array($this->out, $this->attachment));
+    }
+
+    protected function showHtmlFile(File $attachment)
+    {
+        $body = $this->scrubHtmlFile($attachment);
+        if ($body) {
+            $this->out->raw($body);
+        }
+    }
+
+    /**
+     * @return mixed false on failure, HTML fragment string on success
+     */
+    protected function scrubHtmlFile(File $attachment)
+    {
+        $path = File::path($attachment->filename);
+        if (!file_exists($path) || !is_readable($path)) {
+            common_log(LOG_ERR, "Missing local HTML attachment $path");
+            return false;
         }
+        $raw = file_get_contents($path);
+
+        // Normalize...
+        $dom = new DOMDocument();
+        if(!$dom->loadHTML($raw)) {
+            common_log(LOG_ERR, "Bad HTML in local HTML attachment $path");
+            return false;
+        }
+
+        // Remove <script>s or htmlawed will dump their contents into output!
+        // Note: removing child nodes while iterating seems to mess things up,
+        // hence the double loop.
+        $scripts = array();
+        foreach ($dom->getElementsByTagName('script') as $script) {
+            $scripts[] = $script;
+        }
+        foreach ($scripts as $script) {
+            common_log(LOG_DEBUG, $script->textContent);
+            $script->parentNode->removeChild($script);
+        }
+
+        // Trim out everything outside the body...
+        $body = $dom->saveHTML();
+        $body = preg_replace('/^.*<body[^>]*>/is', '', $body);
+        $body = preg_replace('/<\/body[^>]*>.*$/is', '', $body);
+
+        require_once INSTALLDIR.'/extlib/htmLawed/htmLawed.php';
+        $config = array('safe' => 1,
+                        'deny_attribute' => 'id,style,on*',
+                        'comment' => 1); // remove comments
+        $scrubbed = htmLawed($body, $config);
+
+        return $scrubbed;
     }
 
     /**
index 1a1b6d27a5dfbac411cbb446136ff0f884f14c71..f725d7719be0d569531626c0e40dd4f635af48b5 100644 (file)
@@ -254,9 +254,9 @@ $default =
               ),
         'thumbnail' =>
         array('crop' => false,      // overridden to true if thumb height === null
-              'maxsize' => 500,     // thumbs bigger than this will not be generated
-              'width' => 500,
-              'height' => 250),
+              'maxsize' => 600,     // thumbs with an edge larger than this will not be generated
+              'width' => 450,
+              'height' => 600),
         'application' =>
         array('desclimit' => null),
         'group' =>