Jump to content
View in the app

A better way to browse. Learn more.

IPBMafia.ru - поддержка Invision Community, релизы, темы, плагины и приложения

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Отображение цитат

Featured Replies

Posted

Привет!

На меня "напали" толпы  пользователей, которые захотели уплотнить шрифт в ленте сообщений.  

Понятно, что, прежде всего, в настройках редактора клац по Enter был определен как "новая строка" (а не абзац).

Далее умные люди посоветовали решение через добавление в custom.css конструкции .ipsComment_content .ipsType_richText{ line-height: 1.1; }

Эффект был достигнут.  Текст заметно уплотнился по вертикали. Вместо 2-3 сообщений на одном экране, теперь без промотки можно читать 4-5. 

К сожалению, выявился дефект :  при использовании цитат последующий набираемый текст становится вплотную к прямоугольнику цитаты.

Делать клац по Enter каждый раз после и перед цитатой неудобно. 

Вопрос , как имитировать новый абзац? Или как можно  цитату обрамить своеобразным  padding-ом снизу и сверху?  Как это реализовать в коде? 

Заранее благодарю.

 

27.jpg

28.jpg

33 минуты назад, sapr2017 сказал:

Или как можно  цитату обрамить своеобразным  padding-ом снизу и сверху?  Как это реализовать в коде?

в custom.css добавить код:

.ipsQuote {
    margin-bottom: 10px;
    margin-top: 10px;
}

 

  • 4 years later...

Тоже мучился с этим, некоторые пользователи злоупотребляли энтером)) спасибо за подсказку про custom 🙂

1 час назад, deeverbs сказал:

злоупотребляли энтером

по стандарту на энтер включён абзац, если включить просто перенос строки, то вполне достаточно этого и больше ничего делать не приходится. 

да и на скринах, судя по всему, какой-то газетный форум из нулевых. такое тоже читать не особо приятно, когда весь текст слипается.

8 часов назад, by_ix сказал:

да и на скринах, судя по всему, какой-то газетный форум из нулевых. такое тоже читать не особо приятно, когда весь текст слипается.

Я сделал перенос строки и текст слипся в местах где цитаты, картинки и видео.. Я добавил в custom.css и добился нужно результата, но с видео так не прокатило..

.ipsQuote {
    margin-bottom: 10px;
    margin-top: 10px;
}

.ipsImage {
    margin-bottom: 10px;
    margin-top: 10px;
}

Подскажите, пожалуйста, как сделать подобные отступы, на видео...

adfadfv.png

sdsdcs.png

@ZIKURIK работает! Спасибо огромное! 🙂

Пользуясь случаем, хочу ещё спросить, когда в редактор вставляется ссылка на видео, например с YouTube, автоматом добавляется &nbsp, из-за этого пост выглядит немного не эстетично.

Можно как-то побороть это? 

IMG_20211017_174006.jpg

Edited by deeverbs

или можно так, вставь это в includeJS

<script type='text/javascript'>
$('#ipsLayout_contentArea').find('.ipsEmbeddedVideo').each( function () {
	if( $(this).next("p:contains('')").next().length == 0 ){
		$(this).next("p:contains('')").remove();
	}
});
</script>

удаляет nbsp если дальше нет тегов

15 минут назад, ZIKURIK сказал:

его удалить можно при добавлении

Я знаю, но пользователи этого не будут делать) им все равно, что там вставляется) 

1 минуту назад, ZIKURIK сказал:

или можно так, вставь это в includeJS

Это в какой папке этот скрипт? 

56 минут назад, ZIKURIK сказал:

в шаблонах вбей просто, он найдет

блин, там куча условий 🙂 (в самом файле в смысле) где он должен быть?))

