about summary refs log tree commit diff
diff options
context:
space:
mode:
authorEugen Rochko <eugen@zeonfederated.com>2016-12-18 15:20:39 +0100
committerEugen Rochko <eugen@zeonfederated.com>2016-12-18 15:20:39 +0100
commitaed25932b528f16861c4e016cbeb7a3de6231fe7 (patch)
tree08da19d028a3b238ecd472ff65ab4092a1e4c454
parent6de079a5af328d26d7cbc8daf3367d16c311fddb (diff)
Add OEmbed iframe HTML, convert emojis on public pages, increase size of attachment thumbnails
-rw-r--r--app/assets/javascripts/application_public.js1
-rw-r--r--app/assets/javascripts/extras.jsx8
-rw-r--r--app/assets/stylesheets/application.scss12
-rw-r--r--app/assets/stylesheets/stream_entries.scss21
-rw-r--r--app/controllers/api/oembed_controller.rb4
-rw-r--r--app/controllers/stream_entries_controller.rb9
-rw-r--r--app/models/media_attachment.rb4
-rw-r--r--app/views/api/oembed/show.json.rabl4
-rw-r--r--app/views/layouts/embedded.html.haml8
-rw-r--r--app/views/stream_entries/embed.html.haml2
-rw-r--r--config/routes.rb6
11 files changed, 72 insertions, 7 deletions
diff --git a/app/assets/javascripts/application_public.js b/app/assets/javascripts/application_public.js
index 31a96fd2d..f131a267a 100644
--- a/app/assets/javascripts/application_public.js
+++ b/app/assets/javascripts/application_public.js
@@ -1,2 +1,3 @@
 //= require jquery
 //= require jquery_ujs
+//= require extras
diff --git a/app/assets/javascripts/extras.jsx b/app/assets/javascripts/extras.jsx
new file mode 100644
index 000000000..93f827044
--- /dev/null
+++ b/app/assets/javascripts/extras.jsx
@@ -0,0 +1,8 @@
+import emojify from './components/emoji'
+
+$(() => {
+  $.each($('.entry .content, .name, .account__header__content'), (_, content) => {
+    const $content = $(content);
+    $content.html(emojify($content.html()));
+  });
+});
diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss
index 609b30726..6dd89c0ea 100644
--- a/app/assets/stylesheets/application.scss
+++ b/app/assets/stylesheets/application.scss
@@ -114,6 +114,18 @@ body {
     padding: 0;
   }
 
+  &.embed {
+    background: transparent;
+    margin: 0;
+
+    .container {
+      position: absolute;
+      width: 100%;
+      height: 100%;
+      overflow: hidden;
+    }
+  }
+
   @media screen and (max-width: 360px) {
     padding-bottom: 0;
   }
diff --git a/app/assets/stylesheets/stream_entries.scss b/app/assets/stylesheets/stream_entries.scss
index 1e29ee718..4df03b794 100644
--- a/app/assets/stylesheets/stream_entries.scss
+++ b/app/assets/stylesheets/stream_entries.scss
@@ -232,3 +232,24 @@
     }
   }
 }
+
+.embed {
+  .activity-stream {
+    border-radius: 4px;
+    box-shadow: none;
+
+    .entry {
+      &:last-child {
+        border-radius: 0 0 4px 4px;
+      }
+
+      &:first-child {
+        border-radius: 4px 4px 0 0;
+
+        &:last-child {
+          border-radius: 4px;
+        }
+      }
+    }
+  }
+}
diff --git a/app/controllers/api/oembed_controller.rb b/app/controllers/api/oembed_controller.rb
index 4a591dc22..d30ae8152 100644
--- a/app/controllers/api/oembed_controller.rb
+++ b/app/controllers/api/oembed_controller.rb
@@ -5,8 +5,8 @@ class Api::OembedController < ApiController
 
   def show
     @stream_entry = stream_entry_from_url(params[:url])
-    @width        = [300, params[:maxwidth].to_i].min
-    @height       = [200, params[:maxheight].to_i].min
+    @width        = [300, params[:maxwidth].to_i].max
+    @height       = [200, params[:maxheight].to_i].max
   end
 
   private
