Участник:Sergey kudryavtsev/linkificator.js

Материал из Викисловаря

Замечание: Возможно, после публикации вам придётся очистить кэш своего браузера, чтобы увидеть изменения.

  • Firefox / Safari: Удерживая клавишу Shift, нажмите на панели инструментов Обновить либо нажмите Ctrl+F5 или Ctrl+R (⌘+R на Mac)
  • Google Chrome: Нажмите Ctrl+Shift+R (⌘+Shift+R на Mac)
  • Internet Explorer / Edge: Удерживая Ctrl, нажмите Обновить либо нажмите Ctrl+F5
  • Opera: Нажмите Ctrl+F5.
function isAlpha (s_char)
{
  var n_code = s_char.charCodeAt(0);
  return (n_code >= 0x0041 && n_code <= 0x005A) || (n_code >= 0x0061 && n_code <= 0x007A) || (n_code >= 0x00C0 && n_code <= 0x00FF) ||
         (n_code >= 0x0410 && n_code <= 0x044F) || (n_code == 0x0451) || (n_code == 0x0401);
}

function linkificate (s_src)
{
  var s_dest  = "";
  var n_state = 0;
  var n_len   = s_src.length;
  var n_pos   = 0;
  while (n_pos < n_len) {
    var s_char = s_src.charAt(n_pos);
    if (isAlpha(s_char)) {
      if (n_state == 0) {
        s_dest = s_dest + "[[" + s_char;
        n_state = 1;
      } else {
        s_dest = s_dest + s_char;
      }
    } else {
      if (n_state == 1) {
        s_dest = s_dest + "]]" + s_char;
        n_state = 0;
      } else {
        s_dest = s_dest + s_char;
      }
    }
    n_pos++;
  }
  if (n_state == 1) {
    s_dest = s_dest + "]]";
    n_state = 0;
  }
  return s_dest;
}

function linkify() {
  var wpTextbox1 = document.editform.wpTextbox1;
  wpTextbox1.focus();

  if (typeof wpTextbox1.selectionStart != 'undefined') { // Mozilla / Opera / Safari3
    var n_start_pos = wpTextbox1.selectionStart;
    var n_end_pos = wpTextbox1.selectionEnd;
    var s_value = wpTextbox1.value;
    var s_str = linkificate(s_value.substring(n_start_pos, n_end_pos));
    wpTextbox1.value = s_value.substring(0, n_start_pos) + s_str + s_value.substring(n_end_pos)
  } else if (document.selection && document.selection.createRange) { // IE
    var range = document.selection.createRange();
    range.text = linkificate(range.text);
  } 
}