Возможность комментирования iWork, возможно ли это реализовать с помощью JQUERY? - PullRequest
2 голосов
/ 11 февраля 2010

В iWork есть возможность выделить текст, а затем пометить комментарий к этому тексту. Затем комментарий связывается линией с выделенным текстом.

alt text

Мне любопытно, можно ли что-то подобное реализовать в JQUERY. Что меня озадачило: A. Как нарисовать линию и обновить ее, когда пользователь изменяет текст B. Как выделить текст и как-то его пометить?

Мне бы очень хотелось услышать ваши мысли о том, возможно ли это с JQUERY и любыми идеями или плагинами, чтобы указать мне правильное направление.

Ответы [ 4 ]

4 голосов
/ 18 февраля 2010

Да, это не очень сложно сделать.

Первый - вам нужно получить событие выбора

Событие select отправляется элементу, когда пользователь делает выделение текста внутри него. Это событие ограничено полями и полями.

Например, рассмотрим HTML-код:

<form>
  <input id="target" type="text" value="Hello there" />
</form>
<div id="other">
  Trigger the handler
</div>

Обработчик события может быть привязан к вводу текста:

$('#target').select(function() {
  alert('Handler for .select() called.');
});

СМ.: http://api.jquery.com/select/

Второй - вам нужно создать тег

CSS

<style>
body{font-size:12px; font-family:"Trebuchet MS";}
#content1{
border:1px solid #CCCC33;
padding:10px;
margin-top:10px;
width:500px;
}
</style>

(X)HTML

<a href="#" id="click">Something Here</a>
<div class="box">
<div id="content1">

<p><a href="#" id="close">Close</a></p>
</div>
</div>
</body>

Как видите, это очень простой пример, но его использование практически безгранично!

Теперь о коде jQuery, который делает все самое интересное. Я собираюсь показать и скрыть элемент Content1 Div. Для этого я создал приведенный ниже код jQuery, посмотрите, потом я его пройду.

$(document).ready(function(){

$('#content1').hide();

$('a').click(function(){
$('#content1').show('slow');
});

$('a#close').click(function(){
$('#content1').hide('slow');
})

});

Как я упоминал ранее, $ (document) .ready (function ()} - это функция, которая ждет, пока страница не будет готова для манипулирования, прежде чем выполнять код внутри нее.

Следующая строка $ ('# content1'). Hide (); Скрывает Content1 Div для начала. Обратите внимание, что между jQuery и CSS существует связь, в которой используется, в данном случае, ID, но он может использовать класс точно так же, как аргумент в скобках.

Затем мы переходим к следующему разделу кода, который «показывает» DIV при нажатии на связанный текст. $ ( 'А) .click (функция () {}); Это вызывает функцию «щелчка», а затем вызывает эффект «показа» на Content1 Div.

Прочитайте код еще раз и убедитесь, что вы овладели логикой. Мне потребовалось немного времени, чтобы освоить это тоже !!!

Внутри этого Div, который показывается и скрывается, есть еще одна текстовая ссылка, которая будет скрывать Div.

$('a#close').click(function(){
$('#content1').hide('slow');
})

Если вы посмотрите на это, то увидите, что любой элемент «a» (ссылка) с идентификатором «close» вызовет эффект «hide» для содержимого 1 Div.

СМ .: http://dreamweaverspot.com/jquery-show-and-hide-a-div/

Третий - Нарисуй свою линию

Скачать плагин для jQuery SVG - http://jquery.com/plugins/project/svg

Нарисуй свою линию

$("#example1").drawLine(0, 0, 220, 45);

СМ .: http://www.openstudio.fr/Library-for-simple-drawing-with.html

Вот и все. Просто сложите все вместе, чтобы получить, как вы хотите.

1 голос
/ 21 февраля 2010

Тодд в общих чертах изложил большинство всего, что вам нужно сделать здесь, кроме написания заявления для вас. Вам нужно иметь два списка в памяти; один из комментариев и один из тегов, а также способ связать их в DOM (уникальные идентификаторы). Я бы предложил проверить похожие посты о том, как переместить элемент относительно положения прокрутки окна. Вам понадобится какой-то способ определить, какие теги видны в любой момент времени, и я подозреваю, что вы можете сделать это с помощью одной из стандартных функций позиционирования jquery; то же самое необходимо для рисования линии между двумя элементами. Простой поиск дает http://api.jquery.com/position/. После того, как вы определили, какие теги видимы, вы можете заново заполнить элемент пользовательского интерфейса комментариев соответствующими комментариями, найти их позиции и нарисовать линию от элемента с тегом до комментария элемент. Если вам нужно также иметь возможность редактировать комментарии, и вы ожидаете, что они будут сохранены без отправки формы, вам понадобится база данных и вызов ajax для сохранения комментариев после того, как вы закончите редактирование.

Если вы говорите о поле ввода текста, оно будет намного сложнее, и я не думаю, что вы могли бы сделать это с любым из стандартных элементов ввода очень легко. Я бы обратился к одному из редакторов форматированного текста, который может предоставить некоторые из этих функций (YUI?) И объединить их с вашим плагином.

1 голос
/ 20 февраля 2010

Может быть, что-то простое, как всплывающая подсказка, может быть вашим ответом. Я использовал плагин qtip в прошлом, и он имеет эффекты, которые вы ищете.

Взгляните на сайт:

http://craigsworks.com/projects/qtip/

Использование qtip отлично подойдет для хранения информации, плавающей над документом.

Что касается выбора определенных частей текста документа, у Тодда есть лучший метод, и я также нашел такой вопрос:

Выбор текста в элементе (сродни выделению мышью)

Как только вы выделите текст, я оберну его в промежуток с id и использую qtip tip в качестве линии (указывающей на рассматриваемый промежуток). Это можно стилизовать на лету и сделать любой размер, как описано здесь:

http://craigsworks.com/projects/qtip/docs/tutorials/#tips

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

Маркус.

0 голосов
/ 25 февраля 2010

Что касается рисования линий, я предоставил код из моего собственного вопроса и ответа

Как провести линию между перетаскиваемым и сбрасываемым?

Часть TAG выглядит легко, когда вы можете работать с плагином jQuery Field Selection

надеюсь, это поможет.

...