Обернуть длинную строку в Rails, сохраняя URL-адреса? - PullRequest
4 голосов
/ 21 мая 2009

В моем проекте Rails у меня есть следующий код:

auto_link( h( wrap_long_string(post.text,50)  )).gsub(/\n/,"<br />")

wrap_long_string определяется как:

  def wrap_long_string(txt,col = 20)
    txt.gsub(/(.{1,#{col}})( +|$\n?)|(.{1,#{col}})/,
      "\\1\\3\n")
  end

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

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

Я хотел бы иметь следующий текст:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=ZGF&q=example&btnG=Search

превратился во что-то вроде:

aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa<br/>aaaaaaaaaa <a href='http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=ZGF&q=example&btnG=Search'>http://www.google.com/search?hl=en&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=ZGF&q=example&btnG=Search</a>

Ответы [ 2 ]

1 голос
/ 21 мая 2009

В качестве альтернативы, вы можете определить свою собственную auto_link (использовать существующий код в text_helper.rb в качестве модели), чтобы сначала сканировать URL-адреса (и электронные письма), выполнять подстановку, находить индексы того, где вы сделали подстановки, а затем разорвать линию в местах, которые не попадают в эти индексы.

Для этого требуется только существующий код автосвязи и несколько вызовов index () и length ().

1 голос
/ 21 мая 2009

Если у вас есть контроль над порядком их применения, я бы предложил выполнить текст через помощника автоматической ссылки, а затем через средство разбиения длинного текста (и сделать это достаточно «умным», чтобы не считать текст в тегах HTML как текст :)). Это должно создать ссылки, и я верю, что вы можете иметь
между тегами без каких-либо вредных последствий:)

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