Единый форум поддержки

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » Единый форум поддержки » Администрирование форума » Общие вопросы по администрированию (7)


Общие вопросы по администрированию (7)

Сообщений 781 страница 787 из 787

1

В этой теме задаём вопросы по администрированию форума

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

Для запросов новых скриптов и их модификаций, пожалуйста, пишите в теме Запросы по скриптам #11
Если у вас возникли вопросы по оформлению форума, их можете задать в теме Общие вопросы по оформлению (65) #2
У вас возникла непредвиденная проблема с форумом, но самостоятельно вы её решить не можете? Создайте тему в разделе Проблемы с форумом, ознакомившись с правилами раздела.

Важная информация перед тем, как задать вопрос:

  • Ответы в теме дают другие участники форума по собственному желанию.

  • Администрация не может гарантировать моментальное решение или абсолютную корректность каждого ответа.

  • Пожалуйста, уважайте чужое время и усилия других пользователей, старайтесь писать грамотно и доходчиво.

  • Грубое или требовательное отношение к участникам форума неприемлемо и может привести к отказу в помощи на всём форуме.

Подробно сформулируйте свой вопрос, чтобы повысить вероятность отклика помощи:

  • Укажите ссылку на форум: Если ваш вопрос касается конкретного форума, обязательно укажите прямую ссылку на него. Это позволит нам увидеть проблему и предложить наиболее точное решение, не тратя время на догадки.

  • Опишите свой вопрос: Подробно и понятно изложите, что именно вас интересует или какая проблема возникла. Чем больше деталей вы предоставите, тем легче будет понять и помочь.

Если на ваш вопрос долго нет ответа, пожалуйста, напомните о своём вопросе через разумное время (например, через сутки), процитировав его. Избегайте излишней навязчивости.

Отредактировано Alex_63 (Ср, 2 Авг 2017 13:16:07)

+1

781

kolobdur74 написал(а):

Этого века, в прошлом веке и близко не было подобных дизанов, там вообще практически без фонов были.

Ну тут я совсем немного промазал. Да, конец 90-х более точсичные странички были. Разноцветно ляпистые. Тут, конечно, прогресс у Вас :D Но всё равно в 2007 это отстой было. Куда лучше  варианты интернет-пространство занимали, чем вот такое))  Судя по размерам тела самого форума, он у вас рассчитан на мониторы 90-х - 800х600 пикселей - чтобы влезал в монитор :D Но в 2007-м 1024х768 уже устаревшими были или закат их эры был. Точно в 2007-м такие рамки майна должны были быть в дизанах(с)?
Так или иначе эпоха веб 1.0 у Вас совсем не топовая отражена. Но зато новые стандарты ))
Я не понимаю, как над этим можно вообще не смеяться? :D  Или Вы троллите меня просто?

Отредактировано ivanches (Вс, 21 Июн 2026 20:12:58)

0

782

Завершу стилизацию форума под браузеры 15-и летней давности, возьмусь за отдельное решение  - адаптацию под ИЕ стокового на Хрюше :D Это вот вообще супер-ламповость и круть должна быть.. А тут какие то унылые "современные стандарты")) Сами по себе стандарты эти только недавно оформились. Это дело такое, у ФФ свои стандарты были, у Гугла свои, у ИЕ свои .

0

783

ivanches написал(а):

Я так и не понял, это баг ИЕ11 или всё-таки скрипт отфильтровывает ИЕ?

Скрипт отсеивает браузеры, не поддерживающие некоторые используемые стандартные возможности JS, в частности selection API.

Код:
$.isFunction(window.getSelection) && $.isFunction(Array.from)

На этих (не ограничиваясь указанными в проверке) возможностях построен весь принцип работы визуального редактора, в IE11 они по-видимому не поддерживаются, поэтому он там в любом раскладе работать не будет.

+1

784

Alex_63 написал(а):

Скрипт отсеивает браузеры, не поддерживающие некоторые используемые стандартные возможности JS, в частности selection API.

Код:
$.isFunction(window.getSelection) && $.isFunction(Array.from)

На этих (не ограничиваясь указанными в проверке) возможностях построен весь принцип работы визуального редактора, в IE11 они по-видимому не поддерживаются, поэтому он там в любом раскладе работать не будет.

Спасибо!
Жаль, конечно. ИЕ11 не поддерживает Array.from

0

785

Проблема решена внедрением полифила. Теперь визульный редактор работает и в ИЕ11.

Код:
<script>
if (!Array.from) {
  Array.from = function (object) {
    return Array.prototype.slice.call(object);
  };
}
</script>
<!-- WYSI - визуальный редактор сообщений © Alex_63, 2024 -->
<link rel="stylesheet" type="text/css" href="//forumstatic.ru/f/ru/bestbb/wysi.css" />
<script type="text/javascript" src="//forumstatic.ru/f/ru/bestbb/wysi.js"></script>

