Magazine

truncate_around

Publié le 09 octobre 2008 par Cédrci Bousmanne

Avec Ruby On Rails, il y a deux petites fonctions sympa à utiliser : truncate(), qui permet de tronquer une chaîne de caractères (string), et highlight(), qui, quant à elle, permet de mettre en évidence un mot dans une chaîne.

Le petit défaut de la fonction truncate() est de ne prendre que trois paramètres :

  1. La chaîne de caractères qui nous intéresse
  2. Le nombre de caractères maximums à afficher
  3. Et enfin, paramètre optionnel, la chaine de séparation, par exemple :

Or, dans le cas d’une completion automatique dans un formulaire de recherche, il pourrait être interressant de tronquer la ou les suggestions autours de la chaîne de caractères entrée par l’utilisateur. On pourrait également imaginer que la chaîne de caractères en question soit mise en évidence à l’aide de la fonction highlight().

C’est exactement ce que fait le helper truncate_around ci-dessous :

1
def truncate_around(string, term, length, do_highlight = false, separator = "…")

2
 

3
return if(string.nil? or term.nil? or length < 1)

4
r = term if term.size == length

5
r = term if term == string

6
r = string if string.size <= length

7
 

8
length = length - term.size

9
term_x = string.index(term)

10
term_y = term_x + term.size

11
 

12
if(!r)

13
  if(term_x == 0)

14
    a = 0

15
    b = length

16
    r = string[a..b] + separator

17
  elsif(term_y == string.size)

18
    b = string.size

19
    a = string.size - length

20
    r = separator + string[a..b]

21
  elsif(term_x < (length/2) + 1)

22
    a = 0

23
    b = length

24
    r = string[a..b] + separator

25
  elsif((string.size - term_y) < (length/2)+1)

26
    b = string.size

27
    a = string.size - length

28
    r = separator + string[a..b]

29
  else

30
    if length % 2 == 0

31
      a = term_x - length/2

32
      b = term_y + length/2

33
    else

34
      a = term_x - length/2

35
      b = term_y + length/2 + 1

36
    end

37
    r = separator + string[a..b] + separator

38
  end

39
end

40
 

41
if do_highlight

42
  return highlight(r, term)

43
else

44
  return r

45
end

Cette fonction prend 5 paramètres, dont 2 optionnels :

  1. string : prend la chaîne de caractères de base
  2. term : prend le mot-clé
  3. length : prend la longueur totale de la chaîne de caractères a retourner
  4. do_highlight : précise si on applique la fonction highlight() à la chaîne retournée. Par défaut : false.
  5. separator : prend une chaîne de caractères a appliquer en début et/ou fin de chaîne retournée. Par défaut : .

Exemple d’utilisation

Copier-coller cette fonction dans l’un de vos helper. Pour cet exemple, nous partirons du principe que cette fonction est présente dans le helper application_helper.rb.

script/console
>> helper :application
>> string = "une chaine de test, pour démontrer la puissance de truncate_around()"
>> term = "démontrer"
>> length = 20
>> helper.truncate_around(string, term, length)
=> "&hellip;pour démontrer la pu&hellip;"
>> helper.truncate_around(string, term, length, true)
=> "&hellip;pour <strong class=\"highlight\">démontrer</strong> la pu&hellip;"

Retour à La Une de Logo Paperblog

A propos de l’auteur


Cédrci Bousmanne 1 partage Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte