Цитата выделенного через всплывающее окно

Если у вас не установлен Quick Reply (Быстрый ответ), устанавливаем.

Скачиваем архив, распаковываем и заливаем себе на форум (Архив заменён - 01.04.2015 // CabinetAdmina)

Prosilver

Идём в overall_header.html, перед закрывающим тегом </head> ставим:

Код: Выделить всё

<script type="text/javascript" src="путь до файла/jquery-1.3.2.js"></script>
<script type="text/javascript" src="путь до файла/jquery.timers.js"></script>
Пути до скрипта указываем свои.
Если у вас уже подключена библиотека jQuery, то:

Код: Выделить всё

<script type="text/javascript" src="путь до файла/jquery-1.3.2.js"></script>
ставить не нужно.

Идём в quick_reply.html, в самом начале добавляем:

Код: Выделить всё

<script type="text/javascript">
// <![CDATA[
$(document).ready(function(){
   $("div.postbody").mouseup(function(e){
      pt = $(this).parents("div.post");
      if (window.getSelection)
      {
         theSelection = window.getSelection().toString();
      }
      else if (document.getSelection)
      {
         theSelection = document.getSelection();
      }
         else if (document.selection)
      {
         theSelection = document.selection.createRange().text;
      }   
      if (theSelection)
      {
         $("#addQuote").remove();
         $("body").append('<div id="addQuote" style="left: '+(e.pageX+15)+'px; top: '+(e.pageY+15)+'px;">Цитировать</div>');
         $("#addQuote").click(function () {
            $(this).hide();   
            username = pt.find("a[class='postauthor']:first").text();
            insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
         });
         $("#addQuote").oneTime(3000, function() {
            if ($(this).is(':visible')) {$(this).animate({height:0 , opacity:0}, 150)};
         });
      }
   });
});
// ]]>
</script>
Идём во viewtopic_body.html находим:

Код: Выделить всё

<!-- IF QUICK_REPLY --><a href="#postform" onclick="insert_text('[b]{postrow.POSTER_QUOTE}[/b]\r\n'); return false;"<!-- IF postrow.POST_AUTHOR_COLOUR --> style="color: {postrow.POST_AUTHOR_COLOUR}" <!-- ENDIF -->>{postrow.POST_AUTHOR}</a><!-- ELSE --><!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF --><!-- ENDIF -->
Заменяем на:

Код: Выделить всё

<!-- IF QUICK_REPLY --><a class="postauthor" href="#postform" onclick="insert_text('[b]{postrow.POSTER_QUOTE}[/b]\r\n'); return false;"<!-- IF postrow.POST_AUTHOR_COLOUR --> style="color: {postrow.POST_AUTHOR_COLOUR}" <!-- ENDIF -->>{postrow.POST_AUTHOR}</a><!-- ELSE --><!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF --><!-- ENDIF -->
Идём в тему вашего стиля. Находим:

Код: Выделить всё

/* Post body styles
----------------------------------------*/
Добавляем после:

Код: Выделить всё

#addQuote {
	position: absolute;
	z-index:100; 
	border: 1px solid #8FBC8F; 
	padding: 3px; 
	background: #E0FFE0; 
	color: #008000;
	cursor: pointer;
	font-size: 11px;
}


Subsilver2

Идём в overall_header.html, перед закрывающим тегом </head> ставим:

Код: Выделить всё

<script type="text/javascript" src="путь до файла/jquery-1.3.2.js"></script>
<script type="text/javascript" src="путь до файла/jquery.timers.js"></script>
Пути до скрипта указываем свои.
Если у вас уже подключена библиотека jQuery, то:

Код: Выделить всё

<script type="text/javascript" src="путь до файла/jquery-1.3.2.js"></script>
ставить не нужно.

Идём в quick_reply.html, в самом начале добавляем:

Код: Выделить всё