================
Не совсем работает, конечно, но запускается)) Дальше по ходу ковырать буду))

Отредактировано ivanches (Пн, 22 Июн 2026 12:54:58)

+2

786

С ИЕ проблемы одни. ФФ47 с редактором работает, единственный косяк обнаружил, нет подсветки нажатых кнопок. Вот это конкретный полифил, который устраняет эту неприятность))

Код:
<script>
// Имитация события selectionchange для Firefox 47
(function() {
  // Если браузер уже поддерживает это событие (как Chrome), ничего не делаем
  if ('onselectionchange' in document) return;

  var lastRange = null;

  function checkSelection() {
    var sel = window.getSelection();
    if (!sel || sel.rangeCount === 0) return;
    var currentRange = sel.getRangeAt(0);
    
    // Если выделение или позиция курсора изменились — создаем событие вручную
    if (!lastRange || lastRange.startContainer !== currentRange.startContainer || 
        lastRange.startOffset !== currentRange.startOffset || 
        lastRange.endContainer !== currentRange.endContainer || 
        lastRange.endOffset !== currentRange.endOffset) {
      
      lastRange = currentRange.cloneRange();
      
      // Генерируем стандартное событие selectionchange
      var event = document.createEvent('Event');
      event.initEvent('selectionchange', true, document);
      document.dispatchEvent(event);
    }
  }

  // Отслеживаем действия пользователя внутри текстового поля
  document.addEventListener('keyup', checkSelection, true);
  document.addEventListener('mouseup', checkSelection, true);
  document.addEventListener('click', checkSelection, true);
})();

</script>
<!-- WYSI - визуальный редактор сообщений © Alex_63, 2024 -->
<link rel="stylesheet" type="text/css" href="//forumstatic.ru/f/ru/bestbb/wysi.css" />
<script type="text/javascript" src="//forumstatic.ru/f/ru/bestbb/wysi.js"></script>

Кнопки заработали, как на современных браузерах. В ФФ47 работает всё полностью теперь.
https://upforme.ru/uploads/0000/14/1c/39596/t296393.png

0

787

ИЕ11 - жесть! Но редактор работает. правда рамка ужасная не убтрается, черпез 10 раз перевод строки срабатывает и .... пока только набросок.

Код
Код:
<script>
// ==========================================
// ARRAY.FROM (СТАНДАРТ ECMA-262)
// ==========================================
(function () {
  if (!Array.from) {
    Array.from = (function () {
      var toStr = Object.prototype.toString;
      var isCallable = function (fn) { return typeof fn === 'function' || toStr.call(fn) === '[object Function]'; };
      var toInteger = function (value) {
        var number = Number(value);
        if (isNaN(number)) { return 0; }
        if (number === 0 || !isFinite(number)) { return number; }
        return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
      };
      var maxSafeInteger = Math.pow(2, 53) - 1;
      var toLength = function (value) { var len = toInteger(value); return Math.min(Math.max(len, 0), maxSafeInteger); };
      return function from(arrayLike) {
        var C = this, items = Object(arrayLike);
        if (arrayLike == null) { throw new TypeError("Array.from requires an object"); }
        var mapFn = arguments.length > 1 ? arguments : void undefined, T;
        if (typeof mapFn !== 'undefined' && !isCallable(mapFn)) { throw new TypeError("Array.from: mapFn must be a function"); }
        var len = toLength(items.length);
        var A = isCallable(C) ? Object(new C(len)) : new Array(len);
        var k = 0, kValue;
        while (k < len) {
          kValue = items[k];
          A[k] = mapFn ? (typeof T === 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k)) : kValue;
          k += 1;
        }
        A.length = len; return A;
      };
    }());
  }
}());

// ==========================================
// 2. ПОЛИФИЛЫ ДЛЯ РАБОТЫ С DOM И ТЕКСТОМ В IE11
// ==========================================

// Исправление Node.prototype.contains для текстовых узлов
(function() {
  if (window.Node && Node.prototype && !Node.prototype.contains) {
    Node.prototype.contains = function(node) {
      if (!node) return false;
      do { if (this === node) return true; } while (node = node.parentNode);
      return false;
    };
  } else if (window.Node && Node.prototype) {
    var originalContains = Node.prototype.contains;
    Node.prototype.contains = function(node) {
      try { return originalContains.call(this, node); } catch (e) {
        if (!node) return false;
        do { if (this === node) return true; } while (node = node.parentNode);
        return false;
      }
    };
  }
})();

// Полифил для Element.prototype.remove
(function () {
  var arr = [window.Element, window.CharacterData, window.DocumentType];
  arr.forEach(function (item) {
    if (item && !item.prototype.remove) {
      Object.defineProperty(item.prototype, 'remove', {
        configurable: true, enumerable: true, writable: true,
        value: function remove() { if (this.parentNode !== null) { this.parentNode.removeChild(this); } }
      });
    }
  });
})();

