Разрешение пользователям размещать inline-комментарии - PullRequest
2 голосов
/ 29 июля 2011

Какой эффективный способ разрешить пользователям размещать встроенные комментарии в блоке текста на веб-странице?

Например, если была такая статья, как:

congue eget ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.

Я бы хотел, чтобы посетители веб-страницы могли комментировать некоторый текст, где они могут выбрать несколько слов и начать вводить встроенный комментарий. Наличие индекса для слов, чтобы каждое слово имело номер, не будет работать, потому что текст можно редактировать, и тогда номера слов не будут точными.

Что-то не так с изменением сохраненного текста и добавлением разметки для каждого комментария? Такие как:

congue eget ipsum. Cum sociis natoque <user:123;comment:123>penatibus et magnis</user:123;comment:123> disparturient montes, nascetur ridiculus mus.

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

Есть ли лучшие решения для этого?

Ответы [ 2 ]

2 голосов
/ 29 июля 2011

Я бы использовал javascript для извлечения выделенного текста, а затем вычислял его положение, считая символы от начала до выделенного текста. Таким образом, в базе данных я бы сохранил комментарий, «стартовую» позицию и «длину» выбора. Проблема с этим решением состоит в том, что вы не можете изменить исходный текст, потому что если вы это сделаете, вам придется обновить положение всех комментариев (некоторые из них, возможно, придется удалить)

Это легкая часть. Сложнее всего было бы отобразить комментарии из-за всех проблем, перечисленных @tskuzzy (перекрывающиеся комментарии)

Вот небольшой эксперимент, который я провел:

http://jsfiddle.net/5jNg9/1/

<div id="content">
congue eget ipsum. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.
</div>
<input type="button" onclick="checkSelection()" value="Get Selection"/>

<script>
function checkSelection(){
    var text = document.getElementById('content').innerHTML;
    var selection = document.getSelection();
    if(selection == ""){
        alert("cmon' at least select something first!");
    } else{
        var start = text.search(selection);
        alert("selection starts at character: "+ start +
              "\n and ends at character: "+(selection.length + start - 1) + "\n" +
              "the selected text is: '"+selection+"'");
    }
}
</script>
2 голосов
/ 29 июля 2011

Ну, во-первых, изменение базовой разметки не будет работать хорошо, потому что, что произойдет, если встроенные комментарии перекрываются?

Что происходит, когда текст редактируется таким образом, чтобы слова, которые были изменены, содержали встроенный комментарий?

На самом деле нет «идеального» способа сделать это, не имея более специфических спецификаций. Я предлагаю хранить комментарии как индекс слов, как вы предложили. Если текст изменен, запустите diff между старой версией и новой версией. Используя эту разницу, вы можете попытаться обновить индексы встроенных комментариев и удалить комментарии, которые были размещены на измененных фрагментах текста.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...