Word wrap dla zbyt dlugich wpisow

Witajcie,

Ciekawi mnie jak sie zabezpieczacie przed zbyt dlugimi wpisami.

Zalozmy ze piszemy aplikacje publicznie dostepna, na przyklad forum dyskusyjne, bloga z opcja komentowania czy tym podobne historie.

Jak najsensowniej zabezpieczyc sie przed wpisami typu [quote]Baaaaaaaaaaaaaaaaaaaaaaaaaaaaaaarddzooooooooooooooooooooooooooooo_dluuuuuuuuugi___wpiiiiiiiis[/quote]
, chodzi o to zeby silnik aplikacji automatycznie wlozyl w to jakiegos
.

Szukalem, znalazlem pare rozwiazan na gsub, metoda word_wrap to nie to czego mozna by oczekiwac, jakies pomysly na sprytne rozwiazanie problemu ?

Pozdrowienia

Use the wbr luke!

http://www.quirksmode.org/oddsandends/wbr.html

No w porzo, ale to nie rozwiazuje problemu automatycznego dzielenia tych wpisow :slight_smile:
Mimo to dziekuje za cenne info :wink:

@drogus: tyle, że musisz wiedzieć gdzie tego wbr’a wstawić :slight_smile:

@astropanic: zdefiniuj co to znaczy długi wpis

Najlepiej nie zezwalać na takie komentarze (spammer / trol) a nie martwić się jak je wyświetlić, np:

[code=ruby]class Comment < ActiveRecord::Base
validate :reject_long_words

protected
def reject_long_words
errors.add_to_base(“Treść zawiera słowa dłuźsze niż 25 znaków”) if self.body && self.body.split(’ ').find {|x| x.length > 25}
end
end[/code]

@hosiawak, rozumiem idee, ale jak to zrobic zeby nie trzebabylo do kazdego modelu osobno dodawac ? Juz przy prostej spolecznosciowce masz powiedzmy okolo 10 modeli, z czego wiekszosc moze miec pola typu :title i :content co daje 10 x 2 = ~20 mozliwosci popelnienia tej szatanskiej zbrodni.

Mysle ze problem jest o tyle uniwersalny ze jego rozwiazanie przydaloby sie rozwiazac z glowa i umieszczac w kazdej aplikacji, gdzie uzytkownik moze dodac cos “od serca” :slight_smile:

Mozna by z automatu wyciagac atrybuty modelu i kazdy z nich sprawdzac z rowniez z automatu, ale problem w tym ze czasem masz pole chocby na url, gdzie wartosc moze byc bardzo dluga i wtedy klops, to pole trza przepuscic :slight_smile:

Wiec moze odgornie filtrowaac zbyt dlugie dane, a pomijac walidacje atrybutow, ktore sa w jakis sposob oznaczone ? (W jaki ? )

Pozdrowienia

Dobra, wyrzezbilem cos takiego:

shorty

Zapewne bedzie mocny refactoring, ale mysle ze jak na moj drugi plugin do Rails jest okejka.

Prosze o propozycje optymalizacji :slight_smile:

Pozdrowienia

Jeśli jest :except to przydałoby się też :only
Poza tym zmieniłbym nazwę z acts_as_shorty na validates_long_words albo chociaż validates_as_shorty.
Ten plugin nie dodaje żadnej funkcjonalności do modelu poza walidacją.

IMHO powinno być tak:

class Model validates_long_words :title, :description end
czyli jawne określenie jakie kolumny mają być sprawdzane. Interfejs podobny do reszty metod validates_* a poza tym domyślne sprawdzanie (jeśli nie określisz kolumny) dla większości kolumn w większości tabel nie będzie miało sensu (to że kolumna ma typ string lub text nie oznacza automatycznie że chcesz poddać ją walidacji, a w Twoim pluginie tak jest).

I jeszcze jedno: plugin nie ma żadnych testów.

Może głupie pytanie, ale czy nie wystarczy

overflow: hidden;

?

[quote=Bragi]Może głupie pytanie, ale czy nie wystarczy

overflow: hidden;

?[/quote]
Wcale nie głupie, jak użytkownik jest mendą i chce namieszać to niech mu utnie w połowie zdania, i tak nic mądrego nie napisał.