avatar
+2.22
5.389
На стену все пишут? В чем смысл, типа чат?

у меня не нажимаются картинки. Я так понял при нажатии на них должен открываться прсомотр фотографий? Firefox.
А что будет с медленными подключениями, с мобильных устройств и т.д., что будет если сокет по какой-то причине закроется — соединение переустановится со стороны клиента, или вылезет ошибка?
inliquid, обновил плагины, подредактировал немного css, сейчас окошки всплывающие открываются без смещения, ну по-крайней мере, у меня так. Можешь на демо взглянуть!

Так проверять нужно на выключенном nicescroll… отключи посмотрим на демо.

Пока не было возможности протестировать, внезапно навалилось куча дел, возможно через пару дней смогу пройтись посмотреть. Пока версию 1.0.3 даже не ставил по этой причине.
Это к другой CMS плагин, я добавил потому что подумал, что часть кода можно было бы переиспользовать, например regexp`ы, чтоб не изобретать велосипед… Или вам именно к esoTalk нужен?
Какой редктор? В последних вресиях tinymce автоматом оборачивает в тег p.

Если в markitup, подредактируй там в 2х местах (для топиков и комментариев)

onShiftEnter:   {keepDefault: false, replaceWith: '<br />\n'},
        onCtrlEnter:    {keepDefault: false, openWith: '\n<p>', closeWith: '</p>'},

так, чтобы по shift-enter вставлялось (ctrl-enter сейчас вызывает отправку комментария, или топика, поэтому не сработает)

Файл

\common\templates\frontend\libs\js\engine\settings.js
Уже говорил, нужно настроить чтобы только регистрация проверялась. По-прежнему есть вероятность ложноположительных решений, но по крайней мере существующие юзеры не будут сталкиваться с проблемами. А если срабавтывает при том что IP нет в базе, то это конечно баг — надо постить в гитхаб.
Последняя версия альто с гитхаба. После изменения фотографии, в браузере FF интерфейс «висит». Но не полностью (хотя ощущение что полностью) — по сути отваливается прокрутка, на колесико мыши не реагирует, справа полосы прокрутки тоже нет, страницу можно листать только клавиатурой. Никаких дополнений не установлено, версия FF последняя. На Chrome такого нет.

В start-kit все работает нормально.

И еще — до перезагрузки страницы изображение для фото профиля неестественно искажено.

ЗЫ. Nicescroll отключен навсегда. Skrollr — работает.
Не понятно.
Так это все для ЛС?
ок подождем
6. добавить функционал Main Preview. т.к. они конфликтуют.
Это зачем? Есть же альтовский topicintro??

7. ввести настройку — до какого размера ужимать оригинальное изображение, т.к. плагин его не использует потом ни где… Или вообще совместить со штатным загрузчиком, что бы фото ложились в ту же систему папок. Т.е. любой админ оценивая возможности своего хостинга сможет установить оптимальное значение.
Эээ и это в конфиге задается. В при выводе из шаблона движок нарезает любое желаемое от исходного.

8. Будет очень круто если в конфиге можно будет задавать параметры альта и титл по отдельности с — вставляя не только заголовок топика, но и название сайта например и т.п., а так же свои фразы. — СЕОшники вроде рекомендуют их делать разными…
Ничо не понял…

9. ввести настройки выравнивания и задавать размер стилями.
Это тоже что редактор tinimce делает — лево/право/центр? Парамтры для тега img задаются, внутри самого тега?
Ну так описать проблем нет. Мне кажется тут излишний акцент на аббревиатуре ТЗ, по сути то что уже описано — «такой же фунционал для комментариев» и есть ТЗ, не надо усложнять. Только со вставкой уже загруженных можно подумать чуть детальнее.

И еще такой вопрос, этот доп. функционал нетланк тоже готов бесплатно делать, или нет? Просто если это все бесплатно то каких-то особых требований — «должна быть такая вот зеленая прозрачная перпендикулярная кнопочка а при нажатии, скажут розовые пони, эскиз пони прилагается...» — не прокатит =) И вообще может его сюда в обсуждение пригласить???
Не поможет?
stackoverflow.com/questions/14536194/sphinx-restart-search-demon-issue-for-reindexing-delta-indexes

Что этот сфинкс-то дает в итоге? Многие пользователи вообще поиск-то нажимают?
Ух-ты вот это интересно, а пощупать можно? Насчет ТЗ — смысл? если как вы говорите требования все какие надо в плагине уже реализованы, и нетланк просто портирует свой плагин без коммерческой заинтересованности? Или тут подразумевается некий второй шаг?
Вроде был плагин для яндекс метрики.
Решение такое
\common\templates\frontend\libs\js\engine\settings.js

Убрать из настроек

plugins: "advlist autolink autosave link lists media pagebreak autoresize table code altoimage",

плагин 'autoresize'

Там в двух местах. Для топиков и комментариев.
Да умерла походу тема.
Сделать так чтобы было по-человечески можно, в частности на сайте tinymce ничего в окне не уезжает. Как-то это задается настройками. Только ответа никто не знает.
Пример реализации: yogatalk.ru/forum/223-vstavka-video-i-ne-tolko

Вот исходный код плагина, если вдруг интересно:
(может кто-то портирует на Альто?)

<?php

if (!defined("IN_ESOTALK")) exit;

 // An implementation of the string filter interface for plain text strings
ET::$pluginInfo["AutoLink"] = array(
	"name" => "AutoLink",
	"description" => "When you post an URL, AutoLinksLight automatically embeds videos from Youtube, Dailymotion, TwitchTV, RuTube, etc...",
	"version" => "1.2.1",
	"author" => "Ramouch0-Laticauda",
	"authorEmail" => "support@esotalk.org",
	"authorURL" => "http://esotalk.org",
	"license" => "GPLv2"
);

class ETPlugin_AutoLink extends ETPlugin {

	// ACCEPTED PROTOTYPES
	//
	var $accepted_protocols = array(
	  'http://', 'https://', 'ftp://', 'ftps://', 'mailto:', 'telnet://',
	  'news://', 'nntp://', 'nntps://', 'feed://', 'gopher://', 'sftp://' );

	//
	// AUTO-EMBED IMAGE FORMATS
	//
	var $accepted_image_formats = array(
	  'gif', 'jpg', 'jpeg', 'tif', 'tiff', 'bmp', 'png', 'svg', 'ico' );


public function handler_format_format($sender)
{
	// quick check to rule out complete wastes of time
	if( strpos( $sender->content, '://' ) !== false || strpos($sender->content, 'mailto:' ) !== false )
	{
	  $sender->content = preg_replace_callback( '/(?<=^|\r\n|\n| |\t|
|<br\/>|<br \/>)!?([a-z]+:(?:\/\/)?)([^ <>"\r\n\?]+)(\?[^ <>"\r\n]+)?/i', array( &$this, 'autoLink' ), $sender->content );
	 }
}

public function autoLink( $link = array())
{
  // $link[0] = the complete URL
  // $link[1] = link prefix, lowercase (e.g., 'http://')
  // $link[2] = URL up to, but not including, the ?
  // $link[3] = URL params, including initial ?

  // sanitise input
  $link[1] = strtolower( $link[1] );
  if( !isset( $link[3] ) ) $link[3] = '';

  // check protocol is allowed
  if( !in_array( $link[1], $this->accepted_protocols ) ) return $link[0];

  // check for forced-linking and strip prefix
  $forcelink = substr( $link[0], 0, 1 ) == '!';
  if( $forcelink ) $link[0] = substr( $link[0], 1 );

  $params = array();
  $matches = array();

  
  if( !$forcelink && ( $link[1] == 'http://' || $link[1] == 'https://' ) )
  {
	$width = 640;
	$height = 380;
	// Webm
	if( strtolower( substr( $link[2], -5 ) ) == '.webm')
	return '<video width="'.$width.'" height="'.$height.'" type="video/webm" controls="controls"><source src="'.$link[0].'" ></source></video>';
	// Mp4
	if( strtolower( substr( $link[2], -4 ) ) == '.mp4')
	return '<video width="'.$width.'" height="'.$height.'" type="video/webm" controls="controls"><source src="'.$link[0].'" ></source></video>';
	// Mp3
	else if( strtolower( substr( $link[2], -4 ) ) == '.mp3' )
	return '<audio controls="controls"><source src="'.$link[0].'"></audio>';
	// images
	elseif( preg_match( '/\.([a-z]{1,5})$/i', $link[2], $matches ) && in_array( strtolower( $matches[1] ), $this->accepted_image_formats ) )
	return '<img class="auto-embedded" src="'.$link[1].$link[2].$link[3].'" alt="-image-" title="'.$link[1].$link[2].$link[3].'" />';
	// youtube
	if( strcasecmp( 'www.youtube.com/watch', $link[2] ) == 0 && $this->params( $params, $link[3], 'v' ) )
	  return '<iframe width="'.$width.'" height="'.$height.'"  src="'.$link[1].'www.youtube.com/embed/'.$params['v'].'" frameborder="0" allowfullscreen></iframe>';
	else if( preg_match( '/^(?:www\.)?youtu\.be\/([^\/]+)/i', $link[2], $matches ))
	  return '<iframe width="'.$width.'" height="'.$height.'"  src="'.$link[1].'www.youtube.com/embed/'.$matches[1].'" frameborder="0" allowfullscreen></iframe>';
	// Vimeo
	else if( preg_match( '/vimeo\.com\/(\w+\s*\/?)*([0-9]+)*$/i', $link[2], $matches ) )
	return '<iframe src="//player.vimeo.com/video/'.$matches[1].'?color=ffffff" width="'.$width.'" height="'.$height.'" frameborder="0" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>';
	// Dailymotion
	else if( preg_match( '/^www\.dailymotion\.com\/(?:[a-z]+\/)?video\/([^\/]+)/i', $link[2], $matches ) )
	  return '<iframe frameborder="0" width="'.$width.'" height="'.$height.'" src="http://www.dailymotion.com/embed/video/'.$matches[1].'"></iframe>';
	// LiveLeak.com
	else if( strcasecmp( 'www.liveleak.com/view', $link[2] ) == 0 && $this->params( $params, $link[3], 'i' ) )
	  return '<embed class="video" src="http://www.liveleak.com/e/'.$params['i'].'" type="application/x-shockwave-flash" wmode="transparent"  width="'.$width.'" height="'.$height.'" align="top"></embed>';
	// Twitch TV
	elseif ( preg_match('/twitch\.tv\/(\w+\s*\/?)*([0-9]+)*$/i',$link[2], $matches))
		return '<iframe src="http://www.twitch.tv/'.$matches[1].'/embed" frameborder="0" scrolling="no" height="'.$height.'" width="'.$width.'"></iframe>';
	// Vine (format like this : https://vine.co/v/ME70KX9A2X7/)
	elseif ( preg_match('/vine\.co\/(\w+\s*\/?)*([0-9]+)*$/i',$link[2], $matches))
		return '<iframe class="vine-embed" src="https://vine.co/v/'.$matches[1].'/embed/simple" width="480" height="480" frameborder="0"></iframe><script async src="//platform.vine.co/static/scripts/embed.js" charset="utf-8"></script>';
	// Metacafe
		else if( preg_match( '/^www\.metacafe\.com\/watch\/([0-9]+)\/([^\/]+)\/?$/', $link[2], $matches ) )
		return '<iframe src="http://www.metacafe.com/embed/'.$matches[1].'" width="'.$width.'" height="'.$height.'" allowFullScreen frameborder=0></iframe>';
	// RuTube
	else if( preg_match( '/rutube\.ru\/video\/(\w+\s*\/?)*([0-9]+)*$/i', $link[2], $matches ) )
		return '<iframe src="//rutube.ru/play/embed/'.$matches[1].'" width="'.$width.'" height="'.$height.'" allowFullScreen frameborder=0></iframe>';
  }


  // default to linkifying
	return '<a href="'.$link[0].'" rel="nofollow external">'.$link[0].'</a>';

}

/*Reads query parameters
params : result array as key => value
string : query string
required : array of required parameters key
@return true if required parameters are present.
*/
function params( &$params, $string, $required )
{
  $string = html_entity_decode($string);
  if( !is_array( $required ) ) $required = array( $required );
  if( substr( $string, 0, 1 ) == '?' ) $string = substr( $string, 1 );
  $params = array();
  $bits = split( '&', $string );
  foreach( $bits as $bit ) {
	$pair = split( '=', $bit, 2 );
	if( in_array( $pair[0], $required ) ) $params[ $pair[0] ] = $pair[1];
  }
  return count( $required ) == count( $params );
}

}
?>
Самый правильный путь — делать проверку только при регистрации. Держать IP в черном списке не больше суток (или его вообще отключить). И только в крайнем случае включать проверку при логине.