| 
									
										
										
										
											2016-11-15 16:56:29 +01:00
										 |  |  | # frozen_string_literal: true | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-29 19:42:08 +01:00
										 |  |  | module StreamEntriesHelper | 
					
						
							| 
									
										
										
										
											2017-06-08 20:24:28 +09:00
										 |  |  |   EMBEDDED_CONTROLLER = 'stream_entries' | 
					
						
							|  |  |  |   EMBEDDED_ACTION = 'embed' | 
					
						
							| 
									
										
										
										
											2017-04-23 00:05:52 -04:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-02-28 00:02:59 +01:00
										 |  |  |   def display_name(account) | 
					
						
							| 
									
										
										
										
											2017-04-12 12:24:18 -04:00
										 |  |  |     account.display_name.presence || account.username | 
					
						
							| 
									
										
										
										
											2016-02-28 00:02:59 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-12 10:12:42 -04:00
										 |  |  |   def stream_link_target | 
					
						
							|  |  |  |     embedded_view? ? '_blank' : nil | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-12-18 19:47:11 +01:00
										 |  |  |   def acct(account) | 
					
						
							| 
									
										
										
										
											2017-04-23 00:05:52 -04:00
										 |  |  |     if embedded_view? && account.local? | 
					
						
							|  |  |  |       "@#{account.acct}@#{Rails.configuration.x.local_domain}" | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       "@#{account.acct}" | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2016-12-18 19:47:11 +01:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-12 14:04:33 -04:00
										 |  |  |   def style_classes(status, is_predecessor, is_successor, include_threads) | 
					
						
							| 
									
										
										
										
											2016-02-28 14:02:53 +01:00
										 |  |  |     classes = ['entry'] | 
					
						
							| 
									
										
										
										
											2017-04-12 14:04:33 -04:00
										 |  |  |     classes << 'entry-predecessor' if is_predecessor | 
					
						
							|  |  |  |     classes << 'entry-reblog' if status.reblog? | 
					
						
							|  |  |  |     classes << 'entry-successor' if is_successor | 
					
						
							|  |  |  |     classes << 'entry-center' if include_threads | 
					
						
							| 
									
										
										
										
											2016-02-28 14:02:53 +01:00
										 |  |  |     classes.join(' ') | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-12 14:04:33 -04:00
										 |  |  |   def microformats_classes(status, is_direct_parent, is_direct_child) | 
					
						
							|  |  |  |     classes = [] | 
					
						
							|  |  |  |     classes << 'p-in-reply-to' if is_direct_parent | 
					
						
							|  |  |  |     classes << 'p-repost-of' if status.reblog? && is_direct_parent | 
					
						
							|  |  |  |     classes << 'p-comment' if is_direct_child | 
					
						
							|  |  |  |     classes.join(' ') | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |   def microformats_h_class(status, is_predecessor, is_successor, include_threads) | 
					
						
							| 
									
										
										
										
											2017-04-23 00:04:32 -04:00
										 |  |  |     if is_predecessor || status.reblog? || is_successor | 
					
						
							|  |  |  |       'h-cite' | 
					
						
							|  |  |  |     elsif include_threads | 
					
						
							|  |  |  |       '' | 
					
						
							|  |  |  |     else | 
					
						
							|  |  |  |       'h-entry' | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-04-12 14:04:33 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-10 15:06:50 +02:00
										 |  |  |   def rtl_status?(status) | 
					
						
							|  |  |  |     status.local? ? rtl?(status.text) : rtl?(strip_tags(status.text)) | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-02-28 01:52:31 +01:00
										 |  |  |   def rtl?(text) | 
					
						
							| 
									
										
										
										
											2017-06-10 15:06:50 +02:00
										 |  |  |     text = simplified_text(text) | 
					
						
							| 
									
										
										
										
											2017-06-21 01:45:09 +09:00
										 |  |  |     rtl_words = text.scan(/[\p{Hebrew}\p{Arabic}\p{Syriac}\p{Thaana}\p{Nko}]+/m) | 
					
						
							| 
									
										
										
										
											2017-02-28 01:52:31 +01:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-21 01:45:09 +09:00
										 |  |  |     if rtl_words.present? | 
					
						
							| 
									
										
										
										
											2017-06-10 15:06:50 +02:00
										 |  |  |       total_size = text.size.to_f | 
					
						
							| 
									
										
										
										
											2017-06-21 01:45:09 +09:00
										 |  |  |       rtl_size(rtl_words) / total_size > 0.3
 | 
					
						
							| 
									
										
										
										
											2017-04-21 18:13:37 -04:00
										 |  |  |     else | 
					
						
							|  |  |  |       false | 
					
						
							|  |  |  |     end | 
					
						
							| 
									
										
										
										
											2017-02-28 01:52:31 +01:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2017-04-12 10:12:42 -04:00
										 |  |  | 
 | 
					
						
							|  |  |  |   private | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-10 15:06:50 +02:00
										 |  |  |   def simplified_text(text) | 
					
						
							|  |  |  |     text.dup.tap do |new_text| | 
					
						
							|  |  |  |       URI.extract(new_text).each do |url| | 
					
						
							|  |  |  |         new_text.gsub!(url, '') | 
					
						
							|  |  |  |       end | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |       new_text.gsub!(Account::MENTION_RE, '') | 
					
						
							|  |  |  |       new_text.gsub!(Tag::HASHTAG_RE, '') | 
					
						
							|  |  |  |       new_text.gsub!(/\s+/, '') | 
					
						
							|  |  |  |     end | 
					
						
							|  |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-21 01:45:09 +09:00
										 |  |  |   def rtl_size(words) | 
					
						
							|  |  |  |     words.reduce(0) { |acc, elem| acc + elem.size }.to_f | 
					
						
							| 
									
										
										
										
											2017-04-21 18:13:37 -04:00
										 |  |  |   end | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-04-12 10:12:42 -04:00
										 |  |  |   def embedded_view? | 
					
						
							| 
									
										
										
										
											2017-04-23 00:05:52 -04:00
										 |  |  |     params[:controller] == EMBEDDED_CONTROLLER && params[:action] == EMBEDDED_ACTION | 
					
						
							| 
									
										
										
										
											2017-04-12 10:12:42 -04:00
										 |  |  |   end | 
					
						
							| 
									
										
										
										
											2016-02-22 16:00:20 +01:00
										 |  |  | end |