Старенький 😀, но довольно полезный скрипт для оформления и расширения стандартных возможностей комментариев на сайтах **uCoz**.

Скрипт добавляет к каждому комментарию дополнительные действия: **«Цитировать»**, **«Ответить»** и **«Жалоба»**, а для пользователей, имеющих права модератора, автоматически отображает дополнительные инструменты управления комментарием.

### Основные возможности

* **Цитирование выделенного текста** — позволяет выделить часть комментария и вставить её в форму ответа в формате
Код
`[quote=Имя]текст[/quote]`
.
* **Ответить** — выводит ссылку на стандартную страницу или форму ответа, используя системную переменную `$ANSWER_URL$`.
* **Жалоба** — отображается авторизованным пользователям для чужих комментариев.
* **IP-адрес** — модератор может открыть IP-адрес автора комментария.
* **Редактирование** — ссылка на редактирование комментария появляется только при наличии соответствующего пункта в панели модератора.
* **Удаление** — позволяет удалить комментарий с подтверждением действия.
* **Автоматическое отображение функций модератора** — ссылки «IP адрес», «Редактировать» и «Удалить» изначально скрыты и показываются JavaScript только в том случае, если соответствующие возможности присутствуют в `$MODER_PANEL$`.

### Как работает цитирование

При наведении на ссылку «Цитировать» функция `wQuote()` получает выделенный пользователем текст со страницы. После нажатия на ссылку `chitata()` добавляет его в поле сообщения:

Код
`[quote=Имя пользователя]Выделенный текст[/quote]`


Если пользователь ничего не выделил, вместо цитаты выводится предупреждение с предложением выделить текст.

### Удаление комментария

Функция `del_item(id)` сначала запрашивает подтверждение удаления. После подтверждения скрипт получает страницу сессии, извлекает значение `ssid` и отправляет POST-запрос через `_uPostForm`. После выполнения выводится уведомление:

**«Комментарий удален!»**

Такой подход использует внутренние механизмы uCoz и рассчитан на соответствующую структуру стандартного модуля комментариев.

### Управление панелью модератора

Интересная особенность этого старого решения заключается в том, что элементы управления модератора находятся в скрытом блоке `#wMODER$NUMBER$`.

JavaScript проверяет его содержимое:


  • * если найдено `IP address` — показывается ссылка на IP;
  • * если найдено `Редактировать` — появляется кнопка редактирования;
  • * если найдено `Удалить` — появляется кнопка удаления.


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

### Важный момент

Скрипт написан для старой структуры и API uCoz и использует такие функции, как `_uWnd`, `_uPostForm`, `del_item()` и системные переменные шаблона. Поэтому на современных шаблонах или после изменений в разметке uCoz отдельные части могут потребовать адаптации.

Несмотря на возраст, пример хорошо показывает, как средствами **uCoz + JavaScript + jQuery** можно было расширять стандартную систему комментариев без создания отдельного модуля.


  • **Назначение:** расширение стандартных комментариев uCoz.
  • **Технологии:** uCoz Template System, JavaScript, jQuery.
  • **Функции:** цитирование, ответ, жалоба, просмотр IP, редактирование и удаление комментариев.


Код
<?if($CUR_USER_ID$ > 0)?><a href="javascript:chitata('$USERNAME$',selection);" onmouseover="wQuote()">Цитировать</a><?endif?>   
<?if($ANSWER_URL$)?><a href="$ANSWER_URL$">Ответить</a><?endif?>   
<?if($CUR_USER_ID$ > 0)?><?if($IS_OWN$ = 0)?><a href="/index/14-1-0-1" style="color:red;">Жалоба</a><?endif?><?endif?>    
<?if($MODER_PANEL$)?>   <a href="javascript://" onclick="prompt('IP address','$IP_ADDRESS$');return false;" id="wIP$NUMBER$" style="display:none;">ip адрес</a>    
<a href="javascript://" rel="nofollow" onclick="new _uWnd('Ie',' ',-600,-200,{autosize:1,closeonesc:1,resize:0},{url:'/index/37-$ID$'});return false;" id="wEDIT$NUMBER$" style="display:none;">Редактировать</a>   
<a href="javascript://" rel="nofollow" onclick="del_item($ID$); return false;" id="wDELETE$NUMBER$" style="display:none;">Удалить</a>   
<div style="display:none;" id="wMODER$NUMBER$">$MODER_PANEL$</div>    
<?endif?>    

<script>    
if ($('#wMODER$NUMBER$').text().indexOf('IP address') != -1) {
  $('#wIP$NUMBER$').show();
}
if ($('#wMODER$NUMBER$').text().indexOf('Редактировать') != -1) {
  $('#wEDIT$NUMBER$').show();
}
if ($('#wMODER$NUMBER$').text().indexOf('Удалить') != -1) {
  $('#wDELETE$NUMBER$').show();
}
function del_item(id)
  {
  if (confirm('Вы подтверждаете удаление?')) {
  $.get('/index/14-0-0-1', function (ssid)
  {
  _uPostForm('', {
  type: 'POST',
  data: {
  a: '38',
  s: id,
  ssid: $('input[name="ssid"]', ssid).val()
  },
  url: '/index/'
  });
  _uWnd.alert('<b style="color:green">Комментарий удален!</b>', '', {
  w: 222,
  h: 77,
  tm: 5555
  });
  });
  }
  }
function chitata(qname, text)
  {
  if (text != '') {
  qname = qname.replace(/[\[\]]/g, '|');
  parent.window.document.getElementById('message').focus();
  parent.window.document.getElementById('message').value = parent.window.document.getElementById('message').value + ('[quote=' + qname.replace(/[\[\]]/g, '|') + ']' + text + '[/quote]\n');
  } else {
  _uWnd.alert('<b style="color:#c82626;">Выделите текст для цитирования</b>', '', {
  w: 222,
  h: 77,
  tm: 5555
  });
  }
  }
function paste(text, flag)
  {
  if (document.selection && flag) {
  document.addform.message.focus();
  document.addform.document.selection.createRange().text = text;
  } else
  document.addform.message.value = document.addform.message.value + text;
  }
function wQuote()
  {
  if (window.getSelection) {
  selection = window.getSelection().toString();
  } else if (document.getSelection) {
  selection = document.getSelection();
  } else {
  selection = document.selection.createRange().text;
  }
  }
</script>