tinyMCE простая подсветка синтаксиса - PullRequest
1 голос
/ 06 августа 2010

Мне нужна простая подсветка синтаксиса в реальном времени в редакторе tinyMce. Я хочу выделить (изменить фон или цвет текста) для каждого #{keyword} и #{more keywords} в тексте. Ключевое слово может содержать только буквы, цифры и точки (.). Я не знаю, хорошая ли моя идея:

  • привязка к событию onChange редактора
  • удалить все вхождения <span class="code">#{keyword}</span> (регулярное выражение)
  • найти все # {ключевое слово} и заменить их на # {найденное ключевое слово}

(для класса css code фон будет настроен на какой-либо цвет)

Есть идеи, как решить эту проблему?

1 Ответ

2 голосов
/ 11 августа 2010

Привязка к событию onChange выглядит нормально, но вы должны рассмотреть возможность использования событий onKey --- Я надеюсь, что следующий фрагмент кода будет вам полезен:

css (определяется в content_css, т.е.):

[current] {
background-color:yellow;
}
[changed] {
background-color:green;
}

js helpfunctions:

var select_current = function(node){
  unselect_current();
  node.setAttribute('current','true');
};

var unselect_current = function(){
  var n = ed.getBody().firstChild;
  while (n){
    if (n.nodeType == 1 && n.getAttribute('current'))
    {
      n.removeAttribute('current');
    }
    n = n.nextSibling;
  }
};

p_of = function(node) // returns p-Element of node
{
  while (node){
  if (node.nodeName == 'BODY') { return null; }
  if (node.nodeName == 'P')    { return node; }
    else { node = node.parentNode; }                    
  }
  return null;
}

при вызове по событию:

var _node_changing = false;
console.log('onNodeChange: ', arguments);
if (!_node_changing && element.getAttribute('_mce_type') != 'bookmark'){
  _node_changing = true;
  var p = p_of(element);
  if (p){
    if (!p.getAttribute('current')){
    select_current(p);
    }               
  }
  _node_changing = false;
}
...