1
0
Fork 0
forked from gitea/nas

Add basic OEmbed provider API, fix #247

This commit is contained in:
Eugen Rochko 2016-11-30 23:01:03 +01:00
parent 14bd46946d
commit 6ff93845d5
7 changed files with 65 additions and 0 deletions

View file

@ -0,0 +1,21 @@
# frozen_string_literal: true
class Api::OembedController < ApiController
respond_to :json
def show
@stream_entry = stream_entry_from_url(params[:url])
@width = [300, params[:maxwidth].to_i].min
@height = [200, params[:maxheight].to_i].min
end
private
def stream_entry_from_url(url)
params = Rails.application.routes.recognize_path(url)
raise ActiveRecord::NotFound unless params[:controller] == 'stream_entries' && params[:action] == 'show'
StreamEntry.find(params[:id])
end
end

View file

@ -0,0 +1,2 @@
module Api::OembedHelper
end

View file

@ -0,0 +1,14 @@
# frozen_string_literal: true
object @stream_entry
node(:type) { 'rich' }
node(:version) { '1.0' }
node(:title, &:title)
node(:author_name) { |entry| entry.account.display_name.blank? ? entry.account.username : entry.account.display_name }
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(:width) { @width }
node(:height) { @height }

View file

@ -1,8 +1,13 @@
- content_for :header_tags do
%link{ rel: 'alternate', type: 'application/atom+xml', href: account_stream_entry_url(@account, @stream_entry, format: 'atom') }/
%link{ rel: 'alternate', type: 'application/json+oembed', href: api_oembed_url(url: account_stream_entry_url(@account, @stream_entry), format: 'json') }/
%meta{ name: 'og:site_name', content: 'Mastodon' }/
%meta{ name: 'og:type', content: 'article' }/
%meta{ name: 'og:title', content: "#{@account.username} on #{Rails.configuration.x.local_domain}" }/
%meta{ name: 'og:article:author', content: @account.username }/
%meta{ name: 'og:description', content: @stream_entry.activity.content }/
%meta{ name: 'og:image', content: @stream_entry.activity.is_a?(Status) && @stream_entry.activity.media_attachments.size > 0 ? full_asset_url(@stream_entry.activity.media_attachments.first.file.url(:preview)) : full_asset_url(@account.avatar.url(:large)) }/
.activity-stream.activity-stream-headless
= render partial: @type, locals: { @type.to_sym => @stream_entry.activity, include_threads: true }