<script type="text/javascript">
// <![CDATA[
$(document).ready(function(){
   $("div.postbody").mouseup(function(e){
      pt = $(this).parents("table.tablebg");
      if (window.getSelection)
      {
         theSelection = window.getSelection().toString();
      }
      else if (document.getSelection)
      {
         theSelection = document.getSelection();
      }
         else if (document.selection)
      {
         theSelection = document.selection.createRange().text;
      }   
      if (theSelection)
      {
         $("#addQuote").remove();
         $("body").append('<div id="addQuote" style="left: '+(e.pageX+15)+'px; top: '+(e.pageY+15)+'px;">Цитата</div>');
         $("#addQuote").click(function () {
            $(this).hide();   
            username = pt.find("b[class='postauthor']:first").text();
            insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
         });
         $("#addQuote").oneTime(3000, function() {
            if ($(this).is(':visible')) {$(this).animate({height:0 , opacity:0}, 150)};
         });
      }
   });
});
// ]]>
</script>


Идём в тему вашего стиля. Находим:

Код: Выделить всё

.postbody {
	font-size: 1.3em;
	line-height: 1.4em;
	font-family: "Lucida Grande", "Trebuchet MS", Helvetica, Arial, sans-serif;
}
Добавляем перед:

Код: Выделить всё

#addQuote {
	position: absolute;
	z-index:100; 
	border: 1px solid #8FBC8F; 
	padding: 3px; 
	background: #E0FFE0; 
	color: #008000;
	cursor: pointer;
	font-size: 11px;
}
Стиль всплывающей подсказки можно сделать любой. Под свой стиль.
Последний раз редактировалось CabinetAdmin 08 авг 2012, 20:28, всего редактировалось 3 раза.
Комментарии: 70

Степ 22 окт 2014, 14:12 Сообщение

BOJIK, сделал как у вас. Все равно тоже самое. В стиле конечно внес изменения. Кэш чистый как слеза младенца.


Изображение
Как будто что то заставляет ник вставляться в середине, да еще и через строчку.

А если нажать с таким текстом "Отправить", то кривая цитата получается. :mad:
  • 0
Если хотите узнать глубину души человека, то плюньте ему в душу и считайте до тех пор,
пока не получите по морде.

CabinetAdmin 22 окт 2014, 14:30 Сообщение

Степ
Напомните, как называется ваш стиль? Попробую.
Может какие особенности стиля, может конфликты с другими скриптами :unknown
Попробуйте на время по удалять некоторые скрипты и проверить.
И удалите совсем:

Код: Выделить всё

<script type="text/javascript" src="http://blife.gtaserv.ru/storage/blife_gtaserv_ru/images/jquery-1.3.2.js"></script>
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

Степ 22 окт 2014, 14:43 Сообщение

CabinetAdmin, стиль X-Static. Сынок сабсильвера.
Эту строчку удалил уже.
У меня скрипт стоит, не помню как называется, когда при копировании с моего фора, источник сам пристраивается в конец текста. Я пробовал его убрать - но все равно тоже самое.
  • 0
Если хотите узнать глубину души человека, то плюньте ему в душу и считайте до тех пор,
пока не получите по морде.

CabinetAdmin 22 окт 2014, 17:35 Сообщение

Степ
Дело в стиле. Чуть чуть структура вывода ника разная.

В скрипте найдите:

Код: Выделить всё

username = pt.find("b[class='postauthor']:first").text();
и поменяйте на:

Код: Выделить всё

username = pt.find("b[class='postauthor'] a:first").text();
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

Степ 22 окт 2014, 17:43 Сообщение

CabinetAdmin, спасибо. Заработало. Если не трудно, объясните, как одна буковка такую проблему нарисовала?
  • 0
Если хотите узнать глубину души человека, то плюньте ему в душу и считайте до тех пор,
пока не получите по морде.

CabinetAdmin 22 окт 2014, 19:11 Сообщение

Попробую объяснить.
В чистом subsilver2 код вывода ника выглядит следующим образом:

Код: Выделить всё

				<b class="postauthor"<!-- IF postrow.POST_AUTHOR_COLOUR --> style="color: {postrow.POST_AUTHOR_COLOUR}"<!-- ENDIF -->>{postrow.POST_AUTHOR}</b>
