Visualiser une révision

Organisation Code LinuxFr

Bruno Michel : révision n°13 (07 novembre 2012 22:03:42)

Le code de [LinuxFr.org](/wiki/LinuxFr.org "Lien du wiki interne LinuxFr.org") est disponible sous licence GNU Affero General Public License

* voir [la page code source du site](http://linuxfr.org/code_source_du_site)
* une copie [~37 Mo] est [disponible sur github](https://github.com/nono/linuxfr.org)
* vous pouvez suivre l'[application des modifications au site via le changelog](http://linuxfr.org/changelog), celui sur [github donne directement les liens d'accès aux commits](https://github.com/nono/linuxfr.org/commits/master)

## Installation ##

Suivre les instructions fournies dans le [README](https://github.com/nono/linuxfr.org#install)

## Organisation générale ##

Le code répond à un modèle MVC ou [Modèle-vue-contrôleur](http://fr.wikipedia.org/wiki/Mod%C3%A8le-Vue-Contr%C3%B4leur) et se base sur [Haml](http://fr.wikipedia.org/wiki/Haml "Définition Wikipédia") pour une syntaxe simplifiée des pages web.

* [CSS](/wiki/CSS "Lien du wiki interne LinuxFr.org") : Le code de vos CSS, ou vos modifications des CSS existantes.

### Comprendre MVC : modèle, vue, contrôleur

Du fait du modèle MVC, pour identifier une modification, vous pouvez procéder ainsi :

* retrouvez le fichier .haml concerné (dans les views/), 
  * pour ce qui est esthétique
* remontez au besoin au contrôleur (dans les controllers/), 
  * pour ajouter un peu de logique métier ou simplement des attributs à afficher ou calculer
* cherchez la définition des objets et leurs méthodes associées (dans les models/), 
  * pour toutes les données disponibles


## Proposer des patchs ##

Nul besoin de s'y connaître en Ruby on rails pour proposer des patchs, que ce soit esthétique ou dans les CSS.

### Déroulement d'une demande de _pull_

Premièrement, il faut un compte sur GitHub.

* Ensuite, il faut se rendre sur https://github.com/nono/linuxfr.org/ en étant loggué et cliquer sur le bouton en haut à gauche intitulé _fork_. Ensuite, on obtient une URL pour pouvoir cloner le dépôt Git (avec des droit d'écriture lors d'un push).
  * On peut ensuite modifier les fichiers et faire ses `commit`, une fois les modifications terminées, il ne faut pas oublier de faire un `git push`. 
* Il est aussi possible d'éditer un fichier directement sur github, cela crée automatiquement un fork (s'il n'existait pas) et une branche spécifique pour le fichier édité
* On revient sur GitHub et dans son compte, on clique sur le bouton _demande de pull_ (aka `pull request`), on écrit ensuite un gentil message à NoNo< qui explique le pourquoi de la demande.
* Ne pas oublier de faire une entrée dans le [suivi](http://linuxfr.org/suivi) (voir [suivi](/wiki/suivi "Lien du wiki interne LinuxFr.org") pour les bonnes pratiques).

Cela fonctionne très bien pour une contribution ponctuelle, à un instant t. 
Pour autant, si plus tard vous voulez de nouveau faire une modification, il est bon de  resynchroniser son dépôt sur le master (et ça je n'ai pas trouvé : hormis effacer mon fork puis recommencer... c'est peut-être la bonne manière, cela mériterait d'être documenté ?). J'ai aussi testé d'éditer le fichier de mon fork, mais cela semblait compliquer le merge (je n'avais qu'une ligne à modifier, mon fichier datant de 6 mois, cela faisait une vingtaine de lignes modifiées... non prises en compte dans l'intermède : la modif' s'appliquant à la version « actuelle » et non à celle que j'ai prise il y a six mois... je ne sais pas si je suis clair, là ?).

### Exemples de contributions pour s'y retrouver dans le code
Vous pouvez regarder quelques commits significatifs pour identifier comment procéder, par exemple :

* [ajouter un curseur en forme de pointeur sur les liens de vote](https://github.com/nono/linuxfr.org/commit/31136bfef98b754b5a951926c9310742a9e56178) une modification simple de css (à reporter pour les autres CSS)
* [ajout lien devant commentaire](https://github.com/nono/linuxfr.org/commit/36d1fde886dadf447b09f886517b8da1247c26a2) une modification de css, de la vue et de javascript
* [amélioration de l'aide Mardown](https://github.com/nono/linuxfr.org/commit/ebc270de1d19f35f2fda3668b36ab9235bff4107) modification de la vue (fichier Haml)
* [ajout fonctionnalité pour ne pas afficher les avatars](https://github.com/nono/linuxfr.org/commit/ecc5a775b4278d755ca6395a671c29a6b7c0c376) modification css, vue et "helper"
* [amélioration mise en forme du tableau de bord](https://github.com/nono/linuxfr.org/commit/bcca6216650bd6fcd907396d3916582561bbcce7) modification vue du dashboard, css, contrôleur, ajout d'une icône
* trouver d'autres commits significatifs pour exemples de patchs

Ci-dessous, l'organisation détaillée des arborescences.

## Arborescence du code

### bibliothèques utilisées

LinuxFr.org respecte les bonnes pratiques du RoR et s'appuie sur des bibliothèques existantes lorsque cela est possible :

* albino
* jquery
* rake
* [redcarpet](https://github.com/tanoku/redcarpet) pour le rendu Markdown
* sanitizer
* à compléter (markdown, bibliothèque pour les langages pygmentize -L lexer)

Voir https://github.com/nono/linuxfr.org/tree/master/vendor/assets/javascripts pour les scripts utilisés.
Voir aussi cette [dépêche sur l'architecture logicielle](http://linuxfr.org/news/architecture-logicielle-de-la-nouvelle-version-de-linuxfrorg).

### gestion de l'application ###

Indiquer les url correspondant à l'arborescence (dashboard = tableau de bord), trier par ordre alphabétique.  

app/ https://github.com/nono/linuxfr.org/tree/master/app liste de toutes les fonctionnalités 
app/assets https://github.com/nono/linuxfr.org/tree/master/app/assets tout ce dont vous avez besoin pour les CSS
app/mailers  
app/views https://github.com/nono/linuxfr.org/tree/master/app/views  liste des vues, correspond généralement à l'URL  


### liste détaillée de l'arborescence du code

```text
app/views/sections
app/views/diaries
app/views/home
app/views/tags
app/views/trackers
app/views/layouts
app/views/sessions
app/views/news
app/views/posts
app/views/links
app/views/static
app/views/redaction
app/views/redaction/paragraphs
app/views/redaction/news
app/views/redaction/links
app/views/devise
app/views/devise/unlocks
app/views/devise/passwords
app/views/devise/registrations
app/views/devise/shared
app/views/devise/mailer
app/views/devise/confirmations
app/views/news_notifications
app/views/shared
app/views/admin
app/views/admin/sections
app/views/admin/friend_sites
app/views/admin/responses
app/views/admin/categories
app/views/admin/accounts
app/views/admin/pages
app/views/admin/logos
app/views/admin/banners
app/views/admin/stylesheets
app/views/admin/forums
app/views/comments
app/views/users
app/views/stylesheets
app/views/forums
app/views/nodes
app/views/search
app/views/boards
app/views/moderation
app/views/moderation/news
app/views/moderation/polls
app/views/polls
app/views/dashboard
app/views/wiki_pages

app/controllers
app/controllers/redaction
app/controllers/admin
app/controllers/moderation

app/models
```
  
### gestion des CSS 

app/stylesheets CSS par défaut  

```text
app/helpers

public/errors
public/fonts
public/javascripts
public/stylesheets
public/stylesheets/contrib
public/stylesheets/pygments

public/images
public/images/icones
public/images/sections
```
public/images/contrib https://github.com/nono/linuxfr.org/tree/master/public/images/contrib liste des images spécifiques aux css contribuées  
```text
public/images/contrib/retro
public/images/contrib/RonRonnement
public/images/contrib/ice
public/images/contrib/kitch
public/images/contrib/grises
public/images/contrib/grayscale
public/images/contrib/grayscale/blocks
public/images/contrib/grayscale/bg
public/images/contrib/grayscale/notice
public/images/contrib/grayscale/icons
public/images/contrib/grayscale/comments
public/images/contrib/grayscale/avatars
public/images/contrib/grayscale/flags
public/images/contrib/opensuse
public/images/contrib/edition_papier
public/images/contrib/sky
public/images/contrib/black_bling
public/images/contrib/black_bling/markitup
public/images/contrib/kaiska
public/images/contrib/colors
public/images/contrib/colors/scalable

public/images/logos
public/images/langs
```

### divers ###

```text
config/
config/templates
config/locales
config/environments
config/initializers
db/
db/migrate
db/pages
lib/
lib/tasks
public/
public/tmp
public/images/nouvelles
public/images/nouvelles/concours_dlfp2009
public/images/markitup
public/images/news
public/images/news/rechargeable_batteries
public/images/news/plantuml
public/images/deontologie
public/images/cuisine
public/images/dessins
public/images/dessins/concours_perenoel2006
public/images/dessins/concours_perenoel2006/lettre_pere_noel_clem
public/images/dessins/concours_perenoel2006/lettre_geekscottes
public/images/dessins/concours_antidrm
public/images/dessins/concours_antidrm/drm_noel
public/images/dessins/concours_antidrm/drm_enferme
public/images/dessins/concours_antidrm/DRM_un_droit_en_moins
public/images/dessins/concours_antidrm/itubes
public/images/dessins/concours_antidrm/drm_oreilles
public/images/dessins/concours_antidrm/drm_creativite
public/images/dessins/concours_antidrm/iShackle
public/images/dessins/concours_antidrm/antidrm-bras
public/images/dessins/concours_antidrm/supermajor
public/images/dessins/concours_antidrm/geekscottes
public/images/dessins/concours_antidrm/drm_musique_clefs
public/images/dessins/concours_antidrm/nouveau_drm
public/images/dessins/concours_antidrm/drm_is_toxic
public/images/dessins/concours_antidrm/protection_des_livres
public/images/dessins/concours_antidrm/do-re-mi
public/images/dessins/concours_antidrm/antidrm
public/images/dessins/concours_antidrm/liberte_de
public/images/dessins/concours_antidrm/stopdrm

public/association
public/board
app/uploaders

script/
spec/
spec/lib
spec/models
spec/factories
spec/controllers
spec/support
spec/requests
tmp/
tmp/sessions
vendor/
vendor/plugins
vendor/plugins/haml
```

(à trier)