diff --git a/app/controllers/hacks_controller.rb b/app/controllers/hacks_controller.rb new file mode 100644 index 00000000..42bafd6f --- /dev/null +++ b/app/controllers/hacks_controller.rb @@ -0,0 +1,35 @@ +# bad code that should be seriously checked over before entering one of the +# other prim and proper files in the nice section of this repo +class HacksController < ApplicationController + include ActionView::Helpers::TextHelper # string truncate method + + def load_url_title + authorize :Hack + url = params[:url] # TODO verify!?!?!?! + response, url = get_with_redirects(url) + title = get_encoded_title(response) + render json: { success: true, title: title, url: url } + rescue StandardError => e + render json: { success: false, error_type: e.class.name, error_message: e.message } + end + + private + + def get_with_redirects(url) + uri = URI.parse(url) + response = Net::HTTP.get_response(uri) + while response.code == '301' + uri = URI.parse(response['location']) + response = Net::HTTP.get_response(uri) + end + [response, uri.to_s] + end + + def get_encoded_title(http_response) + title = http_response.body.sub(/.*(.*)<\/title>.*/m, '\1') + charset = http_response['content-type'].sub(/.*charset=(.*);?.*/, '\1') + charset = nil if charset == 'text/html' + title = title.force_encoding(charset) if charset + truncate(title, length: 140) + end +end diff --git a/app/policies/hack_policy.rb b/app/policies/hack_policy.rb new file mode 100644 index 00000000..b6fbf6ce --- /dev/null +++ b/app/policies/hack_policy.rb @@ -0,0 +1,5 @@ +class HackPolicy < ApplicationPolicy + def load_url_title? + true + end +end diff --git a/config/routes.rb b/config/routes.rb index fe48b6ba..84112d23 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -80,4 +80,8 @@ Metamaps::Application.routes.draw do get 'users/:id/details', to: 'users#details', as: :details post 'user/updatemetacodes', to: 'users#updatemetacodes', as: :updatemetacodes resources :users, except: [:index, :destroy] + + namespace :hacks do + get 'load_url_title' + end end diff --git a/frontend/src/Metamaps/PasteInput.js b/frontend/src/Metamaps/PasteInput.js index d14a0cf4..13258857 100644 --- a/frontend/src/Metamaps/PasteInput.js +++ b/frontend/src/Metamaps/PasteInput.js @@ -88,6 +88,18 @@ const PasteInput = { import_id, { success: function(topic) { + $.get('/hacks/load_url_title', { + url: text + }, function success(data, textStatus) { + var selector = '#showcard #topic_' + topic.get('id') + ' .best_in_place' + if ($(selector).find('form').length > 0) { + $(selector).find('textarea, input').val(data.title) + } else { + $(selector).html(data.title) + } + topic.set('name', data.title) + topic.save() + }) TopicCard.showCard(topic.get('node'), function() { $('#showcard #titleActivator').click() .find('textarea, input').focus()