Ник не содержит ссылки. Просто имя в контейнере <b> с классом postauthor.
В вашем стиле:

Код: Выделить всё

				<b class="postauthor">
				
				     <!-- IF not postrow.U_POST_AUTHOR -->
					    {postrow.POST_AUTHOR}
					 <!-- ELSE -->
					    <a  href="{postrow.U_POST_AUTHOR}" 
					 <!-- IF postrow.POST_AUTHOR_COLOUR -->
    					 style="color: {postrow.POST_AUTHOR_COLOUR};vertical-align:top" 
					 <!-- ENDIF -->>{postrow.POST_AUTHOR}</a>
			         <!-- ENDIF --></b>
Имя, помимо тега <b>, имеет ссылку <a href="{postrow.U_POST_AUTHOR}". Это по типу просильвера. Там ник является ссылкой на профиль.

А скрипт явно указывает на тег <b>:

Код: Выделить всё

username = pt.find("b[class='postauthor']:first").text();
не учитывая, что внутри него находится ссылка. Добавляем в пути скрипта тег a и скрипт понимает где именно содержится имя.

зы. Скорее всего, такую же процедуру надо делать тем, у кого ник вставляется в форму ответа при клике. Модификация быстрого ответа.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

Степ 25 окт 2014, 08:14 Сообщение

CabinetAdmin, и еще маленький вопросик. А можно сделать так, что бы при нажатии кнопки во всплывашке, экран "съезжал" вниз к рамке быстрого ответа? *а так же при нажатии кнопок "Ответить", "Цитировать" и "быстрая цитата"... :pardon:
  • 0
Если хотите узнать глубину души человека, то плюньте ему в душу и считайте до тех пор,
пока не получите по морде.

CabinetAdmin 25 окт 2014, 12:14 Сообщение

Степ » Сегодня, 11:14 писал(а):что бы при нажатии кнопки во всплывашке, экран "съезжал" вниз к рамке быстрого ответа?
В скрипте найти $(this).hide(); и добавить после, с новой строки:

Код: Выделить всё

		var target_top = $("#postform").offset().top;
		$('html, body').animate({scrollTop:target_top}, 500);
Степ » Сегодня, 11:14 писал(а):а так же при нажатии кнопок
Там только для быстрой цитаты. Ведь при клике по ответить или цитата осуществляется переход на страницу постинга.

Для быстрой цитаты, найти:

Код: Выделить всё

<a href="#postform" onclick="addquote({postrow.POST_ID},'{postrow.POSTER_QUOTE}'); insert_text('\r\n'); return false;" title="{L_QUOTE_TEXT}">{L_QUOTE}</a>
и удалить отсюда return false;
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

eska 15 ноя 2014, 22:01 Сообщение

К ca_forum'у можно прикрутить?
Просто quick_reply у меня нету, а вот quickreply_editor - это одно и тоже?
И я поглядел, библиотека у меня вроде прикручена, так же как и быстрый ответ?
  • 0

CabinetAdmin 15 ноя 2014, 22:28 Сообщение

quickreply_editor, это родной быстрый ответ, обрезанный.
Можно попробовать прикрутить. Я не пробовал, думаю не должно быть проблем.
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

eska 15 ноя 2014, 22:30 Сообщение

CabinetAdmin » менее минуты назад писал(а):Можно попробовать прикрутить.
То есть чистый шаблон

Код: Выделить всё

quick_reply
добавить?
  • 0

eska 15 ноя 2014, 22:35 Сообщение

В стииле bo2soft он у меня такой:

Код: Выделить всё