diff --git a/app/controllers/stream_entries_controller.rb b/app/controllers/stream_entries_controller.rb
index 98d029030..933bdf737 100644
--- a/app/controllers/stream_entries_controller.rb
+++ b/app/controllers/stream_entries_controller.rb
@@ -25,6 +25,15 @@ class StreamEntriesController < ApplicationController
     end
   end
 
+  def embed
+    response.headers['X-Frame-Options'] = 'ALLOWALL'
+    @type = @stream_entry.activity_type.downcase
+
+    return gone if @stream_entry.activity.nil?
+
+    render layout: 'embedded'
+  end
+
   private
 
   def set_account
diff --git a/app/models/media_attachment.rb b/app/models/media_attachment.rb
index a97fe89a5..2a5d23739 100644
--- a/app/models/media_attachment.rb
+++ b/app/models/media_attachment.rb
@@ -45,14 +45,14 @@ class MediaAttachment < ApplicationRecord
       if f.instance.image?
         {
           original: '1280x1280>',
-          small: '250x250>',
+          small: '400x400>',
         }
       else
         {
           small: {
             convert_options: {
               output: {
-                vf: 'scale=\'min(250\, iw):min(250\, ih)\':force_original_aspect_ratio=decrease',
+                vf: 'scale=\'min(400\, iw):min(400\, ih)\':force_original_aspect_ratio=decrease',
               },
             },
             format: 'png',
diff --git a/app/views/api/oembed/show.json.rabl b/app/views/api/oembed/show.json.rabl
index e035bc13c..2bec9165e 100644
--- a/app/views/api/oembed/show.json.rabl
+++ b/app/views/api/oembed/show.json.rabl
@@ -9,6 +9,6 @@ node(:author_url) { |entry| account_url(entry.account) }
 node(:provider_name) { Rails.configuration.x.local_domain }
 node(:provider_url) { root_url }
 node(:cache_age) { 86_400 }
-node(:html, &:content)
+node(:html) { |entry| "<div style=\"position: relative; height: 0; overflow: hidden; padding-top: 30px; padding-bottom: 56.25%\"><iframe src=\"#{embed_account_stream_entry_url(entry.account, entry)}\" style=\"position: absolute; top: 0; left: 0; width: 100%; height: 100%; overflow: hidden\" frameborder=\"0\" width=\"#{@width}\" scrolling=\"no\"></iframe></div>" }
 node(:width) { @width }
-node(:height) { @height }
+node(:height) { nil }
diff --git a/app/views/layouts/embedded.html.haml b/app/views/layouts/embedded.html.haml
new file mode 100644
index 000000000..adbf0a287
--- /dev/null
+++ b/app/views/layouts/embedded.html.haml
@@ -0,0 +1,8 @@
+!!! 5
+%html{:lang => 'en'}
+  %head
+    %meta{:charset => 'utf-8'}/
+    = stylesheet_link_tag 'application', media: 'all'
+    = javascript_include_tag 'application_public'
+  %body.embed
+    = yield
diff --git a/app/views/stream_entries/embed.html.haml b/app/views/stream_entries/embed.html.haml
new file mode 100644
index 000000000..4a733d428
--- /dev/null
+++ b/app/views/stream_entries/embed.html.haml
@@ -0,0 +1,2 @@
+.activity-stream.activity-stream-headless
+  = render partial: @type, locals: { @type.to_sym => @stream_entry.activity }
diff --git a/config/routes.rb b/config/routes.rb
index 2d70bdcea..fd187dc42 100644
--- a/config/routes.rb
+++ b/config/routes.rb
@@ -25,7 +25,11 @@ Rails.application.routes.draw do
   }
 
   resources :accounts, path: 'users', only: [:show], param: :username do
-    resources :stream_entries, path: 'updates', only: [:show]
+    resources :stream_entries, path: 'updates', only: [:show] do
+      member do
+        get :embed
+      end
+    end
 
     member do
       get :followers