mirror of
				https://git.tt-rss.org/fox/tt-rss.git
				synced 2025-11-04 13:51:26 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
/* global Plugins, __, require, PluginHost, App, dojo */
 | 
						|
 | 
						|
Plugins.Shorten_Expanded = {
 | 
						|
	threshold: 1.5, // of window height
 | 
						|
	observer: new ResizeObserver((entries) => {
 | 
						|
		entries.forEach((entry) => {
 | 
						|
			const row = entry.target;
 | 
						|
 | 
						|
			Plugins.Shorten_Expanded.shorten_if_needed(row);
 | 
						|
		});
 | 
						|
	}),
 | 
						|
	shorten_if_needed: function(row) {
 | 
						|
 | 
						|
		const content = row.querySelector(".content");
 | 
						|
		const content_inner = row.querySelector(".content-inner");
 | 
						|
 | 
						|
		//console.log('shorten_expanded', row.id, content.offsetHeight, 'vs', this.threshold * window.innerHeight);
 | 
						|
 | 
						|
		if (content && content_inner && !row.hasAttribute('data-already-shortened') && content.offsetHeight >= this.threshold * window.innerHeight) {
 | 
						|
 | 
						|
			row.setAttribute('data-already-shortened', true);
 | 
						|
 | 
						|
			const attachments = row.querySelector(".attachments-inline"); // optional
 | 
						|
 | 
						|
			content_inner.innerHTML = `
 | 
						|
				<div class="content-shrink-wrap">
 | 
						|
					${content_inner.innerHTML}
 | 
						|
					${attachments ? attachments.innerHTML : ''}
 | 
						|
				</div>
 | 
						|
				<button dojoType="dijit.form.Button" class="alt-info expand-prompt" onclick="return Plugins.Shorten_Expanded.expand('${row.id}')" href="#">
 | 
						|
					${App.FormFields.icon('add')}
 | 
						|
					${__("Expand article")}
 | 
						|
				</button>`;
 | 
						|
 | 
						|
			if (attachments)
 | 
						|
				attachments.innerHTML = "";
 | 
						|
 | 
						|
			dojo.parser.parse(content_inner);
 | 
						|
 | 
						|
			return true;
 | 
						|
		}
 | 
						|
		return false;
 | 
						|
	},
 | 
						|
	process_row: function(row) {
 | 
						|
 | 
						|
		if (this.shorten_if_needed(row))
 | 
						|
			return;
 | 
						|
 | 
						|
		this.observer.observe(row);
 | 
						|
	},
 | 
						|
	expand: function(id) {
 | 
						|
		const row = App.byId(id);
 | 
						|
 | 
						|
		if (row) {
 | 
						|
			const content = row.querySelector(".content-shrink-wrap");
 | 
						|
			const link = row.querySelector(".expand-prompt");
 | 
						|
 | 
						|
			if (content) content.removeClassName("content-shrink-wrap");
 | 
						|
			if (link) Element.hide(link);
 | 
						|
		}
 | 
						|
 | 
						|
		return false;
 | 
						|
	}
 | 
						|
}
 | 
						|
 | 
						|
require(['dojo/_base/kernel', 'dojo/ready'], function  (dojo, ready) {
 | 
						|
	ready(function() {
 | 
						|
		PluginHost.register(PluginHost.HOOK_ARTICLE_RENDERED_CDM, function(row) {
 | 
						|
			Plugins.Shorten_Expanded.process_row(row);
 | 
						|
			return true;
 | 
						|
		});
 | 
						|
	});
 | 
						|
});
 |