[spoiler=]<script type="text/javascript">
// <![CDATA[
$(document).ready(function(){
       $("div.postbody").mouseup(function(e){
          pt = $(this).parents("table.tablebg");
          if (window.getSelection)
          {
             theSelection = window.getSelection().toString();
          }
          else if (document.getSelection)
          {
             theSelection = document.getSelection();
          }
             else if (document.selection)
          {
             theSelection = document.selection.createRange().text;
          }   
          if (theSelection)
          {
             $("#addQuote").remove();
             $("body").append('<div id="addQuote" style="left: '+(e.pageX+15)+'px; top: '+(e.pageY+15)+'px;">Цитата</div>');
             $("#addQuote").click(function () {
                $(this).hide();   
                username = pt.find("b[class='postauthor']:first").text();
                insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
             });
             $("#addQuote").oneTime(3000, function() {
                if ($(this).is(':visible')) {$(this).animate({height:0 , opacity:0}, 150)};
             });
          }
       });
});
// ]]>
</script>

<form action="{S_POST_ACTION}" method="post" id="postform" name="postform"{S_FORM_ENCTYPE}>

<table class="tablebg" width="100%" cellspacing="1">
<tr>
	<th colspan="2"><b>{L_QUICK_REPLY}</b></th>
</tr>

<!-- IF ERROR -->
	<tr>
		<td class="row2" colspan="2" align="center"><span class="genmed error">{ERROR}</span></td>
	</tr>
<!-- ENDIF -->

<!-- IF S_SHOW_TOPIC_ICONS -->
	<tr>
		<td class="row1"><b class="genmed">{L_ICON}:</b></td>
		<td class="row2">
			<table width="100%" cellspacing="0" cellpadding="0" border="0">
			<tr>
				<td><input type="radio" class="radio" name="icon" value="0"{S_NO_ICON_CHECKED} /><span class="genmed">{L_NO_TOPIC_ICON}</span> <!-- BEGIN topic_icon --><span style="white-space: nowrap;"><input type="radio" class="radio" name="icon" value="{topic_icon.ICON_ID}"{topic_icon.S_ICON_CHECKED} /><img src="{topic_icon.ICON_IMG}" width="{topic_icon.ICON_WIDTH}" height="{topic_icon.ICON_HEIGHT}" alt="" title="" hspace="2" vspace="2" /></span> <!-- END topic_icon --></td>
			</tr>
			</table>
		</td>
	</tr>
<!-- ENDIF -->

<!-- IF S_DISPLAY_USERNAME -->
	<tr>
		<td class="row1"><b class="genmed">{L_USERNAME}:</b></td>
		<td class="row2"><input class="post" type="text" tabindex="1" name="username" size="25" value="{USERNAME}" /></td>
	</tr>
<!-- ENDIF -->

<tr>
	<td class="row1" width="22%"><b class="genmed">{L_SUBJECT}:</b></td>
	<td class="row2" width="78%"><input class="post" style="width:450px" type="text" name="subject" size="45" maxlength="<!-- IF S_NEW_MESSAGE -->60<!-- ELSE -->64<!-- ENDIF -->" tabindex="2" value="{SUBJECT}" /></td>
</tr>
<tr>
	<td class="row1" valign="top"><b class="genmed">{L_MESSAGE_BODY}:</b><br /><span class="gensmall">{L_MESSAGE_BODY_EXPLAIN}&nbsp;</span><br /><br />
	<!-- IF S_SMILIES_ALLOWED -->
		<table width="100%" cellspacing="5" cellpadding="0" border="0" align="center">
		<tr>
			<td class="gensmall" align="center"><b>{L_SMILIES}</b></td>
		</tr>
		<tr>
			<td align="center">
				<!-- BEGIN smiley -->
					<a href="#" onclick="insert_text('{smiley.A_SMILEY_CODE}', true); return false;" style="line-height: 20px;"><img src="{smiley.SMILEY_IMG}" width="{smiley.SMILEY_WIDTH}" height="{smiley.SMILEY_HEIGHT}" alt="{smiley.SMILEY_CODE}" title="{smiley.SMILEY_DESC}" hspace="2" vspace="2" /></a>
				<!-- END smiley -->
			</td>
		</tr>

		<!-- IF S_SHOW_SMILEY_LINK -->
			<tr>
				<td align="center"><a class="nav" href="{U_MORE_SMILIES}" onclick="popup(this.href, 300, 350, '_phpbbsmilies'); return false;">{L_MORE_SMILIES}</a></td>
			</tr>
		<!-- ENDIF -->

		</table>
	<!-- ENDIF -->
	</td>
	<td class="row2" valign="top">
		<script type="text/javascript">
		// <![CDATA[
			var form_name = 'postform';
			var text_name = 'message';
		// ]]>
		</script>

		<table width="100%" cellspacing="0" cellpadding="0" border="0">
		<!-- INCLUDE posting_buttons.html -->
		<tr>
			<td valign="top" style="width: 100%;"><textarea name="message" rows="15" cols="76" tabindex="3" onselect="storeCaret(this);" onclick="storeCaret(this);" onkeyup="storeCaret(this);" style="width: 98%;">{MESSAGE}</textarea></td>
			<!-- IF S_BBCODE_ALLOWED -->
			<td width="80" align="center" valign="top">
				<script type="text/javascript">
				// <![CDATA[
					colorPalette('v', 7, 6)
				// ]]>
				</script>
			</td>
			<!-- ENDIF -->
	 	</tr>
		</table>
	</td>