{{if !\IPS\Request::i()->isAjax()}}
	{{$maxImageDims = \IPS\Settings::i()->attachment_image_size ? explode( 'x', \IPS\Settings::i()->attachment_image_size ) : array( 1000, 750 );}}
	<script type='text/javascript'>
		var ipsDebug = {{if ( \IPS\IN_DEV and \IPS\DEV_DEBUG_JS ) or \IPS\DEBUG_JS}}true{{else}}false{{endif}};		
	{{if \IPS\IN_DEV}}
		var CKEDITOR_BASEPATH = '{url="applications/core/dev/ckeditor" base="none" protocol="\IPS\Http\Url::PROTOCOL_RELATIVE"}/';
	{{else}}
		var CKEDITOR_BASEPATH = '{url="applications/core/interface/ckeditor/ckeditor" base="none" protocol="\IPS\Http\Url::PROTOCOL_RELATIVE"}/';
	{{endif}}
		var ipsSettings = {
			{{if \IPS\Dispatcher::hasInstance() and \IPS\Dispatcher::i()->controllerLocation == 'admin'}}
			isAcp: true,
			{{endif}}
			{{if \IPS\COOKIE_DOMAIN !== NULL}}
			cookie_domain: "{expression="\IPS\COOKIE_DOMAIN"}",
			{{endif}}
			cookie_path: "{expression="\IPS\Request::getCookiePath()"}",
			{{if \IPS\COOKIE_PREFIX !== NULL}}
			cookie_prefix: "{expression="\IPS\COOKIE_PREFIX"}",
			{{endif}}
			{{if mb_substr( \IPS\Settings::i()->base_url, 0, 5 ) == 'https' AND \IPS\COOKIE_BYPASS_SSLONLY !== TRUE}}
			cookie_ssl: true,
			{{else}}
			cookie_ssl: false,
			{{endif}}
			upload_imgURL: "{resource="notifyIcons/upload.png" location="front"}",
			message_imgURL: "{resource="notifyIcons/message.png" location="front"}",
			notification_imgURL: "{resource="notifyIcons/notification.png" location="front"}",
			baseURL: "{expression="\IPS\Http\Url::baseUrl( \IPS\Http\Url::PROTOCOL_RELATIVE )"}",
			jsURL: "{expression="rtrim( \IPS\Http\Url::baseUrl( \IPS\Http\Url::PROTOCOL_RELATIVE ), '/' )"}/applications/core/interface/js/js.php",
			csrfKey: "{expression="\IPS\Session::i()->csrfKey"}",
			antiCache: "{expression="\IPS\Theme::i()->cssCacheBustKey()"}",
			jsAntiCache: "{expression="\IPS\Output\Javascript::javascriptCacheBustKey()"}",
			disableNotificationSounds: true,
			useCompiledFiles: {{if \IPS\IN_DEV}}false{{else}}true{{endif}},
			links_external: {{if \IPS\Settings::i()->links_external }}true{{else}}false{{endif}},
			memberID: {expression="( \IPS\Member::loggedIn()->member_id ) ? \IPS\Member::loggedIn()->member_id : 0"},
			lazyLoadEnabled: {{if \IPS\Settings::i()->lazy_load_enabled}}true{{else}}false{{endif}},
			blankImg: "{expression="\IPS\Text\Parser::blankImage()"}",
			analyticsProvider: "{expression="\IPS\Settings::i()->ipbseo_ga_provider"}",
			viewProfiles: {{if \IPS\Member::loggedIn()->canAccessModule( \IPS\Application\Module::get( 'core', 'members' ) )}}true{{else}}false{{endif}},
			mapProvider: {{if \IPS\Settings::i()->googlemaps and \IPS\Settings::i()->google_maps_api_key}}'google'{{elseif \IPS\Settings::i()->mapbox and \IPS\Settings::i()->mapbox_api_key}}'mapbox'{{else}}'none'{{endif}},
			mapApiKey: {{if \IPS\Settings::i()->googlemaps and \IPS\Settings::i()->google_maps_api_key}}"{expression="\IPS\Settings::i()->google_maps_api_key"}"{{elseif \IPS\Settings::i()->mapbox and \IPS\Settings::i()->mapbox_api_key}}"{expression="\IPS\Settings::i()->mapbox_api_key"}"{{else}}''{{endif}},
			pushPublicKey: {{if \IPS\Notification::webPushEnabled()}}"{expression="\IPS\Settings::i()->vapid_public_key"}"{{else}}null{{endif}},
			relativeDates: {{if \IPS\Settings::i()->relative_dates_enable}}true{{else}}false{{endif}}
		};
		
		{{if \IPS\Settings::i()->ipbseo_ga_provider == 'custom' && \IPS\Settings::i()->ipbseo_ga_paginatecode && \IPS\Dispatcher::hasInstance() && \IPS\Dispatcher::i()->controllerLocation == 'front'}}
			ipsSettings['paginateCode'] = {setting="ipbseo_ga_paginatecode"};
		{{endif}}
		
		{{if !empty( $maxImageDims[0] ) AND !empty( $maxImageDims[1] ) AND ( \intval( $maxImageDims[0] ) !== 0 || \intval( $maxImageDims[1] ) !== 0 ) }}
			ipsSettings['maxImageDimensions'] = {
				width: {$maxImageDims[0]},
				height: {$maxImageDims[1]}
			};
		{{endif}}
		
	</script>
{{endif}}
{{if !\IPS\Request::i()->isAjax() and \IPS\Dispatcher::hasInstance() and \IPS\Dispatcher::i()->controllerLocation == 'front' and \IPS\Settings::i()->fb_pixel_enabled and \IPS\Settings::i()->fb_pixel_id}}
{{$pixelId = \IPS\Settings::i()->fb_pixel_id;}}
<!-- Facebook Pixel Code -->
<script>
!function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function(){n.callMethod?
n.callMethod.apply(n,arguments):n.queue.push(arguments)};if(!f._fbq)f._fbq=n;
n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0;
t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window,
document,'script','https://connect.facebook.net/en_US/fbevents.js');
setTimeout( function() {
	fbq('init', '{$pixelId}');
	{{if $pixels = \IPS\core\Facebook\Pixel::i()->output()}}
	{$pixels|raw}
	{{endif}}
}, {expression="\intval( \IPS\Settings::i()->fb_pixel_delay * 1000 )"} );
</script>
<!-- End Facebook Pixel Code -->
{{endif}}

