Проблема с расширением. Не выделяется код по клику КОД: [ВЫДЕЛИТЬ ВСЁ]

Board index phpBBex 2.x Поддержка

Description: У вас проблемы с phpBBex 2.x и вам необходима помощь? Спрашивайте здесь!
Forum rules: Одна тема — один вопрос или группа связанных вопросов. Обязательно формируйте внятный заголовок, максимально отражающий суть вопроса. Подробно описывайте проблему. Не забудьте указать версию phpBBex и какие моды установлены, по возможности добавьте скриншоты проблемы или ссылку на страницу с проблемой.
Moderator: Поддержка

  • 1

Post #1by SinglWolf » 24.10.2017, 12:43

Проблема с расширением подсветки синтаксиса. Не выделяется код по клику КОД: [ВЫДЕЛИТЬ ВСЁ]
Суть проблемы. В расширении для выделения кода по клику используется js-код:
Code: Select all
function codebox_plus_toggle(a, tmp)
{
   if (tmp)
   {
      var e = a.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0];
   }
   else
   {
      var e = a.parentNode.parentNode.getElementsByTagName('dd')[0];
   }
   
   if (e.style.display == 'none')
   {
      e.style.display = 'inline';
   }
   else
   {
      e.style.display = 'none';
   }
}

function codebox_plus_select(a, tmp)
{
   if (tmp)
   {
      var e = a.parentNode.parentNode.getElementsByTagName('div')[1].getElementsByTagName('div')[0];
   }
   else
   {
      var e = a.parentNode.parentNode.getElementsByTagName('dd')[0];
   }

   // Not IE and IE9+
   if (window.getSelection)
   {
      var s = window.getSelection();
      // Safari
      if (s.setBaseAndExtent)
      {
         s.setBaseAndExtent(e, 0, e, e.innerText.length - 1);
      }
      // Firefox and Opera
      else
      {
         // workaround for bug # 42885
         if (window.opera && e.innerHTML.substring(e.innerHTML.length - 4) == '<br>')
         {
            e.innerHTML = e.innerHTML + '&nbsp;';
         }

         var r = document.createRange();
         r.selectNodeContents(e);
         s.removeAllRanges();
         s.addRange(r);
      }
   }
   // Some older browsers
   else if (document.getSelection)
   {
      var s = document.getSelection();
      var r = document.createRange();
      r.selectNodeContents(e);
      s.removeAllRanges();
      s.addRange(r);
   }
   // IE
   else if (document.selection)
   {
      var r = document.body.createTextRange();
      r.moveToElementText(e);
      r.select();
   }
}
В яндекс-браузере код не выделяется. В консоли ругань:
Code: Select all
Uncaught DOMException: Failed to execute 'setBaseAndExtent' on 'Selection': There is no child at offset 51.
Указывая на эту строку:
Code: Select all
      if (s.setBaseAndExtent)
      {
         s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); //ТУТ
      }

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

Added after 2 hours 27 minutes:
Посте упорного гугления нашёл (нашёл ли?) решение. Привел кусок кода, где была ошибка к такому виду:
Code: Select all
if (s.setBaseAndExtent[0]) //Тут подставил нулевой лемент
      {
         s.setBaseAndExtent(e, 0, e, e.innerText.length - 1); //ТУТ была ошибка, по мнению браузера
      }

Хотя браузер перестал ругаться и код стал выделяться, задаю вопрос к знатокам. Правильно ли я сделал?

З.Ы. Доделаю перевод и выложу расширение в мастерскую. Уж больно шикарное расширение. Подсвечивает х.тучу языков :biggrin:
SinglWolf M
Topic author, Мастер
Avatar
Age: 46
Location: Россия, Башкортостан
Reputation: 33
With us: 4 yaers 3 months

Post #2by InTheWeb » 24.10.2017, 16:32

Да здесь на самом форуме без расширений это не работает)
InTheWeb
Бывалый
Reputation: 15
With us: 1 year 4 months

Post #3by SinglWolf » 24.10.2017, 16:34

InTheWeb wrote:Да здесь на самом форуме это не работает)
Ха! И правда... Такая же 1:1 трабла... Но на 2.0.4 (тьфу-тьфу три раза) пока фурычит. :smile:

Added after 2 hours 51 minute:
Мдя... Зашёл на свой тестовый форум через IE11, мой костыль загнулся :toothless: , не выделяет текст, ругается.
Зато на IE11 у форума phpbbex.com выделение кода фурычит. :insane:
SinglWolf M
Topic author, Мастер
Avatar
Age: 46
Location: Россия, Башкортостан
Reputation: 33
With us: 4 yaers 3 months

Post #4by SinglWolf » 25.10.2017, 19:03

Разобрался вроде. Заменил код на тот, который используется в phpBBex 2.0.4, он не глючит в разных браузерах. Выкладываю расширение в Мастерскую.
SinglWolf M
Topic author, Мастер
Avatar
Age: 46
Location: Россия, Башкортостан
Reputation: 33
With us: 4 yaers 3 months


Return to Поддержка