</tr>

<tr  style="display: {EXTRA_OPTIONS_DISPLAY};">
	<td class="row1" valign="top"><b class="genmed">{L_OPTIONS}:</b><br />
		<table cellspacing="2" cellpadding="0" border="0">
		<tr>
			<td class="gensmall">{BBCODE_STATUS}</td>
		</tr>
		<!-- IF S_BBCODE_ALLOWED -->
		<tr>
			<td class="gensmall">{IMG_STATUS}</td>
		</tr>
		<tr>
			<td class="gensmall">{FLASH_STATUS}</td>
		</tr>
		<tr>
			<td class="gensmall">{URL_STATUS}</td>
		</tr>
		<tr>
			<td class="gensmall">{SMILIES_STATUS}</td>
		</tr>
		<!-- ENDIF -->
		</table>
	</td>
	<td class="row2">
		<table cellpadding="1">
		<!-- IF S_BBCODE_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="disable_bbcode"{S_BBCODE_CHECKED} /></td>
				<td class="gen">{L_DISABLE_BBCODE}</td>
			</tr>
		<!-- ENDIF -->

		<!-- IF S_SMILIES_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="disable_smilies"{S_SMILIES_CHECKED} /></td>
				<td class="gen">{L_DISABLE_SMILIES}</td>
			</tr>
		<!-- ENDIF -->

		<!-- IF S_LINKS_ALLOWED -->
		<tr>
			<td><input type="checkbox" class="radio" name="disable_magic_url"{S_MAGIC_URL_CHECKED} /></td>
			<td class="gen">{L_DISABLE_MAGIC_URL}</td>
		</tr>
		<!-- ENDIF -->

		<!-- IF S_SIG_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="attach_sig"{S_SIGNATURE_CHECKED} /></td>
				<td class="gen">{L_ATTACH_SIG}</td>
			</tr>
		<!-- ENDIF -->

		<!-- IF S_NOTIFY_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="notify"{S_NOTIFY_CHECKED} /></td>
				<td class="gen">{L_NOTIFY_REPLY}</td>
			</tr>
		<!-- ENDIF -->

		<!-- IF S_LOCK_TOPIC_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="lock_topic"{S_LOCK_TOPIC_CHECKED} /></td>
				<td class="gen">{L_LOCK_TOPIC}</td>
			</tr>
		<!-- ENDIF -->

		<!-- IF S_LOCK_POST_ALLOWED -->
			<tr>
				<td><input type="checkbox" class="radio" name="lock_post"{S_LOCK_POST_CHECKED} /></td>
				<td class="gen">{L_LOCK_POST} [{L_LOCK_POST_EXPLAIN}]</td>
			</tr>
		<!-- ENDIF -->
		</table>
	</td>
</tr>

<!-- IF CAPTCHA_TEMPLATE and S_CONFIRM_CODE -->
<!-- INCLUDE {CAPTCHA_TEMPLATE} -->
<!-- ENDIF -->