{{foreach array_unique( array_filter( \IPS\Output::i()->jsFiles ), SORT_STRING ) as $js}}
{{$js = \IPS\Http\Url::external( $js );}}
<script type='text/javascript' src='{{if $js->data['host'] == parse_url( \IPS\Settings::i()->base_url, PHP_URL_HOST )}}{expression="$js->setQueryString( 'v', \IPS\Output\Javascript::javascriptCacheBustKey() )"}{{else}}{expression="$js"}{{endif}}' data-ips></script>
{{endforeach}}
{{foreach array_unique( \IPS\Output::i()->jsFilesAsync, SORT_STRING ) as $js}}
<script type="text/javascript" src="{expression="\IPS\Http\Url::external( $js )->setQueryString( 'v', \IPS\Output\Javascript::javascriptCacheBustKey() )"}" async></script>
{{endforeach}}
{{if !\IPS\Request::i()->isAjax() and ( \count( \IPS\Output::i()->jsVars ) || \IPS\Output::i()->headJs)}}
	<script type='text/javascript'>
		{{foreach \IPS\Output::i()->jsVars as $k => $v}}
			ips.setSetting( '{$k}', {{if ! \is_array( $v )}}jQuery.parseJSON('{expression="json_encode( $v, JSON_HEX_APOS )" raw="true"}'){{else}}{expression="json_encode( $v, JSON_HEX_APOS )" raw="true"}{{endif}} );
		{{endforeach}}
		{expression="\IPS\Output::i()->headJs" raw="true"}
	</script>
{{endif}}
{{if \count( \IPS\Output::i()->jsonLd )}}
{{foreach \IPS\Output::i()->jsonLd as $object}}
<script type='application/ld+json'>
{expression="json_encode( $object, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS )" raw="true"}	
</script>
{{endforeach}}
{{endif}}

 

Edited by deeverbs

3 минуты назад, ZIKURIK сказал:

он удалять должен в постах которые уже отправлены

блин, сорри.. 🙂 перезагрузил страницу, и всё ок стало)

Интересно скрипт работает, По факту его нет в публикации, но если начать редактировать он почему-то там висит?) Как это работает?))

3 минуты назад, deeverbs сказал:

Интересно скрипт работает, По факту его нет в публикации, но если начать редактировать он почему-то там висит?) Как это работает?))

Я посчитал что в редакторе он все же нужен, мало ли захочется ввести текст или еще что под видео. Скрипт циклом проверяет все сообщения на странице и удаляет этот nbsp если дальше нету других тегов.

1 минуту назад, ZIKURIK сказал:

Я посчитал что в редакторе он все же нужен, мало ли захочется ввести текст или еще что под видео. Скрипт циклом проверяет все сообщения на странице и удаляет этот nbsp если дальше нету других тегов.

Круто! Спасибо огромное!!! 🙂

А эта тема только для ютуба? Меня больше всего бесит пустые абзацы в конце поста, даже появилась дебильная ОКР-на привычка редактировать сообщения за пользователями)

Edited by betastarz

1 час назад, betastarz сказал:

А эта тема только для ютуба? Меня больше всего бесит пустые абзацы в конце поста, даже появилась дебильная ОКР-на привычка редактировать сообщения за пользователями)

Да, в скрипте есть функция

find('.ipsEmbeddedVideo')

Наверно было бы хорошо сделать универсальную?)

Edited by deeverbs

3 часа назад, betastarz сказал:

А эта тема только для ютуба? Меня больше всего бесит пустые абзацы в конце поста, даже появилась дебильная ОКР-на привычка редактировать сообщения за пользователями)

 

<script type='text/javascript'>
$('#ipsLayout_contentArea').find('div[data-role="commentContent"]').find('p:last').each( function () {
	if( $(this).next().length == 0 ){
		$(this).html(function (i, html) {
			return html.replace(/&nbsp;/g, '');
		});
	}
});
</script>

 

38 минут назад, ZIKURIK сказал:

 

<script type='text/javascript'>
$('#ipsLayout_contentArea').find('div[data-role="commentContent"]').find('p:last').each( function () {
	if( $(this).next().length == 0 ){
		$(this).html(function (i, html) {
			return html.replace(/&nbsp;/g, '');
		});
	}
});
</script>

 

Огонь! всё работает! Спасибо!

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Ответить в этой теме...

Последние посетители 0

  • No registered users viewing this page.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.