Benoît Sibaud : Lien cassé (11 avril 2015 12:07:28)
Le code de [[[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]]] : 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]]] 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. Pour ce faire, il faut lancer `git remote add nono https://github.com/nono/linuxfr.org.git` qui ajoute le dépot de nono comme dépôt distant puis lancer `git pull nono master` pour _merger_ le dépôt de nono avec la branche master locale.
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)