// Фикс для корректного определения координат мыши (caretRangeFromPoint)
if (!document.caretRangeFromPoint && document.msCaretPositionFromPoint) {
  document.caretRangeFromPoint = function(x, y) {
    var msPosition = document.msCaretPositionFromPoint(x, y);
    if (!msPosition) return null;
    var range = document.createRange();
    range.setStart(msPosition.offsetNode, msPosition.offset);
    range.setEnd(msPosition.offsetNode, msPosition.offset);
    return range;
  };
}

// Полный полифил String.prototype.codePointAt
if (!String.prototype.codePointAt) {
  (function() {
    'use strict';
    var codePointAt = function(position) {
      if (this == null) { throw TypeError(); }
      var string = String(this), size = string.length;
      var index = position ? Number(position) : 0;
      if (index != index) { index = 0; }
      if (index < 0 || index >= size) { return undefined; }
      var first = string.charCodeAt(index), second;
      if (first >= 0xD800 && first <= 0xDBFF && size > index + 1) {
        second = string.charCodeAt(index + 1);
        if (second >= 0xDC00 && second <= 0xDFFF) {
          return (first - 0xD800) * 0x400 + (second - 0xDC00) + 0x10000;
        }
      }
      return first;
    };
    Object.defineProperty(String.prototype, 'codePointAt', { 'value': codePointAt, 'configurable': true, 'writable': true });
  }());
}

// Корректировка "живых" диапазонов getRangeAt в IE11
(function() {
  if (typeof window.getSelection === 'function') {
    var proto = window.getSelection().constructor.prototype;
    var originalGetRangeAt = proto.getRangeAt;
    proto.getRangeAt = function(index) {
      var range = originalGetRangeAt.call(this, index);
      if (range && range.startOffset < 0) { range.setStart(range.startContainer, 0); }
      if (range && range.endOffset < 0) { range.setEnd(range.endContainer, 0); }
      return range;
    };
  }
})();

// Принудительное добавление insertNode для забагованных объектов Range
(function() {
  var insertNodePolyfill = function(node) {
    if (!node) return;
    try {
      if (this.startContainer) {
        if (this.startContainer.nodeType === 3) {
          var nextTextNode = this.startContainer.splitText(this.startOffset);
          this.startContainer.parentNode.insertBefore(node, nextTextNode);
        } else {
          this.startContainer.insertBefore(node, this.startContainer.childNodes[this.startOffset]);
        }
      } else if (this.pasteHTML) { this.pasteHTML((node.nodeType === 1) ? node.outerHTML : node.data); }
    } catch (e) {
      var editor = document.getElementById('wysi-reply');
      if (editor) editor.appendChild(node);
    }
  };
  if (window.Range && !Range.prototype.insertNode) { Range.prototype.insertNode = insertNodePolyfill; }
  if (document.createRange) {
    var originalCreateRange = document.createRange;
    document.createRange = function() {
      var r = originalCreateRange.apply(this, arguments);
      if (r && !r.insertNode) r.insertNode = insertNodePolyfill;
      return r;
    };
  }
})();


// Имитация события selectionchange для Firefox 47
(function() {
  // Если браузер уже поддерживает это событие (как Chrome), ничего не делаем
  if ('onselectionchange' in document) return;

  var lastRange = null;

  function checkSelection() {
    var sel = window.getSelection();
    if (!sel || sel.rangeCount === 0) return;
    var currentRange = sel.getRangeAt(0);
    
    // Если выделение или позиция курсора изменились — создаем событие вручную
    if (!lastRange || lastRange.startContainer !== currentRange.startContainer || 
        lastRange.startOffset !== currentRange.startOffset || 
        lastRange.endContainer !== currentRange.endContainer || 
        lastRange.endOffset !== currentRange.endOffset) {
      
      lastRange = currentRange.cloneRange();
      
      // Генерируем стандартное событие selectionchange
      var event = document.createEvent('Event');
      event.initEvent('selectionchange', true, document);
      document.dispatchEvent(event);
    }
  }

  // Отслеживаем действия пользователя внутри текстового поля
  document.addEventListener('keyup', checkSelection, true);
  document.addEventListener('mouseup', checkSelection, true);
  document.addEventListener('click', checkSelection, true);
})();

</script>
<!-- WYSI - визуальный редактор сообщений © Alex_63, 2024 -->
<link rel="stylesheet" type="text/css" href="//forumstatic.ru/f/ru/bestbb/wysi.css" />
<script type="text/javascript" src="//forumstatic.ru/f/ru/bestbb/wysi.js"></script>

При желании можно доковырять
https://upforme.ru/uploads/0000/14/1c/39596/t678102.png
:D

0


Вы здесь » Единый форум поддержки » Администрирование форума » Общие вопросы по администрированию (7)