<!-- IF S_SHOW_ATTACH_BOX -->
	<tr>
		<td class="cat" colspan="2" align="center">
			<input class="btnlite" type="submit" tabindex="5" name="preview" value="{L_PREVIEW}" />
			&nbsp; <input class="btnmain" type="submit" accesskey="s" tabindex="6" name="post" value="{L_SUBMIT}" />
		</td>
	</tr>

<!-- INCLUDE posting_attach_body.html -->
<!-- ENDIF -->

<tr>
	<td class="cat" colspan="2" align="center">{S_HIDDEN_FIELDS}
		<input class="btnlite" type="submit" tabindex="10" name="preview" value="{L_PREVIEW}" />
		&nbsp; <input class="btnmain" type="submit" accesskey="s" tabindex="11" name="post" value="{L_SUBMIT}" />
	</td>
</tr>
</table>

<br clear="all" />
{S_FORM_TOKEN}
</form>[/spoiler]
  • 0

CabinetAdmin 16 ноя 2014, 07:59 Сообщение

Ну если мод быстрого ответа уже стоит, то должно работать. Добавить скрипт не в quick_reply, а в quickreply_editor:

Код: Выделить всё

<script type="text/javascript">
// <![CDATA[
$(document).ready(function(){
	$(".postbody").mouseup(function(e){
		pt = $(this).parents(".post");
		if (window.getSelection)
		{
			theSelection = window.getSelection().toString();
		}
		else if (document.getSelection)
		{
			theSelection = document.getSelection();
		}
		else if (document.selection)
		{
			theSelection = document.selection.createRange().text;
		}   
		if (theSelection)
		{
			$("#addQuote").remove();
			$("body").append('<div id="addQuote" style="left: '+(e.pageX+15)+'px; top: '+(e.pageY+15)+'px;">Цитировать</div>');
			$("#addQuote").click(function () {
				$(this).hide();   
				username = pt.find("p[class='author'] a").text();
				insert_text('[quote="' + username + '"]' + theSelection + '[/quote]');
			});
			$("#addQuote").oneTime(3000, function() {
				if ($(this).is(':visible')) {$(this).animate({height:0, opacity:0, zIndex:-1}, 150)};
			});
		}
	});
});
// ]]>
</script>
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!

eska 16 ноя 2014, 11:11 Сообщение

Скрипт я вставлю, иидём дальше!
Во

Код: Выделить всё

viewtopic_body.html
У меня этого нету:

Код: Выделить всё

<!-- IF QUICK_REPLY --><a href="#postform" onclick="insert_text('[b]{postrow.POSTER_QUOTE}[/b]\r\n'); return false;"<!-- IF postrow.POST_AUTHOR_COLOUR --> style="color: {postrow.POST_AUTHOR_COLOUR}" <!-- ENDIF -->>{postrow.POST_AUTHOR}</a><!-- ELSE --><!-- IF not postrow.U_POST_AUTHOR --><strong>{postrow.POST_AUTHOR_FULL}</strong><!-- ELSE -->{postrow.POST_AUTHOR_FULL}<!-- ENDIF --><!-- ENDIF -->
Но есть это:

Код: Выделить всё

<!-- IF QUICK_REPLY --><a href="#postform" onclick="insert_text('[b]{postrow.POSTER_QUOTE}[/b], '); return false;" title="Обратиться по имени">{L_POST_REPLY}</a><!-- ELSE -->{L_POST_REPLY}<!-- ENDIF -->
  • 0

CabinetAdmin 16 ноя 2014, 13:23 Сообщение

eska » Сегодня, 13:11 писал(а):иидём дальше!
Не, не надо. Просто поставить скрипт и посмотреть.
Просто я в скрипте указал чуть другой путь:

Код: Выделить всё

username = pt.find("p[class='author'] a").text();
  • 0
Хочешь поблагодарить? Есть способы: заходи на форум, создавай темы, делись опытом и наработками, общайся!