From aed25932b528f16861c4e016cbeb7a3de6231fe7 Mon Sep 17 00:00:00 2001 From: Eugen Rochko Date: Sun, 18 Dec 2016 15:20:39 +0100 Subject: [PATCH] Add OEmbed iframe HTML, convert emojis on public pages, increase size of attachment thumbnails --- app/assets/javascripts/application_public.js | 1 + app/assets/javascripts/extras.jsx | 8 ++++++++ app/assets/stylesheets/application.scss | 12 +++++++++++ app/assets/stylesheets/stream_entries.scss | 21 ++++++++++++++++++++ app/controllers/api/oembed_controller.rb | 4 ++-- app/controllers/stream_entries_controller.rb | 9 +++++++++ app/models/media_attachment.rb | 4 ++-- app/views/api/oembed/show.json.rabl | 4 ++-- app/views/layouts/embedded.html.haml | 8 ++++++++ app/views/stream_entries/embed.html.haml | 2 ++ config/routes.rb | 6 +++++- 11 files changed, 72 insertions(+), 7 deletions(-) create mode 100644 app/assets/javascripts/extras.jsx create mode 100644 app/views/layouts/embedded.html.haml create mode 100644 app/views/stream_entries/embed.html.haml 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| "
" } 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